BÁO CÁO LAB 4 Lab 4-1: LẬP TRÌNH SỬ DỤNG NGẮTM ỤC TIÊU : Hiểu và sử dụng được ngắt ngoài, ngắt timer, UART Quét LED 7 đoạn và LED ma trận sử dụng ngắt timer b Kết nối PC0 vào oscillo
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN-ĐIỆN TỬ
Sinh viên thực hiện Mã số sinh viên
Huỳnh Nguyễn Minh HuyHuỳnh Văn Quỳnh
Võ Huỳnh Quang Lập
2211179 2212885 1913926
Trang 2BÁO CÁO LAB 4 Lab 4-1: LẬP TRÌNH SỬ DỤNG NGẮT
M ỤC TIÊU :
Hiểu và sử dụng được ngắt ngoài, ngắt timer, UART
Quét LED 7 đoạn và LED ma trận sử dụng ngắt timer
b) Kết nối PC0 vào oscilloscope để đo dạng sóng
c) (Lưu ý: tần số xung clock cho CPU trên kit thí nghiệm là 8Mhz)
B ÀI 2
a) Lặp lại bài 1 sử dụng timer 1 ở mode CTC, sử dụng ngắt COMPARE_MATCH, tạo
ra 1 xung với tần số 100 Hz trên chân PC0
b) Cấu hình timer để tạo ra ngắt COMPARE_MATCH sau mỗi 1ms, trong ngắt sử dụng
1 số đếm để đếm số lần xảy ra ngắt và điều khiển chân PC0 để tạo ra xung tần số 100Hz
HD: Mỗi lần xảy ra ngắt cộng số đếm lên 1, nếu số đếm bằng 5 thì đảo PC0 và reset
số đếm về 0
c) Biên dịch chương trình và quan sát oscilloscope để kiểm tra chương trình
B ÀI 3
Trang 3a) Kết nối các tín hiệu cần thiết để điều khiển khối LED 7 đoạn.
b) Sử dụng ngắt COMPARE_MATCH của timer 1 như ở Bài 2 để xuất số 1-2-3-4 ra 4LED 7 đoạn với tần số quét 50 Hz Để đo tần số quét, đảo chân PC0 mỗi lần chuyểnsang LED kết tiếp và đo xung này trên oscilloscope
(Tham khảo Chương 4, tài liệu hướng dẫn thí nghiệm)
B ÀI 4
a) Kết nối thêm các tín hiệu cần thiết để điều khiển LCD ký tự
b) Kết nối tín hiệu UART ra khối RS232 và kết nối dây USB-Serial
c) Viết chương trình nhận ký tự từ UART sử dụng ngắt, xuất ký tự đó ra LCD ở vị tríđầu tiên bên trái, đồng thời đếm số ký tự nhận được và xuất ra 4 LED 7 đoạn Khinhận được hơn 1000 ký tự thì reset về 0
Hướng dẫn:
Sử dụng ngắt UART để nhận ký tự Trong ngắt UART tăng biến đếm (16 bit), chuyển
số này thành số BCD và ghi vào 4 byte LED7segValue Ví dụ số đếm đang là 500, ta
ghi 0-5-0-0 vào 4 byte này
Phần quét LED giữ nguyên như ở bài 3
Tham khảo chương 4, phần 4.4, tài liệu hướng dẫn thí nghiệm
B ÀI 5
a) Kết nối thêm các tín hiệu I2C vào module RTC Đưa tín hiệu MFP của RTC vào 1chân ngắt ngoài Thêm vào bài 4 các chức năng sau:
b) Khởi động RTC với thời gian hiện hành, xuất tín hiệu MFP tần số 1 Hz
c) Sử dụng ngắt ngoài của AVR, cứ mỗi khi có ngắt thì đọc thời gian giờ:phút:giây từRTC và xuất ra dòng 2 của LCD
Lưu ý: Các chức năng ở bài 4 vẫn được giữ nguyên
B ÀI 6
a) Kết nối các tín hiệu cần thiết để điều khiển LED ma trận (gỡ bỏ các dây nối đếnLCD, Led 7 đoạn, RTC, UART)
Trang 4b) 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 matrận Quét LED ma trận sử dụng ngắt timer 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
d) Viết chương trình để hiển thị Logo Trường ĐH Bách Khoa lên LED ma trận
B ÀI 1
1 Trả lời các câu hỏi
a) Với chế độ Normal mode, mỗi khi vào ngắt Overflow ta có phải khởi
động lại thanh ghi đếm hay không?
Trong chế độ Normal mode, khi xảy ra ngắt Overflow, thanh ghi đếm (TCNTx) sẽ tự động được khởi động lại từ giá trị 0 Vì vậy, ta không cần thiếtphải khởi động lại thanh ghi đếm trong ngắt Overflow
b) Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler
2 Mã nguồn chương trình với chú thích
Trang 6B ÀI 2
1 Trả lời các câu hỏi
a Với chế độ CTC mode, mỗi khi vào ngắt COMPARE_MATCH ta có phảikhởi động lại thanh ghi đếm hay không?
Trong chế độ CTC mode của AVR, khi xảy ra ngắt COMPARE_MATCH thì giá trịcủa thanh ghi đếm sẽ không bị khởi động lại Thay vào đó, thanh ghi đếm sẽ giữnguyên giá trị và bắt đầu đếm lại từ đó
b Điểm tiện lợi của chế độ này so với cách cấu hình ở bài 1 là như thế nào?
- Chế độ CTC mode cho phép đếm thời gian bằng cách so sánh giá trị củathanh ghi đếm với giá trị của thanh ghi so sánh (OCRnx) Chế độ này đơngiản, dễ hiểu và tiết kiệm bộ nhớ hơn chế độ normal mode, vì ta chỉ cần cấuhình một thanh ghi so sánh duy nhất thay vì phải cấu hình hai thanh ghi nhưtrong chế độ normal mode
Trang 7-Ở chế độ CTC mode, ta có thể sử dụng ngắt COMPARE MATCH hoặc ngắtOVERFLOW để kích hoạt các tác vụ khác nhau Trong khi đó, trong chế độnormal mode, ta chỉ có thể sử dụng ngắt OVERFLOW để kích hoạt ngắt Từ
đó, ở chế độ CTC mode sẽ linh hoạt hơn trong việc chọn cách sử dụng ngắt
- Trong chế độ CTC mode, ta có thể cấu hình thanh ghi đếm để đếm lên hoặcđếm xuống Trong khi đó, trong chế độ normal mode, ta chỉ có thể đếm lên
c Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler
2 Mã nguồn và chú thích
.EQU
Trang 8B ÀI 3
1 Trả lời các câu hỏi
a Để đạt được tần số quét 50Hz thì 1 LED sẽ sáng trong bao lâu?
Để đạt được tần số quét 50Hz, thời gian mỗi chu kỳ là 1/50 = 0.02 giây
= 20ms Vậy 1 LED sẽ sáng trong 20ms/4 = 5ms
b Khi đó, chân PC0 (đảo mỗi khi chuyển LED) sẽ có tần số là baonhiêu?
Tần số của chân PC0 sẽ có tần số là 100Hz
c Số lần xảy ra ngắt cần thiết để chuyển LED là bao nhiêu?
Để chuyển LED cần 16 lần ngắt
2 Mã nguồn và chú thích
Trang 10OUT LED7_DR,R16; port A = output
Trang 14B ÀI 4
1 Trả lời các câu hỏi
a Mô tả các kết nối trên kit
Trang 15b Mô tả cách cấu hình UART
Baud rate 9600, 8 bit data
c Chuyển đổi số đếm thành số BCD để ghi vào bộ đệm hiển thị LEDnhư thế nào?
- Chia số đếm cho 10, lấy phần nguyên và phần dư Phần dư này sẽtương ứng với chữ số cuối cùng của số đếm (hàng đơn vị)
Trang 16- Tương tự, lấy phần nguyên của kết quả ở bước trước và chia cho 10,lấy phần nguyên và phần dư Phần dư này sẽ tương ứng với chữ số thứhai của số đếm (hàng chục)
- Lặp lại việc lấy phần nguyên và phần dư cho đến khi phần nguyên
Về 0 Những phần dư lấy được trong các lần chia sẻ từ phải sang tráitạo thành số BCD tương ứng với số đếm
- Ghi kết quả các chữ số này vô bộ đệm hiển thị LED theo yêu cầu
Trang 17LDI R18,0x28 ; 2 dòng font 5x8, 4 bit
LDI R19,0x01 ; clear display
LDI R20,0x0C ; display on, off control
LDI R21,0x06 ; con trỏ dịch phải, địa chỉ DDRAM tăng 1 khi ghi data,màn hình không dịch (06H)
Trang 20POINTER_SETUP: //DATA: R17PUSH R17
Trang 21OUT LED,R18
SBI CONT,POS
CBI CONT,POS
LDI ZH,HIGH(TABLE<<1)LDI ZL,LOW(TABLE<<1)ADD ZL,R17
Trang 24BREQ LZP1POP R21POP R20RET.ORG 0x200TABLE: DB 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83
B ÀI 5
1 Trả lời các câu hỏi
a Mô tả kết nối trên kit
b Để xảy ra ngắt 1s 1 lần thì ngắt ngoài cấu hình như thế nào?
Sử dụng chế độ Normal với độ chia Prescaler được cấu hình sao cho tần sốđếm lên là 1Hz Cấu hình thanh ghi OCR để so sánh với giá trị đếm tươngứng và tạo ra ngắt Sau đó, ta bật cờ ngắt cho ngắt ngoài trên thanh ghiEICRA và set bit EIMSK
c Hiện tượng gì sẽ xảy ra nếu ta cấu hình ngắt ngoài tích cực theo mức thấp?Nếu ta cấu hình ngắt ngoài tích cực theo mức thấp, điều kiện kích hoạtngắt là đầu vào ngắt có mức điện áp thấp (tức là logic 0) Khi ngắt đượckích hoạt, vi điều khiển sẽ ngắt quá trình thực hiện chương trình chính vàthực hiện tác vụ được gắn với ngắt Nếu không có tín hiệu ngắt nào đượcđưa vào ngõ vào ngắt, giá trị mặc định trên đầu vào sẽ là giá trị cao (tức làlogic 1) Trong trường hợp này, ngắt sẽ không được kích hoạt và chươngtrình sẽ tiếp tục thực hiện các lệnh khác trong chương trình chính
2. Mã nguồn chương trình với chú thích
B ÀI 6
1 Trả lời các câu hỏi
a Mô tả kết nối trên kit
Trang 25b Để 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ời gian giữa hai lần quét liên tiếp là 1/25 =0,04s Vì ma trận LED 8x8 có 8 cột LED, thời gian hiển thị cho mỗi cộtLED sẽ là 0,04 s / 8 = 0,005s = 5ms
c Sự khác nhau khi quét ở tần số 25Hz và 125Hz
Ma trận LED ở tần số 125Hz sẽ quét nhanh hơn làm cho đèn LED hiển thị
Trang 26.EQU RCLK=2 ; ST-CP // LATCH - A[2] -> RCLK
OUT PORTB,R16 ; B is output - off, tat led
// khai bao PA[2:0] output, kiem soat xuat Ma led theo Cot (colmun) -> dung IC 535
LDI R16,$07
OUT SHIFT_DDR,R16
LDI R16,$00
OUT SHIFT_PORT,R16 ; PA[2:0] is output - off
// cac bien can thiet
LDI R17,$01 ; xac dinh Cot, quet led thu 1 truoc ///MP : $FE -
TN : $01
LDI R18,$00 ; 8 lan quet Cot
// khoi tao Timer 1, mode CTC (4), clk/64
Trang 27STS TIMSK1,R16 ; enable Ngat OCFA Timer 1
OUT PORTB,R16; tat het cac led
NOP
Trang 31LAB 4-2 GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN
M ỤC TIÊU :
Hiểu và sử dụng được ngắt timer
Hiểu cách điều khiển và đo tốc độ động cơ
a Viết chương trình điều khiển tốc độ động cơ DC dùng PWM với tần số 1 Khz,
sử dụng timer 0 Điều khiển tốc độ tăng/giảm sử dụng 2 nút nhấn, mỗi lầnnhấn nút tăng/giảm duty cycle 5% Cho phép động cơ chạy/dừng và điềukhiển động cơ quay thuận/ngược bằng 2 switch trên dip switch
● Kết nối động cơ vào kit thí nghiệm
● Kết nối tín hiệu từ 2 switch trên dipswitch vào 2 chân port của AVR
● Kết nối tín hiệu từ 2 nút nhấn vào 2 chân port của AVR
● Kết nối tín hiệu từ chân OC0B ra 1 kênh đo của khối test point
● Kết nối tín hiệu từ 2 chân port điều khiển chiều quay thuận/ngược raled đơn để kiểm tra trạng thái
b. Biên dịch, thực thi và kiểm tra hoạt động của chương trình bằng cách đo dạngsóng trên oscilloscope và quan sát trạng thái các LED khi thay đổi dip switch
Trang 32LAB 4-2 GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN
https://doe.dee.hcmut.edu.vn/