2013-07-16 4 views
0

여기에서 그림 16f877 MCU 및 mikroc을 사용하여 그림 편집에 PWM 신호를 이해합니다. 데이터 시트에 따르면이 MCU는 PWM에서 10 비트 분해능을 가지고 있다고합니다. 나는이 결의안이 무엇을 의미하는지 이해할 수 없다. 그것은 내가 1024 개의 다른 속도를 얻을 수있는 모터에 전원을 사용하는 것을 의미합니까. 여기 mikroc에서 gradully LED의 빛을 증가시키고 다시 감소시키기 위해 쓴 프로그램입니다.PWM 해상도 16F877

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 gradully 최대 및 suddnly 끄기 및 다시 gradully 깜박임. 하지만 라인을 변경하면 while(i != 1023) while (i! = 255) 예상되는 결과를 제공합니다.

그래서 10 비트 해상도가 무엇인지 알기를 원합니다. 잘못 이해했거나 잘못 했나요? 마지막에

도와주세요

....

답변

0

나는 해결책을 얻었다. 그것은 다른 사람에게 도움이 될 수 있기 때문에 그것을 줄 수 있습니다.

mokroc의 pwm 라이브러리는 10 비트를 지원하지 않습니다. 그래서 PWM1_Set_Duty()은 0에서 255까지의 숫자 만 허용합니다. 0 % duty에서 100 % duty cycle까지입니다. 10 비트 해상도를 사용하려면 레지스터에 대한 manully writting을해야합니다.

+0

@TevoD ... 미리 알림에 대한 –

+0

감사합니다. :) 문제를 해결할 수있어서 다행입니다. –

0

이제 코드를 성공적으로 관리 할 수있게되었으므로 내부 PIC 레지스터를 사용해보십시오. RGB가 8 비트보다 큰 경우에는 10 비트의 해상도가 훨씬 더 강력합니다. 직접 작동하도록하는 것은 그리 어렵지 않고, 데이터 시트에 직접 작성되어 있으며, PWM 모듈의 듀티 사이클과 주파수를 계산하는 기능을 제공하는 많은 웹 사이트가 있습니다.

마이크로 칩에서 CCP (PWM) 모드에 대한 데이터 시트 : 나는 이일 전에 내 자신의 대답을 받아 들일 수 없다 http://ww1.microchip.com/downloads/en/DeviceDoc/31014a.pdf