pic 16F877中的PWM分辨率

时间:2013-07-16 08:31:33

标签: pic mikroc pwm

这里我使用pic 16f877 MCU和mikroc for pic compilerto了解PWM signels。  数据表显示该MCU在PWM中具有10位分辨率。我不明白这个决议意味着什么。这是否意味着如果我用它为电机供电,我可以获得1024种不同的速度。   这是我在mikroc写的一个程序,逐渐增加LED的亮度并再次降低它。

int i=0;

void blink_up(){
  i++;
  PWM1_Set_Duty(i);
  Delay_ms(10);
}

void blink_down(){
  i--;
  PWM1_Set_Duty(i);
  Delay_ms(10);
}


void main() {
  trisc=0;
  portc=0;

  PWM1_Init(5000); //initilize PWM 1 at 5kHz
  PWM1_Start();
  PWM1_Set_Duty(i);

 while(1){
    while(i != 1023){
     blink_up();
    }

    while(i!=0) {
     blink_down();
  }

}

但这不会给出预期的结果。 LED逐渐消失,苏醒关闭,再次渐渐闪烁。但是当我换线的时候 while(i != 1023)到`while(i!= 255)它给出了预期的结果。

所以我想知道10位分辨率意味着什么,我明白错了还是我做错了。

请帮忙......

2 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。我给它,因为它可能对其他人有帮助。

mokroc的pwm库不支持10位。所以PWM1_Set_Duty()只接受0到255之间的数字。即0%占空比到100%占空比。如果你想使用10位分辨率,你应该手动写入寄存器。

答案 1 :(得分:0)

现在您已成功设法使代码正常工作,请尝试使用内部PIC寄存器。 10比特的分辨率更强大,比方说,RGB比8比特更强。它不是很难让它自己工作,它直接写在数据表中,很多网站都给你提供了计算PWM占空比和频率的功能。模块。

MicroChip的CCP(PWM)模式数据表:http://ww1.microchip.com/downloads/en/DeviceDoc/31014a.pdf