MỤC TIÊU: ➢ Hiểu và sử dụng được các ngoại vi UART, I2C, SPI ➢ Hiểu cách giao tiếp với RTC, EEPROM b Kết nối dây USB-Serial vào kit thí nghiệm c Setup chương trình Hercules với baudra
Trang 1TÊN MSSV
Trang 2MỤC TIÊU:
➢ Hiểu và sử dụng được các ngoại vi UART, I2C, SPI
➢ Hiểu cách giao tiếp với RTC, EEPROM
b) Kết nối dây USB-Serial vào kit thí nghiệm
c) Setup chương trình Hercules với baudrate 9600, 8 bit data, no parity, 1 stop, no handshake
Trang 3d) Sử dụng các ví dụ mẫu trong tài liệu thí nghiệm, viết chương trình khởi động UART0 với các thông số như trên, chờ nhận một byte từ UART0 và phát ngược lại UART0
Trang 5BÀI 2
a) Kết nối các tín hiệu SDA và SCL của AVR vào các tín hiệu tương ứng trên module RTC Kết nối 1 chân port vào tín hiệu MFP Kết nối LCD 16x2 vào 1 port của AVR
Trang 6b) Viết chương trình con khởi động RTC với thời gian hiện hành, cấu hình xung MFP tần số
1Hz Sau đó cứ mỗi cạnh lên của MFP, đọc các giá trị ngày tháng năm giờ phút giây của
Trang 7LDI R18,$28 ;Function set 2 d?ng font 5x8,mode 4 bit
LDI R19,$01 ;Clear display
LDI R20,$0C ;display on,con tr? off
Trang 14EXIT_MSG:
RET
; - CURS_POS:
CBI LCD,RS
MOV R17,R18 ;R18=Function set
RCALL OUT_LCD ;ghi 1 byte data ra LCD
MOV R17,R19 ;R19=Clear display
Trang 16a) Kết nối các tín hiệu MOSI, SCK của port SPI từ AVR đến tín hiệu SDI và CLK của khối
thanh ghi dịch Kết nối 2 chân port khác vào tín hiệu nCLR và LATCH Kết nối ngõ ra
của thanh ghi dịch vào Bar LED
Trang 17b) Kết nối các tín hiệu UART như ở bài 1
c) Viết chương trình nhận 1 giá trị từ UART và xuất ra Bar Led sử dụng SPI
Trang 18ii) call USART_SendChar
jj) CBI PORTB,SS ; CHO PHEP
qq) ; Enable transmitter and receiver
rr) ldi r16, (1 << RXEN0) | (1 << TXEN0)
Trang 19ttt) lds r16, UDR0 ;get data
uuu) out porta,r16
Trang 20b) Kết nối các tín hiệu UART như ở bài 1
c) Kết nối 1 port vào Bar LED
d) Viết chương trình đếm số ký tự nhận được từ UART và xuất ra Bar Led, cứ mỗi lần có 1
byte nhận được, số đếm tăng lên 1 và được ghi vào EEPROM Khi vi xử lý mất điện và có
lại, số đếm được đọc ra từ EEPROM và lấy làm giá trị bắt đầu
e) EQU OUTPORT=PORTA
f) EQU OUTPORT_DDR=DDRA
g) EQU WIP=0 ; BIT BAO BAN
h) EQU WREN=$06 ; MA LENH CHO PHEP GHI BO NHO
i) EQU RDSR=$05 ; MA LENH DOC TT BO NHO
j) EQU WRSR=$01 ;MA LENH GHI TT BO NHO
k) EQU SPI_RD=$03 ; MA LENH DOC BO NHO
l) EQU SPI_WR=$02 ; MA LENH DOC TT BO NHO
Trang 21ee) OUT PORTA,R20
ff) ; Replace with your application code
ss) LDI R16,WREN ; ma lenh cho phep ghi bo nho
tt) CBI PORTB,SS ; CHO PHEP truyen spi
uu) RCALL SPI_TRANS
vv) SBI PORTB,SS ; chot lenh cho phep ghi
ww) LDI R16,SPI_WR ; ma lenh ghi bo nho
xx) CBI PORTB,SS ; CHO PHEP truyen SPI
yy) RCALL SPI_TRANS
eee) RCALL SPI_TRANS
fff) MEM_WR: ; GHI DATA RA BO NHO
ggg) call USART_ReceiveChar
hhh) call USART_SendChar
iii) RCALL SPI_TRANS1
jjj) SBI PORTB,SS ; KTHUC TRUYEN SPI
kkk) WR_FIN: ;DOC TGHI STATUS KTRA BIT WIP=0 BAO BO NHO ROI~ lll) LDI R16,RDSR ; DOC TGHI STATUS
mmm) CBI PORTB,SS
nnn) RCALL SPI_TRANS
ooo) SBRC R18,WIP ; WIP=0 bo nho roi~
ppp) RJMP WR_FIN ; ko thi cho`
qqq) SBI PORTB,SS; KET THUC TRUYEN SPI
rrr) ;;; DOC BO NHO TU DIA CHI MEM_BYTE
sss) LDI R16,SPI_RD
ttt) CBI PORTB,SS
uuu) RCALL SPI_TRANS
vvv) LDI R16,MEM_BYTE3
Trang 22www) RCALL SPI_TRANS
xxx) LDI R17,HIGH(MEM_BYTE21)
yyy) RCALL SPI_TRANS
zzz) LDI R17,LOW(MEM_BYTE21)
aaaa) RCALL SPI_TRANS
bbbb) MEM_RD: ;DOC DATA TU BO NHO
cccc) LDI R16,$00 ;DATA "GIA"
mmmm) ; Enable transmitter and receiver
nnnn) ldi r16, (1 << RXEN0) | (1 << TXEN0)
Trang 23a) Kết nối các tín hiệu UART như ở bài 1
b) Kết nối 1 port vào Bar LED
c) Viết chương trình đếm số ký tự nhận được từ UART và xuất ra Bar Led, cứ mỗi lần có 1
byte nhận được, số đếm tăng lên 1 và được ghi vào EEPROM nội của AVR Khi vi xử lý
mất điện và có lại, số đếm được đọc ra từ EEPROM nội và lấy làm giá trị bắt đầu
Trang 25eee) RET
Trang 26BÀI 1
1 Trả lời các câu hỏi
a Với tần số là 8Mhz, baudrate thực tế sẽ sai lệch với mong muốn là 9600 như thế nào?
Với f = 8Mhz, tốc độ baud là 9600 và giả sử ta cho U2Xn =0:
=> X = (2 𝑈2𝑋𝑛.𝑓)/16.(𝑡ố𝑐 độ 𝑏𝑎𝑢𝑑) – 1 = 51.08
Ta lấy X là số nguyên nên chọn X = 51 Tốc độ baud thực tế : (2 𝑈2𝑋𝑛.𝑓)/16.( 51.08) – 1 ≈ 9615 Sai số(%) = [ 𝑇ố𝑐 độ 𝑏𝑎𝑢𝑑 𝑡ℎự𝑐 𝑡ế 𝑇ố𝑐 độ 𝑏𝑎𝑢𝑑 𝑚𝑜𝑛𝑔 𝑚𝑢ố𝑛 − 1]x100% = 0.156% < 2%
=> Sai số chấp nhận được
b Cờ UDRE dùng để làm gì?
Cờ UDREn = 1 khi bộ đệm phát đang trống và sẵn sàng nhận dữ liệu mới UDREn được tự động xóa khi ghi dữ liệu mới vào thanh ghi UDRn Khi cho phép ngắt toàn cục I = 1 và bit UDRIEn = 1, cờ UDREn = 1 sẽ tạo ra tín hiệu ngắt hanh ghi dữ liệu trống (data register empty interrupt).Khi reset hệ thống, UDREn = 1( bộ đệm phát trống)
c Sự khác nhau giữa hardware UART và software UART (bit-banging UART) + Hardware UART là một phần cứng được tích hợp sẵn trên vi điều khiển và được thiết kế để truyền và nhận dữ liệu thông qua các chân đầu vào/ra cụ thể được chỉ định cho mục đích đó Hardware UART có khả năng xử lý dữ liệu nhanh hơn và hiệu quả hơn so với Software UART + Software UART (bit- banging UART) là một phần mềm được thực hiện trên vi điều khiển để truyền
và nhận dữ liệu thông qua các chân đầu vào/ra được thiết lập để đóng vai trò như một phần cứng UART Phần mềm này sẽ đọc hoặc viết dữ liệu trực tiếp
từ các chân đầu vào/ra, sử dụng các thủ tục phần mềm để đảm bảo chuẩn xác
Trang 27và đồng bộ hóa dữ liệu Tuy nhiên, phần mềm UART yêu cầu thời gian và tài nguyên tính toán để xử lý dữ liệu, do đó hiệu suất của nó thấp hơn so với phần cứng UART
d Chân TxD0 và chân RxD0 của UART0 là chân port nào?
Chân TXD0 ứng với chân PD1 và chân RXD0 ứng với chân PD0
e Atmega324 có bao nhiêu phần cứng UART?
Atmega324 có 2 phần cứng UART gồm Bộ thu(Receiver) và Bộ truyền (Transmitter)
2 Mã nguồn chương trình với chú thích
9 LDI R16, 6; 8 BIT KHONG XET CHAN LE , 1 STOP BIT
10 STS UCSR0C,R16 ; 1 STOP BIT KHONG XET CHAN LE
16 LDI R16,HIGH (RAMEND)
17 OUT SPH,R16 ; SET STACK
18 LDI R16, LOW (RAMEND)
26 SBRS R16,UDRE0 ; KIEM TRA CO TRONG KHONG
27 RJMP PHAT ; NEU CHUA TRONG THI TIEP TUC KIEM TRA LAI
28 STS UDR0,R18 ; KHI TRONG THI CHEP DU LIEU VAO UDR0
Trang 28BÀI 2
1 Trả lời các câu hỏi
a Các chân SCL, SDA là chân nào của AVR?
b Vẽ hình mô tả kết nối trong bài thí nghiệm
2 Mã nguồn và chú thích
BÀI 3
1 Trả lời các câu hỏi
a Theo datasheet của 74HC595, tần số cao nhất của xung nhịp đưa vào 74595
Trang 2942 ; Enable transmitter and receiver
43 ldi r16, (1 << RXEN0) | (1 << TXEN0)
44 sts UCSR0B, r16
45 ; Set frame format: 8 data bits, no parity, 1 stop bit
46 ldi r16, (1 << UCSZ01) | (1 << UCSZ00)
Trang 3069 sbrs r17, RXC0 ;check USART Receive Complete bit
1 Trả lời các câu hỏi
a Dung lượng của EEPROM 25AA1024 là bao nhiêu?
Dung lượng của EEPROM 25AA1024 là 1 Megabit (128 Kilobytes)
b Theo datasheet, tần số nhanh nhất của xung CK đưa vào EEPROM này là bao nhiêu?
Theo datasheet, tần số nhanh nhất của xung CK đưa vào EEPROM này là
10 MHz
2 Mã nguồn và chú thích
Trang 31BÀI 5
1 Trả lời các câu hỏi
a Atmega324PA có dung lượng EEPROM là bao nhiêu?
b Liệt kê sự khác nhau giữa SRAM và EEPROM
c Liệt kê sự khác nhau giữa Flash và EEPROM
2 Mã nguồn chương trình với chú thích