Ðăng Nhập

View Full Version : PWM trong PIC, 10bit & 8bit khác nhau chỗ nào ?


TheHouse
05-12-2010, 01:49 PM
Trong con PIC 16F877a. Mình đang cố tìm hiểu về con PWM nhưng không hiểu bộ PWM 10bit & 8bit khác nhau chỗ nào. Mình biết là còn phụ thuộc vào tải của mình thì điều xung ở tần số bao nhiêu là vừa. Nhưng mình có đặt câu hỏi về ảnh hưởng của tần số điều xung đối với tải bên DTVN mà không thấy ai trả lời. Không biết là tần số đó phụ thuộc vào vật liệu đóng ngắt tải hay miễn sao trong dải cho phép thì mình chọn tần số nào cũng được.

Bộ PWM của PIC có phụ thuộc vào Timer 2 hay không, thấy trong các example có dùng đến timer 2. Mà chưa hiểu lắm, tiếng anh bình thường dịch thì tạm, tiếng anh chuyên ngành dịch hơi gà nên chưa hiểu. Mình dùng CCS.

TheHouse
05-12-2010, 02:25 PM
Độan code này mình viết y chang trong ebook, nhưng ngõ ra CCP1 không có tín hiệu.


#include <16f877a.h>
#use delay(clock=20000000)
#fuses HS, NOWDT


int duty_cycle, control_bits, hold_value;

void main()
{
port_b_pullups(TRUE);
setup_timer_2(T2_DIV_BY_1, 99, 1);
setup_ccp1(CCP_PWM);

while(true)
{
hold_value = (~(input_b()) & 0x7);
while ((control_bits = (~(input_b()) & 0x7)) == hold_value);

switch (control_bits)
{
case 0x1: duty_cycle = 35;
break;
case 0x2: duty_cycle = 59;
break;
case 0x4: duty_cycle = 94;
break;
default: duty_cycle = 0;


}
}

}

trungduc
14-12-2010, 09:36 AM
Mình có viết 1 chương trình con về pwm 8 bit nếu coi dùng được không!


PWM_SUBROUTINE

MOVWF CCPR1L
MOVWF CCPR2L

BANKSEL TRISC
MOVLW D'0' ;set PORTC as all outputs
MOVWF TRISC
BANKSEL PORTC
MOVLW 0x0C
MOVWF CCP1CON
MOVLW 0x0C
MOVWF CCP2CON

MOVLW D'63' ;set highest PWM value
BANKSEL PR2 ;over this (63) is permanently on
MOVWF PR2
BANKSEL TMR2

MOVLW 0x00
MOVWF T2CON

BSF T2CON, TMR2ON ;and start the timer running

RETURN