[HỌC AVR] Bài 6: ADC VỚI AVR
XIN CHÀO CÁC BẠN!
Trong bài viết này, tôi xin hướng dẫn các bạn cách chuyển đổi tín hiệu tương tự thành tín hiệu số, sử dụng bộ chuyển đổi ADC trên vi điều khiển Atmega 8.
I.ADC TRÊN ATMEGA8.
Atmega 8 có 6 chân của PORTC (PORTC.0 à PORTC.5) sử dụng làm kênh đầu vào của ADC tương ứng ADC0, ADC1, ADC2, ADC3, ADC4, ADC5.
1.CẤU TẠO PHẦN CỨNG CHO ADC.
Khi sử dụng ADC, có 2 chân quan trọng bạn phải nhớ:
–AVCC: chân cung cấp nguồn riêng cho bộ ADC hoạt động.
–AREF: chân cung cấp điện áp tham chiếu (điện áp lớn nhất mà bộ ADC có thể chuyển đổi) cho bộ ADC.
Khi thiết kế phần cứng, các bạn phải đặc biệt lưu ý chống nhiễu cho 2 chân này nhằm giảm sai số trong quá trình chuyển đổi.
Sơ đồ nguyên lý:
2.CÁC THANH GHI LIÊN QUAN.
–ADMUX (ADC Mutiplexer Selection Register): thanh ghi chọn điện áp tham chiếu (Vref), kênh, chế độ hoạt động của bộ ADC.
–ADCSRA (ADC Control anh Status Register): thanh ghi điều khiển và chứa trạng thái của bộ ADC.
–ADCL và ADCH (ADC Data Register): thanh ghi chứa giá trị ADC sau quá trình chuyển đổi.
II.BÀI TOÁN VÍ DỤ
Để hiểu rõ hơn về ADC, tôi đưa ra bài toán cụ thể:
ØSử dụng kênh ADC0 của vi điều khiển Atmega8, chuyển đổi giá trị điện áp (thay đổi được bằng biến trở) và hiển thị lên màn hình LCD1602.
·Các bước cấu hình module ADC hoạt động:
-Chọn điện áp tham chiếu, kênh đọc ADC (ADMUX).
-Cho phép bộ ADC hoạt động (ADCSRA).
-Cho phép quá trình chuyển đổi xảy ra.
-Đọc giá trị ADC sau khi chuyển đổi.
·Cấu hình sử dụng bộ ADC với CodeVisionAVR:
Tạo project mới à chọn CodeWizardAVR à chọn ADC
-Các bạn kích hoạt ADC ở ADC Enabled.
-Nếu không chọn ô 8 bit thì bộ chuyển đổi mặc định độ phân giải 10 bit.
-Chọn điện áp tham chiếu ở Volt. Ref.
-Xung clock cho bộ ADC ở Clock.
Ở đây, tôi không sử dụng ngắt ADC.
Code mẫu:
#include <main.h> void main(void) { // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // KHOI TAO ADC // ADC Clock frequency: 500.000 kHz // ADC Voltage Reference: AREF pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84; // KHOI TAO LCD1602 // RS - PORTD Bit 4 // RD - PORTD Bit 3 // EN - PORTD Bit 2 // D4 - PORTB Bit 4 // D5 - PORTB Bit 5 // D6 - PORTB Bit 6 // D7 - PORTB Bit 7 lcd_init(16); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(" MINHHAGROUP.."); lcd_gotoxy(0,1); lcd_puts(" BANLINHKIEN.VN"); delay_ms(3000); lcd_clear(); while (1) { adc(); } } |
Hàm con adc() các bạn có thể tham khảo ở Code mẫu và mô phỏng Tại đây: