LAB 2_1: DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG.. S dử ụng chương trình con này để tạo xung 500 Hz trên chân PA0... Mã nguồn chương trình cho hai trường hợp... c Thay đổi giá trị dip switch
Trang 2LAB 2_1: DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
Bài 1:
a) Viết chương trình con delay 1 ms sử ụ d ng timer 0 S dử ụng chương trình con này để tạo xung 500 Hz trên chân PA0
b) Mô ph ng, ch nh sỏ ỉ ửa chương trình để ạ t o ra xung chính xác c) K t nế ối chân PA0 vào oscilloscope để kiểm tra
Trang 3Với m t thộ ời gian delay cho trước, ta có giá tr s xung cị ố ần đếm được tính là n=tdelay/(TOSCxN), ch n h s chia N sao cho giá tr n n m tọ ệ ố ị ằ ừ 0 đến 256 và là m t s ộ ố
- Prescaler c a timer0 có các giá tr 1, 8, 64, 256, 1024 Ta ch n lủ ị ọ ần lượt các giá tr này và ị tính n Th y rấ ằng prescaler = 64 ta được k t qu n là 1 sế ả ố nguyên 125 (điều này giúp ta dễ n p giá tr cho thanh ghi tránh sai s ) ạ ị ố
- V i n =125 thì ta n p giá -125 cho thanh ghi TCNT0- V i prescaler = 64 thì 3 bit ớ ạ trị ớ
Trang 4START:
RCALL DELAY ;delay tpo do rong xung IN R17,PORTB ;doc PortB
EOR R17,R16 ;dâo bit PBO (do R16=0x01=OBOOOO 0001) OUT PORTB, R17
RJMP START ;lap vong lai ; chuong trinh con delaylms
WAIT: SBIS TIFR0,TOV0 ;cho co TOVO = 1 bao Timer0 trân RJMP WAIT ;co T0V0=0 tiép tqc cho
SBI TIFR0,TOV0 ;TOV0 = 1 => xoa co TOVO hoac OUT TIFR0,R17 LDI R17,0x00 ;dwng Timer0
OUT TCCR0B,R17
Trang 5Bài 2:
a) Viết chương trình tạo 1 xung vuông 64 us s d ng timer 0 ử ụ ở chế độ Normal mode Ngõ
ra s d ng chân OC0 ử ụ
b) Viết chương trình thực hiện tạo xung vuông có chu k 64 us s d ng timer 1 ỳ ử ụ ở chế độ CTC mode Ngõ ra s d ng chân OC0 ử ụ
c) K t n i chân OC0 ra oscilloscope và quan sát ế ố
Trả lời câu h i: ỏ
a Ở mode Normal, khi nào bit TOVx được set lên 1?
- Khi timer tràn t $FF ừ ➔ $00 ho c $FFFF ặ ➔ $0000 thì c TOVn set lên 1b mode CTC, ờ Ở khi nào bit OCFx được set lên 1?
- Khi timer đạt đến giá tr trong thanh ghi (OCRxA + 1) thì c OCFxA lên 1 ị ờ - Khi timer đạt đến giá tr trong thanh ghi (OCRxB + 1) thì c OCFxB lên 1 ị ờ c Giá tr các thanh ghi cị ấu hình cho timer 0 cho 2 trường h p ợ
- Mode NOR TCNT0 = -125, TCCR0A = $00, TCCR0B = $03 - Mode CTC OCR0A = 255, TCCR0A = $02, TCCR0B = $01 d Mã nguồn chương trình cho hai trường hợp
Trang 6LDI R16,0X00
OUT TCCR0A,R16 ; MODE NORMAL OUT TCCR0B,R16 ; DUNG TIMER
Trang 7LDI R17,255 ;gia tri so sanh (TOP), hoac LDI R17,0xFF OUT OCR0A,R17 ;copy gia tri so sanh (TOP) vao OCROA LDI R17,0X42 ;Timer0 mode CTC, chic nâng dâo ngo ra OCOA OUT TCCR0A,R17
LDI R17,0X01 ;Timer0 chpy, he so chia N=1 OUT TCCR0B,R17
START: RJMP START
Trang 8a) Cho chương trình sau tạo 2 xung PWM trên OC0A và OC0B
b Gi i thích lý do có d ng sóng (t n s , chu k làm viả ạ ầ ố ỳ ệc, phase) như kết qu ả
ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)
Trang 9- 2 kênh đều có t n s sóng là b ng nhau và chu k c a sóng kênh 2 là ngầ ố ằ ỳ ủ ở ắn hơn kênh 1.
b) Kế ối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, t n giải thích dạng sóng thu được
Trả lời câu hỏi:
a Các mode làm vi c c a timer 0 ng v i các giá trệ ủ ứ ớ ị trên bảng
CS02:CS01:CS00 = 010 tương ứng với b chia 8 ộ
+ Mode 2: WGM02:WGM01:WGM00 = 111 tương ứng với mô th c FPWM ứ TOP = OCR0A
OCR0X c p nhậ ậ ởt BOTTOM
Trang 10TOV0 = 1 TOP = OCR0A = 100 ở
CS02:CS01:CS00 = 010 tương ứng với b chia 8 ộ
+ Mode 3: WGM02:WGM01:WGM00 = 010 tương ứng với mô th c CTC ứ
=> Trường hợp này do OCR0 cập nhật khi đạt bottom và TOV0=1 khi đạt nên tạo dạng xung ở 2 ngõ ra có dạng như kết quả thu được
Trang 11Trường h p 3: TCCR0A = 0b10100001, TCCR0B = 0b00000010 ợ
=>Trường h p này do OCR0 c p nhợ ậ ật khi đạt top và TOV0=1 khi đạt bottom nên t o d ng xung ạ ạ ở 2 ngõ ra có dạng như kết quả thu được.
Bài 5:
a) Viết chương trình tạo ra 1 xung t n s 1Khz, duty cycle 25% trên chân OC0B ầ ố b) K t nế ối vào Oscilloscope và đo dạng sóng ngõ ra
c) K t n i OC0B vào kênh R c a 1 LED RGB Viế ố ủ ết chương trình để tăng duty cycle trên OC0B t 0% lên 100% r i l i gi m xuừ ồ ạ ả ống 0, sau 10 ms duty cycle tăng/giảm 1%
Trả lời câu h i: ỏ
a Timer0 làm việc ở mode nào?
- Timer0 hoạt động mode NOR ( TOP: 0xFF) i v i (1) ở đố ớ - Timer0 hoạt động ở mode FPWM( TOP: OCR0A) đố ới v i (2) b Giá trị đưa vào các thanh ghi của timer 0 là bao nhiêu? Giải thích
Trang 12Giải thích: Nh ng thông s này t o ữ ố ạ được chương trình con delay 10us và từ đó xài ctc này để đáp ứng yêu c u bài toán ầ
Chương trình tạo xung 1kHz, duty cycle 25% trên chân OC0B:
.EQU TP_H=-31 ;giá trị đặt trước mức 1 EQU TP_L=-94 ;giá trị đặt trước mức 0
Trang 13START: SBI PORTB,4 ;PB4 = 1 1MC
WAIT: SBIS TIFR0,TOV0 ;ch c TOV0=1 báo Timer0 tràn 2/1MC ờ ờ
RET ;
Trang 14Chương trình tăng duty cycle trên OC0B từ 0% lên 100% rồi lại gi m xu ng 0, sau 10 ms ả ố duty cycle tăng/giảm 1%:
Trang 15LDI R16, (1<<CS01)|(1<<CS00);Mode CTC va Prescaler = 64 OUT TCCR0B, R16
WAIT_C_H:
IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran SBRS R17, OCF0A ;Kiem tra co bao tran RJMP WAIT_C_H ;Chua tran tiep tuc dem OUT TIFR0, R17 ;Xoa co tran
MOV R16, SIGN_L OUT OCR0A, R16 WAIT_C_L:
IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran SBRS R17, OCF0A ;Kiem tra co bao tran RJMP WAIT_C_L ;Chua tran tiep tuc dem OUT TIFR0, R17 ;Xoa co tran
Trang 16OUT OCR0A, R16 ;Nap gia tri cho bo dem
LDI R16, (1<<CS01)|(1<<CS00) ;Mode CTC va Prescaler = 64 OUT TCCR0B, R16
WAIT_A:
IN R17, TIFR0 ;Doc gia tri thanh ghi bao tran
Trang 17LAB2-2: GIAO TIẾP LED 7 ĐOẠN VÀ LED MA TR N Ậ
Bài 2:
Trang 18a) K t n i 1 port c a AVR vào header J34 K t n i 2 chân port khác vào tín hi u nLE0 và ế ố ủ ế ố ệ nLE1 trên header J82 Set jumper để cấp nguồn cho LED 7 đoạn
b) S dử ụng các chương trình mẫu trong tài liệu hướng d n thí nghi m, viẫ ệ ết chương trình hi n th sể ị ố 0123 lên 4 LED 7 đoạn, s dử ụng timer 0 để quét LED v i t n s quét 50Hz ớ ầ ố
Trả lời câu h i: ỏ
a Để có tần số quét là 50Hz, một LED sẽ sáng 1 lần trong bao lâu? - LED s sáng 1 l n trong 5ms ẽ ầ
b Cấu hình timer như thế nào để có độ trễ này
- C u hình timer0 mode NOR v i giá tr n p cho TCNT0 là -156 ấ ớ ị ạ
- Giá tr các thanh ghi c a timer0: TCNT0: -156, TCCR0A: $00, TCCR0B: $04 ị ủ c Mã ngu n và chú thích ồ
.EQU DATA_DDR = DDRD ; SET UP PORT D la ngo ra EQU DATA_OUT = PORTD
Trang 19; -DISPLAY_7SEG - ; input data R18 choose led to display ; input R17 data to display - ; Chon LED hien thi
SBI LE, 0 ; mo cong NOP
CBI LE, 0 ; khoa cong ; Do bang tim gia data
CLR R16 ; GIA TRI TRUNG GIAN LDI ZH, HIGH(TABLE << 1) ; look-up Led7seg LDI ZL, LOW(TABLE << 1)
ADD ZL, R17 ADC ZH, R16
Trang 20TIMER_DELAY: ; tan so quet 50HZ => CO 4 LED TIMEDELAYFRAME = 200HZ ; 1/200 = 0.05 s = 40 000 (MCs) => use CLK/256 divider with N = 156 pulses
LDI R16, 0
DELAY:
LDI R16, -156 ; input (- n)
LDI R16, $04 ; use CLK/256 prescaler
WAIT:
SBIS TIFR0, TOV0 ; check if TOV = 1
Trang 21Bài 3:
a) K t n i port c a AVR vào dip Switch, gi sế ố ủ ả ử đó là PORTA b) Viết chương trình hiện giá trị PORTA * 9 lên 4 LED 7 đoạn c) Thay đổi giá trị dip switch và quan sát kết quả
Trả lời câu h i: ỏ
a Giá tr PORTA * 9 là s có bao nhiêu bit ị ố - Giá tr tị ối đa là 255*9 = 2295 (dec) => 12 bit b Làm thế nào để ể hi n th t ng ch s lên 4 LED? ị ừ ữ ố
- Phân tách s 12 bit thành 4 s BCD, lố ố ấy mã LED 7 đoạn của 4 số BCD đó để hiển thị
Trang 23OUT DDRA, R16 ;PortA la input SER R16
OUT DDRB, R16 ;PortB la output OUT PORTA, R16 ;Pull-up
LDI R16, $03 ;PortD chan 0 va 1 la output OUT DDRD, R16
CBI PORTD, 0 ;Khoa chot CBI PORTD, 1 ;Khoa chot
MOVW R20, R0 ;Ket qua luu vao R21:R20 PUSH TRAM ;Dung sau
PUSH CHUC ;Dung sau
CALL SAVE_TRAM_CHUC_DONVI ;Sau dong nay ta se duoc hang don vi cua ket qua STS $0100, DONVI ;Luu hang don vi vao o nho nay
MOV SONHO CHUC ;Hang chuc o kqua truoc chinh la so nho cua phep nhan lan sau
Trang 24ADD R20, SONHO CALL SAVE_TRAM_CHUC_DONVI ;Sau dong nay se duoc hang tram va hang nghin cua kqua
PUSH R18 ;Cat hang don vi
MOV R18, R22 ;Lay phan nguyen chia 10 lan 2 CLR R22
L2:
Trang 25PUSH R18 ;Cat hang tram POP TRAM ;Hang tram POP CHUC ;Hang chuc POP DONVI ;Hang don vi ; enable 573 to choose led ;Turn off led
Trang 26; - USE TIMER0 TO DELAY
SET_UP_TIMER: ; 1/200 = 0.05 s = 40 000 (MCs) => use CLK/256 divider with N = 156 pu
Trang 27Bài 4:
a) K t n i các tín hi u c n thiế ố ệ ầ ết để điều khi n LED ma tr n ể ậ
b) S dử ụng chương trình mẫu, ch nh s a n u c n thiỉ ử ế ầ ết để ể hi n thị chữ ‘A’ lên LED ma trận
Trang 28Quét LED ma tr n s dậ ử ụng timer để ạ t o delay v i t n s quét 25 Hz ớ ầ ố c) Ch nh sỉ ửa chương trình để đạ ầt t n s quét là 125Hz ố
Trả lời câu h i: ỏ
a Mô t k t n i trên kit ả ế ố
- L y jumper c p áp cho LED MATRIX ấ ấ - K t n i PORTD v i Header c a LED MATRIX ế ố ớ ủ
- K t nế ối dây đơn từ PA0-PA3 v i tín hi u CLR, CLK, LATCH, DSI ớ ệ b Để có tần số quét 25Hz thì một cột LED sáng trong bao lâu? - Để có t n s quét 25Hz thì m t c t LED sáng trong 5ms ầ ố ộ ộ c S khác nhau khi quét t n s 25Hz và 125Hz ự ở ầ ố
- B ng mằ ắt thường thì trên kit thí nghi m không th y rõ sệ ấ ự khác nhau nhưng về lý thuyết
Trang 29.equ latchPin = 1 ; Set latch pin to pin 1 of PORTB equ shiftDataPort = PORTB ; Set shift data port to PORTB equ shiftDataPin = 0 ; Set shift data pin to pin 0 of PORTB ; Initialize ports as outputs
cbi clearSignalPort, clearSignalPin ; Set clear signal pin to low ; Wait for a short time
sbi clearSignalPort, clearSignalPin ; Set clear signal pin to high ret
; Shift out data ;shift out R27 to bar led
Trang 30dec r18 brne shiftloop ; Latch data
sbi latchPort, latchPin ; Set latch pin to high cbi latchPort, latchPin ; Set latch pin to low
; clear signal pin to pin 0 of PORTB ; shift clock pin to pin 1 of PORTB