You are on page 1of 25

Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

MỤC TIÊU:

➢ Hiểu các mode hoạt động của timer

➢ Hiểu cách sử dụng timer để tao delay và tạo xung

THAM KHẢO:

➢ Tài liệu hướng dẫn thí nghiệm, chương 4, 5

➢ Atmel-2505-Setup-and-Use-of-AVR-Timers_ApplicationNote_AVR130.pdf

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.
T=1/F=1/500=2MS => TH=TL=1MS
CHỌN HỆ SỐ CHIA N=64

.EQU P_OUT=0 ; GÁN KÍ HIỆU P_OUT=0

.EQU TP_H=-125 ; GIÁ TRỊ ĐẶT TRƯỚC MỨC 1

.EQU TP_L=-125 ; GIÁ TRỊ ĐẶT TRƯỚC MỨC 0

.ORG 0

RJMP MAIN

.ORG 0X40

MAIN:

LDI R16,HIGH(RAMEND)

OUT SPH,R16

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
LDI R16,LOW(RAMEND)

OUT SPL,R16

LDI R16,(1<<P_OUT) ; PA0 OUTPUT

OUT DDRA,R16

LDI R17,0X00 ; TIMER0 MODE NOR

OUT TCCR0A,R17

LDI R17,0X00 ; MODE NOR, DỪNG

OUT TCCR0B,R17

START:

SBI PORTA,P_OUT ; OUTPUT=1

LDI R17,TP_H ; NẠP TP_H

RCALL DELAY_T0 ; CTC CHẠY TIMER0

CBI PORTA,P_OUT ; OUTPUT=0

LDI R17,TP_L ; NẠP TP_L

RCALL DELAY_T0 ; CTC CHẠY TIMER0

RJMP START

DELAY_T0:

OUT TCNT0,R17

LDI R17,0X03; CHẠY, CHIA N=64

OUT TCCR0B,R17

WAIT:

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
IN R17,TIFR0

SBRS R17,TOV0

RJMP WAIT

OUT TIFR0,R17

LDI R17,0X00 ; DỪNG

OUT TCCR0B,R17

RET

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

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

BÀ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.
Chọn ngõ ra là chân OC0A là chân PB3
Xung đối xứng T/2=32us => giá trị nạp -32 (hệ số chia N=8)

.ORG 0X00

RJMP MAIN

.ORG 0X40

;CHUONG TRINH TAO XUNG VUONG 64US

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
MAIN:

LDI R16,HIGH(RAMEND)

OUT SPH,R16

LDI R16,LOW(RAMEND)

OUT SPL,R16 ;DUA STACK LEN DINH?

LDI R16,0X08

OUT DDRB,R16 ;OC0 LA OUTPUT

LDI R17,0X00

OUT TCCR0A,R17 ;TIMER0 MODE NOR

LDI R17,0X00

OUT TCCR0B,R17 ;TIMER0 DUNG

START:

RCALL DELAY32US

IN R17,PORTB ;DOC PORTB

EOR R17,R16 ; DAO BIT PB0

OUT PORTB,R17 ; XUAT RA PORTB

RJMP START

DELAY32US:

LDI R17,-32 ;R17=-32

OUT TCNT0,R17 ;THGIAN

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
LDI R17,0X02 ;

OUT TCCR0B,R17 ;TIMER0 CHAY, HE SO CHIA N=8

WAIT:

IN R17,TIFR0 ; DOC THANH GHI CO TIMER0

SBRS R17,TOV0 ; CHO CO TOV0=1 BAO TIMER TRAN

RJMP WAIT ; CO TOV0=0 TIEP TUC CHO

OUT TIFR0,R17 ;NAP LAI BIT TOV0=1 XOA CO TOV0

LDI R17,0X00

OUT TCCR0B,R17 ;DUNG TIMER0

RET

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

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.
TH=TL=32US

.EQU P_OUT=5

.ORG 0

RJMP MAIN

.ORG 0X40

MAIN:

LDI R16,HIGH(RAMEND)

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
OUT SPH,R16

LDI R16,LOW(RAMEND)

OUT SPL,R16

LDI R16,(1<<P_OUT)

OUT DDRD,R16

LDI R17,HIGH(31)

STS OCR1AH,R17

LDI R17,LOW(31)

STS OCR1AL,R17

LDI R17,0X00 ; TIMER1 MODE CTC4

STS TCCR1A,R17

LDI R17,0X0A ; TIMER 1 CHẠY N=8

STS TCCR1B,R17

WAIT:

SBIS TIFR1,OCF1A ; CHỜ CỜ OCF1A=1

;BÁO KẾT QUẢ SO SÁNH KÊNH A

RJMP WAIT ; OCF1A=0 TIẾP TỤC CHỜ

SBI TIFR1,OCF1A ; OCF1A=1

;XÓA CỜ OCF1A

IN R17,PORTD ; ĐỌC PORTD

LDI R16,0X20

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
EOR R17,R16 ; ĐẢO BIT PD5

OUT PORTD,R17 ; XUẤT RA PORTD

RJMP WAIT

c) Kết nối chân OC0 ra oscilloscope và quan sát

BÀI 3

a) Cho chương trình sau tạo 2 xung PWM trên OC0A và OC0B

.org 00

call initTimer0

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

start:

rjmp start

initTimer0:

// Set OC0A (PB3) and OC0B (PB4) pins as outputs

ldi r16, (1 << PB3) | (1 << PB4);

out DDRB,r16

ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1


<< WGM01)

out TCCR0A,r16 // setup TCCR0A

ldi r16, (1 << CS01)

out TCCR0B,r16 // setup TCCR0B

ldi r16, 100

out OCR0A,r16 //OCRA = 100

ldi r16, 75

out OCR0B,r16 //OCRB = 75

ret

b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

Chương trình dùng timer0 mode FPWM

2 dạng sóng có chu kì nhiệm vụ là như nhau

Kênh PA3: đặt giá trị so sánh là 100

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
Kênh PA4: đặt giá trị so sánh là 75

Hệ số chia N=8

Mô thức ngõ ra: xóa OCR0A=0 khi đạt kết quả so sánh

Kênh PA3: TH=100us , TL=160us

Kênh PA4: TH=75us, TL=180us

BÀI 4

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
a) Sửa chương trình trên ứng với các trường hợp khác nhau của TCCR0A và TCCR0B

TCCR0A TCCR0B

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

COM0A COM0A COM0B COM0B WM0 WGM0 FOC0 FOC0 WM0 CS0 CS0 CS0

1 1 0 1 0 1 0 A B 2 2 1 0

2 1 0 1 0 1 1 0 0 1 0

3 1 0 1 0 1 1 1 0 1 0

4 1 0 1 0 0 1 0 0 1 0

b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

Trường hợp 2: GIỐNG BÀI 3B

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

Trường hợp 3:

.ORG 00

CALL INITTIMER0

START:

RJMP START

INITTIMER0:

// SET OC0A (PB3) AND OC0B (PB4) PINS AS OUTPUTS

LDI R16, (1 << PB3) | (1 << PB4);

OUT DDRB,R16

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
LDI R16, 0B10100011

OUT TCCR0A,R16 // SETUP TCCR0A

LDI R16, 0B00001010

OUT TCCR0B,R16 // SETUP TCCR0B

LDI R16, 100

OUT OCR0A,R16 //OCRA = 100

LDI R16, 75

OUT OCR0B,R16 //OCRB = 75

RET

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
Trường hợp 4:

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

T=1/f=1ms=1000us

Chọn hệ số chia N=64, timer0 mode NOR

TH=250 us => giá trị đặt trước TP_H=-31

TL=750 us => giá trị đặt trước TP_L=-93

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
.EQU P_OUT=4 ; GÁN KÍ HIỆU P_OUT=4

.EQU TP_H=-31 ; GIÁ TRỊ ĐẶT TRƯỚC MỨC 1

.EQU TP_L=-93 ; GIÁ TRỊ ĐẶT TRƯỚC MỨC 0

.ORG 0

RJMP MAIN

.ORG 0X40

MAIN:

LDI R16,HIGH(RAMEND)

OUT SPH,R16

LDI R16,LOW(RAMEND)

OUT SPL,R16

LDI R16,(1<<P_OUT) ; PB4 OUTPUT

OUT DDRB,R16

LDI R17,0X00 ; TIMER0 MODE NOR

OUT TCCR0A,R17

LDI R17,0X00 ; MODE NOR, DỪNG

OUT TCCR0B,R17

START:

SBI PORTB,P_OUT ; OUTPUT=1

LDI R17,TP_H ; NẠP TP_H

RCALL DELAY_T0 ; CTC CHẠY TIMER0

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
CBI PORTB,P_OUT ; OUTPUT=0

LDI R17,TP_L ; NẠP TP_L

RCALL DELAY_T0 ; CTC CHẠY TIMER0

RJMP START

DELAY_T0:

OUT TCNT0,R17

LDI R17,0X03; CHẠY, CHIA N=64

OUT TCCR0B,R17

WAIT:

IN R17,TIFR0

SBRS R17,TOV0

RJMP WAIT

OUT TIFR0,R17

LDI R17,0X00 ; DỪNG

OUT TCCR0B,R17

RET

b) Kết nối vào Oscilloscope và đo dạng sóng ngõ ra

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985

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%.

; Replace with your application code

.equ P_OUT=4

.ORG 0

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
RJMP MAIN

.ORG 0X40

MAIN: LDI R16,HIGH(RAMEND) ; đưa stack lên đỉnh SRAM

OUT SPH,R16

LDI R16,LOW(RAMEND)

OUT SPL,R16

LDI R16,(1<<P_OUT)

OUT DDRB,R16

LDI R16,124 ;giá trị đặt OCR0A tạo fo=1kHz

OUT OCR0A,R16

LDI R16,0

LDI R17,1 ;

LDI R16,0B00100011 ;timer0 mode FPWM7,không đảo OC0B

OUT TCCR0A,R16

LDI R16,0B00001011 ;timer0 mode FPWM7,hệ số chia N=64

OUT TCCR0B,R16

LAP1: CALL DELAY_10MS ;chờ 10ms

ADD R16,R17 ; tăng duty cycle

OUT OCR0B,R16

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
CPI R16,124

BRNE LAP1

LAP2: CALL DELAY_10MS ;chờ 10ms

SUB R16,R17 ; giảm duty cycle

OUT OCR0B,R16

CPI R16,0

BRNE LAP2

RJMP LAP1 ; lặp lại

DELAY_10MS:

push r27

push r28

LDI R27,250 ;1MC

L1: LDI R28,40 ;1MC

L2: DEC R28 ;1MC

NOP ;1MC

BRNE L2 ;2/1MC

DEC R27 ;1MC

BRNE L1 ;2/1MC

pop r28

pop r27

https://doe.dee.hcmut.edu.vn/
Lab 2-1

DÙNG TIMER ĐỂ TẠO DELAY và tạo xung


Nhóm 9: Nguyễn Thanh Tín -1910611 ; Ngô Đức Trí – 2014851; Lê Bá Tiến - 2114985
RET ;4MC

bai-5-c.mp4

Thầy vào file word rồi ấn 2 lần chuột trái vào


video trên để xem kết quả của nhóm em ạ

https://doe.dee.hcmut.edu.vn/
BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

BÀI 1

1. Trả lời các câu hỏi


a. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 0 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán
Tdmax=n*Tosc*N=255*0.125*1024=32640us ≈ 33ms
b. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 1 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán
Tdmax=n*Tosc*N=65535*0.125*1024=8388480us ≈ 8.4s
c. Trình bày cách tính prescaler và các giá trị nạp vào các thanh ghi của timer0
trong bài thí nghiệm
Td=1ms=n*N*osc → N=64, n=125 (mode nor chọn n= -125)
d. Mã nguồn chương trình với chú thích
Đã trình bày ở trên

BÀI 2

1. Trả lời các câu hỏi


a. Ở mode Normal, khi nào bit TOVx được set lên 1?
Mode nor, TOVx set lên 1 khi chạm MAX
b. Ở mode CTC, khi nào bit OCFx được set lên 1?
Mode CTC, OCFx set lên 1 khi TOP=OCRnA
c. Giá trị các thanh ghi cấu hình cho timer 0 cho 2 trường hợp
TCNT0=-32, TCCR0A=0x00, TCCR0B=0x02, OCR0A=0x00, OCR0B=0x00
không xài timer0, dùng timer1:TCCR1A=0X00, TCCCR1B=0X0A,
OCCR1AH=0X00, OCCR1AL=0X1F, OCCR1BH=0X00, OCCR1BL=0X00

https://doe.dee.hcmut.edu.vn/
BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

d. Mã nguồn chương trình cho hai trường hợp


Đã trình bày ở trên

BÀI 3

1. Trả lời các câu hỏi


a. Dạng sóng trên oscilloscope (chụp và chèn vào)
Hình đã chèn ở trên

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ả

Mode FPWM, chân OC0A và OC0B =0 khi đạt kết quả so sánh,=1 khi ở
BOTTOM (không đảo)

Chu kỳ:T=N*(TOP+1)/Fosc=256us;

duty cycle của OC0A=N*(OCR0A+1)/Fosc=101us;

duty cycle của OC0B=N*(OCR0B+1)/Fosc=76us

BÀI 4

1. Trả lời các 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
TH1 Lỗi
TH2 Mode FPWM3, OC0A, OC0B không đảo, N=8
TH3 Mode FPWM7, OC0A, OC0B không đảo, N=8
TH4 Mode PCPWM1, OC0A, OC0B không đảo, N=8

https://doe.dee.hcmut.edu.vn/
BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

2. Chụp ảnh các dạng sóng ứng với các mode làm việc và giải thích.
Đã chụp và giải thích ở trên

BÀI 5

1. Trả lời các câu hỏi


a. Timer 0 làm việc ở mode nào?
Chọn mode FPWM7,OC0A,OC0B không đảo,N=64

b. Giá trị đưa vào các thanh ghi của timer 0 là bao nhiêu? Giải thích
TCNT0=-0x00, TCCR0A=0xA3, TCCR0B=0x02, OCR0A=TOP=124,
OCR0B=(Tp*Fosc/N)-1=30
Đã chèn hình ảnh , video ở trên.

https://doe.dee.hcmut.edu.vn/
BÁO CÁO

Nhóm:

Nhóm môn học: Môn thí nghiệm:

2. Trình bày mã nguồn với chú thích.


Đã trình bày ở trên

https://doe.dee.hcmut.edu.vn/

You might also like