ADC là bộ chuyển đổi Analog sang Digital, chuyển đổi dữ liệu tương tự sang định dạng kỹ thuật số; thông thường nó được sử dụng để chuyển đổi điện áp tương tự sang định dạng kỹ thuật số. Tín hiệu tương tự không có vô số giá trị như sóng sin hoặc giọng nói của chúng ta, ADC chuyển đổi chúng thành các mức hoặc trạng thái cụ thể, có thể được đo bằng số như một đại lượng vật lý. Thay vì chuyển đổi liên tục, ADC chuyển đổi dữ liệu theo định kỳ, thường được gọi là tốc độ lấy mẫu. Modem điện thoạilà một trong những ví dụ của ADC, được sử dụng cho internet, nó chuyển đổi dữ liệu tương tự thành dữ liệu kỹ thuật số, để máy tính có thể hiểu được, bởi vì máy tính chỉ có thể hiểu dữ liệu kỹ thuật số. Ưu điểm chính của việc sử dụng ADC là chúng ta có thể loại bỏ tiếng ồn khỏi tín hiệu gốc một cách hiệu quả và tín hiệu kỹ thuật số có thể truyền đi hiệu quả hơn tín hiệu tương tự. Đó là lý do mà âm thanh kỹ thuật số rất rõ ràng khi nghe.
Hiện tại, trên thị trường có rất nhiều bộ vi điều khiển có sẵn ADC với một hoặc nhiều kênh. Và bằng cách sử dụng đăng ký ADC của họ, chúng tôi có thể giao tiếp. Khi chúng tôi chọn họ vi điều khiển 8051 để thực hiện bất kỳ dự án nào, trong đó chúng tôi cần chuyển đổi ADC, thì chúng tôi sử dụng ADC bên ngoài. Một số chip ADC bên ngoài là 0803,0804,0808,0809 và còn nhiều chip khác nữa. Hôm nay chúng ta sẽ giao tiếp ADC 8 kênh với Vi điều khiển AT89s52 cụ thể là ADC0808 / 0809.
Các thành phần:
- Bộ vi điều khiển 8051 (AT89S52)
- ADC0808 / 0809
- LCD 16x2
- Điện trở (1k, 10k)
- LẨU (10k x4)
- Tụ điện (10uf, 1000uf)
- Dẫn màu đỏ
- Bảng mạch bánh mì hoặc PCB
- 7805
- Tinh thể 11,0592 MHz
- Quyền lực
- Kết nối dây
ADC0808 / 0809:
ADC0808 / 0809 là thiết bị CMOS nguyên khối và logic điều khiển tương thích với bộ vi xử lý và có 28 chân cung cấp giá trị 8 bit ở đầu ra và chân đầu vào ADC 8 kênh (IN0-IN7). Độ phân giải của nó là 8 nên nó có thể mã hóa dữ liệu tương tự thành một trong 256 mức (2 8). Thiết bị này có ba dòng địa chỉ kênh là: ADDA, ADDB và ADDC để chọn kênh. Dưới đây là Sơ đồ chân cho ADC0808:
ADC0808 / 0809 yêu cầu một xung đồng hồ để chuyển đổi. Chúng tôi có thể cung cấp nó bằng cách sử dụng bộ tạo dao động hoặc bằng cách sử dụng vi điều khiển. Trong dự án này, chúng tôi đã áp dụng tần số bằng cách sử dụng vi điều khiển.
Chúng ta có thể chọn bất kỳ kênh đầu vào nào bằng cách sử dụng Dòng địa chỉ, giống như chúng ta có thể chọn dòng đầu vào IN0 bằng cách giữ cho cả ba dòng địa chỉ (ADDA, ADDB và ADDC) Ở mức thấp. Nếu chúng ta muốn chọn kênh đầu vào IN2 thì chúng ta cần giữ ADDA, ADDB thấp và ADDC cao. Để chọn tất cả các kênh đầu vào khác, hãy xem bảng đã cho:
Tên kênh ADC |
Mã PIN ADDC |
THÊM mã PIN |
PIN ADDA |
IN0 |
THẤP |
THẤP |
THẤP |
TRONG 1 |
THẤP |
THẤP |
CAO |
TRONG 2 |
THẤP |
CAO |
THẤP |
TRONG 3 |
THẤP |
CAO |
CAO |
IN4 |
CAO |
THẤP |
THẤP |
IN5 |
CAO |
THẤP |
CAO |
IN6 |
CAO |
CAO |
THẤP |
IN7 |
CAO |
CAO |
CAO |
Mô tả mạch:
Mạch “Giao tiếp ADC0808 với 8051” hơi phức tạp, chứa nhiều dây kết nối hơn để kết nối thiết bị với nhau. Trong mạch này, chúng tôi chủ yếu sử dụng AT89s52 như vi điều khiển 8051, ADC0808, chiết áp và LCD.
Màn hình LCD 16x2 được kết nối với vi điều khiển 89s52 ở chế độ 4 bit. Chân điều khiển RS, RW và En được kết nối trực tiếp với chân P2.0, GND và P2.2. Và chân dữ liệu D4-D7 được kết nối với các chân P2.4, P2.5, P2.6 và P2.7 của 89s52. Chân đầu ra ADC0808 được kết nối trực tiếp với cổng P1 của AT89s52. Các chân đường địa chỉ ADDA, ADDB, AADC được kết nối tại P3.0, P3.1 và P3.2.
ALE (Bật chốt địa chỉ), SC (Bắt đầu chuyển đổi), EOC (Kết thúc chuyển đổi), OE (Bật đầu ra) và các chân đồng hồ được kết nối tại P3.3, P3.4, P3.5, P3.6 và P3.7.
Và ở đây chúng tôi đã sử dụng ba chiết áp được kết nối tại chân 26, 27 và 28 của ADC0808.
Một pin 9 vôn và một bộ điều chỉnh điện áp 5 vôn, cụ thể là 7805 được sử dụng để cấp nguồn cho mạch.
Đang làm việc:
Trong dự án này, chúng tôi đã giao tiếp ba kênh của ADC0808. Và để chứng minh, chúng tôi đã sử dụng ba điện trở thay đổi. Khi chúng ta cấp nguồn cho mạch thì vi điều khiển sẽ khởi tạo LCD bằng lệnh thích hợp, đưa xung nhịp cho chip ADC, chọn kênh ADC bằng cách sử dụng dòng địa chỉ và gửi tín hiệu bắt đầu chuyển đổi tới ADC. Sau khi ADC này đọc đầu vào kênh ADC đã chọn và đưa đầu ra đã chuyển đổi của nó tới vi điều khiển. Sau đó vi điều khiển hiển thị giá trị của nó ở vị trí Ch1 trên LCD. Và sau đó vi điều khiển thay đổi kênh ADC bằng cách sử dụng đường địa chỉ. Và sau đó ADC đọc kênh đã chọn và gửi đầu ra đến vi điều khiển. Và hiển thị trên LCD với tên Ch2. Và như khôn ngoan cho các kênh khác.
Hoạt động của ADC0808 tương tự như hoạt động của ADC0804. Trong trường hợp này, vi điều khiển đầu tiên cung cấp tín hiệu đồng hồ 500 KHz đến ADC0808, sử dụng ngắt Timer 0, vì ADC yêu cầu tín hiệu đồng hồ hoạt động. Bây giờ vi điều khiển gửi tín hiệu mức THẤP đến CAO đến chân ALE (chân cao hoạt động của nó) của ADC0808 để kích hoạt chốt địa chỉ. Sau đó, bằng cách áp dụng tín hiệu Mức cao đến Mức thấp cho SC (Bắt đầu chuyển đổi), ADC bắt đầu chuyển đổi tương tự sang kỹ thuật số. Và sau đó đợi chân EOC (End of Conversion) ở mức THẤP. Khi EOC ở mức THẤP, có nghĩa là quá trình chuyển đổi tương tự sang kỹ thuật số đã hoàn thành và dữ liệu đã sẵn sàng để sử dụng. Sau đó, bộ vi điều khiển kích hoạt dòng đầu ra bằng cách áp dụng tín hiệu CAO đến THẤP cho chân OE của ADC0808.
ADC0808 cung cấp đầu ra chuyển đổi hệ mét tỷ lệ tại các chân đầu ra của nó. Và công thức chuyển đổi rađi được đưa ra bởi:
V in / (V fs -V z) = D x / (D max -D min)
Ở đâu
V in là điện áp đầu vào để chuyển đổi
V fs là thang đo đầy đủ Điện áp
V z là điện áp không
D x là điểm dữ liệu đang được đo
D max là Giới hạn dữ liệu tối đa
D min là Giới hạn dữ liệu nhỏ nhất
Giải thích chương trình:
Trong chương trình, trước hết chúng ta bao gồm tệp tiêu đề cát định nghĩa các chân biến và đầu vào và đầu ra cho ADC và LCD.
# bao gồm
Chức năng tạo độ trễ đã được tạo (void delay), cùng với một số chức năng LCD như khởi tạo LCD, in chuỗi, cho các lệnh LCD, v.v. Bạn có thể dễ dàng tìm thấy chúng trong Code. Kiểm tra bài viết này để biết giao tiếp LCD với 8051 và các chức năng của nó.
Sau đó trong chương trình chính, chúng ta đã khởi tạo LCD và đặt các chân EOC, ALE, EO, SC cho phù hợp.
void main () {int i = 0; eoc = 1; ale = 0; oe = 0; sc = 0; TMOD = 0x02; TH0 = 0xFD; lcd_ini (); lcdprint ("ADC 0808/0809");
Và sau đó chương trình đọc ADC và lưu trữ đầu ra ADC trong một biến và sau đó gửi nó đến LCD sau khi chuyển đổi từ thập phân sang ASCII, sử dụng các hàm void read_adc () và void adc (int i):
void read_adc () {number = 0; ale = 1; sc = 1; trì hoãn (1); ale = 0; sc = 0; while (eoc == 1); while (eoc == 0); oe = 1; number = input_port; trì hoãn (1); oe = 0; } void adc (int i) {switch (i) {case 0: ADDC = 0; ADDB = 0; ADDA = 0; lcdcmd (0xc0); read_adc ();