Prelab 5 N2

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.

HCM
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH

BÁO CÁO LAB 5


THÍ NGHIỆM VI XỬ LÝ

NHÓM 2 – LỚP L27


Ngày nộp: 17/04/2024
Giảng viên hướng dẫn: Nguyễn Phan Hải Phú

STT Sinh viên thực hiện MSSV

1 Huỳnh Trần Nhật Quang 2212729

2 Khổng Quang Huy 1913510

3 Lê Công Sỹ Nguyên 2111870


LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

MỤC TIÊU:

 Hiểu và sử dụng được ADC của AVR


 Hiểu cách sử dụng ADC để đo đạc

THAM KHẢO:

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


 AN2538-ADC-of-megaAVR-in-SingleEnded-Mode-00002538A.pdf
 AVR120: Characterization and Calibration of the ADC on an AVR

BÀI 1: ĐO TÍN HIỆU SINGLE END


a) Kết nối hai tín hiệu ADC_VR1 và ADC_VR2 từ header J86 vào hai ngõ vào ADC0 và
ADC1. Kết nối UART0 với khối RS232 và kết nối cáp USB-Serial vào máy tính. Kết nối
ADC_VR1 và ADC_VR2 vào các test point trên header J56. Lưu ý không cắm nhầm vào
các pin header GND. Viết chương trình thực hiện các việc sau:
b) Chọn điện áp VREF là điện áp nội VCCA . Khởi động UART với cấu hình tự chọn. (Lưu ý
cấu hình phần mềm Hercules trên máy tính tương tự). Click chuột phải vào màn hình
Hercules để chọn HEX Enable
c) Viết chương trình thực hiện lấy mẫu tín hiệu đưa vào ADC0 và gửi lên máy tính sử dụng
UART0 với khung truyền như sau sau mỗi 1s. Thời gian 1s tạo ra bằng hàm delay hoặc
timer.
0x55 ADCH ADCL 0xFF
d) Thay đổi điện áp đưa vào ADC0, đo bằng VOM và so sánh với kết quả lấy mẫu ADC, điền
vào bảng trong báo cáo
e) Kết nối LCD vào 1 port của AVR, bổ sung vào chương trình đã viết chức năng tính toán
điện áp đưa vào và hiển thị lên LCD
f) Thay đổi điện áp tham chiếu là điện áp 2.56V bên trong. Lặp lại các bước c, d, e, giả định
điện áp tham chiếu chính xác là 2.56V
g) Đo điện áp trên chân VREF (header J57), sử dụng VOM
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

BÀI 1
1. Trả lời các câu hỏi
a. Ở chế độ Single Conversion, làm thế nào bắt đầu một chu kỳ lấy mẫu và kiểm tra xem
bao giờ nó thực hiện xong

Ghi bit ADSC=1 ADC bắt đầu chuyển đổi.


Khi ADC chuyển đổi xong, thanh ghi dữ liệu được cập nhật, cờ ADIF=1 báo kết thúc chuyển
đổi.

b. Lựa chọn kênh ADC như thế nào?

Lựa chọn kênh ADC tương tự.

c. Atmega324 có kênh đo nhiệt độ bên trong chip hay không?

ATmega324 không có kênh đo nhiệt độ bên trong chip mặc định.

d. Với VREF=VCCA, công thức tính ra điện áp ngõ vào từ ADC là gì?

Trong đó ADCVal là giá trị đọc từ ADC, giá trị không dấu từ 0x00 đến 3FF VREF = 5V.

e. Với VREF=2.56V, công thức tính ra điện áp ngõ vào từ ADC là gì?

Trong đó ADCVal là giá trị đọc từ ADC, giá trị không dấu từ 0x00 đến 3FF VREF = 2,56V.

f. Ghi nhận giá trị ADC so với kết quả đo từ đồng hồ đo. Tính giá trị điện áp theo giá trị thu
được từ ADC với VREF=VCCA.
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

VADC0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5


(V)

ADCH- 0 109 207 303 409 509 611 709 814 912 1018
ADCL

ADCH- 0 102 205 307 410 512 614 717 819 922 1024
ADCL
(lý
thuyết)

Sai số 0 7 2 4 1 3 3 8 5 10 6
(LSB)
Bảng 1
g. Lặp lại bước f với VREF=2.56. So sánh công thức tính và sai số với bước e

VADC0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5


(V)

ADCH- 0 197 409 587 798 1001 1193 1302 1584 1795 1995
ADCL

ADCH- 0 200 400 600 800 1000 1200 1400 1600 1800 2000
ADCL
(lý
thuyết)

Sai số 0 3 9 13 2 1 7 2 16 5 5
(LSB)
Bảng 2

2. Mã nguồn chương trình với chú thích


.ORG 0
RJMP MAIN
.ORG $40
MAIN : RCALL INIT_ADC
SER R25
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

OUT DDRB, R25


OUT DDRD, R25
CLR R25
OUT PORTB, R25
OUT PORTD, R25
START:
RCALL READ_ADC_16BIT
RCALL DELAY1S
RJMP START

INIT_ADC:
LDI R16, (1<<REFS0) ; SET REFERENCE VOLTAGE TO AVCC=5, ADC
CHANNEL 0
STS ADMUX, R16 ; STORE THE VALUE IN ADMUX REGISTER
LDI R16, (1<<ADEN) | (1<<ADPS1)|(1<<ADPS2) ; SET ADC PRESCALER TO
64, ENABLE ADC
STS ADCSRA, R16 ; WRITE TO ADCSRA REGISTER
NOP
RET

READ_ADC_16BIT:
PUSH R18
LDS R18, ADCSRA
ORI R18, (1<<ADSC)
STS ADCSRA, R18
READ_ADC_16BIT_WAIT:
LDS R18,ADCSRA
SBRS R18,ADIF
RJMP READ_ADC_16BIT_WAIT
LDS R19, ADCL ; READ ADCL FIRST
OUT PORTB,R19
LDS R16, ADCH ; READ ADCH SECOND
OUT PORTD, R16
STS ADCSRA,R18
POP R18
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

RET

DELAY1S: LDI R22,32


LP3: LDI R21, 250
LP2: LDI R20, 250
LP1: NOP
DEC R20
BRNE LP1
DEC R21
BRNE LP2
DEC R22
BRNE LP3
RET

* XUAT LEN UART


.ORG 0
RJMP MAIN
.ORG $40
MAIN : RCALL INIT_ADC
RCALL USART_INIT
START:
RCALL READ_ADC_16BIT
RCALL DELAY1S
HERE: RJMP START

INIT_ADC:
LDI R16, (1<<REFS0) ; SET REFERENCE VOLTAGE TO AVCC=5, ADC
CHANNEL 0
STS ADMUX, R16 ; STORE THE VALUE IN ADMUX REGISTER
LDI R16, (1<<ADEN) | (1<<ADPS1)|(1<<ADPS2) ; SET ADC PRESCALER TO
64, ENABLE ADC
STS ADCSRA, R16 ; WRITE TO ADCSRA REGISTER
NOP
RET
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

READ_ADC_16BIT:
PUSH R18
LDS R18, ADCSRA
ORI R18, (1<<ADSC)
STS ADCSRA, R18
READ_ADC_16BIT_WAIT:
LDS R18,ADCSRA
SBRS R18,ADIF
RJMP READ_ADC_16BIT_WAIT
STS ADCSRA,R18
LDS R19, ADCL ; READ ADCL FIRST
LDS R16, ADCH ; READ ADCH SECOND
RCALL USART8BIT_TRANS
MOV R16,R19
RCALL USART8BIT_TRANS
POP R18
RET

DELAY1S: LDI R22,32


LP3: LDI R21, 250
LP2: LDI R20, 250
LP1: NOP
DEC R20
BRNE LP1
DEC R21
BRNE LP2
DEC R22
BRNE LP3
RET

USART_INIT:
LDI R16,(1<<TXEN0)|(1<<RXEN0) ; CHO PHÉP PHÁT/THU
STS UCSR0B,R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00) ; KHUNG DATA 8BIT, 1 STOP BIT , NO
PARITY
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

//LDI R16,(1<<UCSZ01)|(1<<UCSZ00)|(1<<UPM01) ; PARITY CHẴN


//LDI R16,(1<<UCSZ01)|(1<<UCSZ00)|(1<<UPM01)|(1<<UPM00) ; PARITY
LẺ
STS UCSR0C,R16
LDI R16,0X00 ; NẠP GIÁ TRỊ TẠO TỐC ĐỘ BAUD VÀO UBRR
STS UBRR0H,R16
LDI R16,51
STS UBRR0L,R16
RET

USART8BIT_TRANS:
LDS R17,UCSR0A
SBRS R17,UDRE0
RJMP USART8BIT_TRANS
STS UDR0,R16
RET

.ORG 0
RJMP MAIN
.ORG $40
MAIN : RCALL INIT_ADC
RCALL USART_INIT
SER R20
OUT DDRC, R20
START:
RCALL READ_ADC_16BIT
RCALL DELAY1S
HERE: RJMP START

INIT_ADC:
LDI R16, (1<<REFS0) | (1<<REFS1) ; SET REFERENCE VOLTAGE TO 2.56,
ADC CHANNEL 0
STS ADMUX, R16 ; STORE THE VALUE IN ADMUX REGISTER
LDI R16, (1<<ADEN) | (1<<ADPS1)|(1<<ADPS2) ; SET ADC PRESCALER TO
64, ENABLE ADC
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

STS ADCSRA, R16 ; WRITE TO ADCSRA REGISTER


NOP
RET

READ_ADC_16BIT:
PUSH R18
LDS R18, ADCSRA
ORI R18, (1<<ADSC)
STS ADCSRA, R18
READ_ADC_16BIT_WAIT:
LDS R18,ADCSRA
SBRS R18,ADIF
RJMP READ_ADC_16BIT_WAIT
STS ADCSRA,R18
LDS R19, ADCL ; READ ADCL FIRST
LDS R16, ADCH ; READ ADCH SECOND
RCALL USART8BIT_TRANS
MOV R16,R19
RCALL USART8BIT_TRANS
POP R18
RET

DELAY1S: LDI R22,32


LP3: LDI R21, 250
LP2: LDI R20, 250
LP1: NOP
DEC R20
BRNE LP1
DEC R21
BRNE LP2
DEC R22
BRNE LP3
RET

USART_INIT:
LAB 5-1
LẬP TRÌNH SỬ DỤNG ADC

LDI R16,(1<<TXEN0)|(1<<RXEN0) ; CHO PHÉP PHÁT/THU


STS UCSR0B,R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00) ; KHUNG DATA 8BIT, 1 STOP BIT , NO
PARITY
//LDI R16,(1<<UCSZ01)|(1<<UCSZ00)|(1<<UPM01) ; PARITY CHẴN
//LDI R16,(1<<UCSZ01)|(1<<UCSZ00)|(1<<UPM01)|(1<<UPM00) ; PARITY
LẺ
STS UCSR0C,R16
LDI R16,0X00 ; NẠP GIÁ TRỊ TẠO TỐC ĐỘ BAUD VÀO UBRR
STS UBRR0H,R16
LDI R16,51
STS UBRR0L,R16
RET

USART8BIT_TRANS:
LDS R17,UCSR0A
SBRS R17,UDRE0
RJMP USART8BIT_TRANS
STS UDR0,R16
RET

You might also like