Ðề tài: Pic 18f452
View Single Post
Old 15-04-2006, 09:33 PM   #16
ahchu
Đệ tử 1 túi
 
Tham gia ngày: Mar 2006
Bài gửi: 23
:
Smile

Hì hì..
Trong 2 tuần qua em cũng đã tìm được cách chạy PWM rồi. Đây là đoạn code cho PWM

PWM_norm
;set PWM period=1000Hz=0.001s at 50%duty cycle
;Fosc=8Mhz and TMR2 prescale value=16

;1. Set period for PWM=1000Hz
;PR2 = (PWM period)/(4*Tosc*TMR2 prescale value) - 1
;PR2 = 0.001/[4 * (1/8)e-6 * 16) - 1 => PR2 = 124

movlw d'124' ;set period for PWM=1000Hz
movwf PR2

;2. Set duty cycle by writting CCPR1L register and CCPR1CON<5:4> bits

;PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>)*Tosc*TMR2 Prescale Value
;CCPR1L:CCP1Con<5:4> = PWM Duty Cycle / (Tosc * TMR2 Prescale)
;PWM Duty Cycle = 50% of Period
;PWM Duty Cycle = 50% of 0.001 = 0.0005
;CCPR1L:CCP1Con<5:4> = 0.0005 / [(1/8)e-6 * 16] = 250
;=> CCPR1L:CCP1Con<5:4> = 0011111010

bcf CCP1CON, DC1B0 ;set bit 0 = 1
bsf CCP1CON, DC1B1 ;set bit 1 = 1
movlw b'00111110' ;set duty cycle and enable PWM
movwf CCPR1L

;3. Make the CCP1 pin an output by clearing the TRISC<2> bit
movlw b'11111011' ;set PORTC as an CCP1
andwf TRISC

;4. Set The TMR2 prescale value and enable TMR2 by writing to T2CON

movlw b'00000111' ;set prescale = 1:16 and enable TIMER2
movwf T2CON
return

Vì hiện tại em đang làm project về con "line-following robot" nên mới dùng đến PWM để điều khiển tốc độ của con robot, do thấy lâu quá kô ai trả lời nên em tự đọc luôn.
Hiện nay con robot của em đã chạy (mừng quá) cám ơn mọi người (đặc biệt là anh namqn) đã giúp em nhiều từ 1 người chẳng biết gì về PIC sau 1 tuần đã có thể lập trình PIC ở mức cản bản. Cám ơn mọi người nhiều lắm lắm
ahchu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn