Giáo trình Vi điều khiển - Chương 12: Phối ghép với thế giới thực: LCD, ADC và các cảm biến


12.1 Phối ghép một LCD với 8051.
Ở phần này ta sẽ mô tả các chế độ hoạt động của các LCD và sau đó mô tả
cách lập trình và phối ghép một LCD tới 8051.
12.1.1 Hoạt động của LCD.
Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay
thế dần cho các đèn LED (các đèn LED 7 đoạn hay nhiều đoạn). Đó là vì các
nguyên nhân sau:
1. Các LCD có giá thành hạ.
2. Khả năng hiển thị các số, các ký tự và đồ hoạ tốt hơn nhiều so với các đèn LED
(vì các đèn LED chỉ hiển thị được các số và một số ký tự).
3. Nhờ kết hợp một bộ điều khiển làm tươi vào LCD làm giải phóng cho CPU công
việc làm tươi LCD. Trong khi đèn LED phải được làm tươi bằng CPU (hoặc
bằng cách nào đó) để duy trì việc hiển thị dữ liệu.
4. Dễ dàng lập trình cho các ký tự và đồ hoạ. 
pdf 18 trang thamphan 27/12/2022 1440
Bạn đang xem tài liệu "Giáo trình Vi điều khiển - Chương 12: Phối ghép với thế giới thực: LCD, ADC và các cảm biến", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfgiao_trinh_vi_dieu_khien_chuong_12_phoi_ghep_voi_the_gioi_th.pdf

Nội dung text: Giáo trình Vi điều khiển - Chương 12: Phối ghép với thế giới thực: LCD, ADC và các cảm biến

  1. CHƯƠNG 12 Phối ghép với thế giới thực: LCD, ADC và các cảm biến Chương này khám phá một số ứng dụng của 8051 với thế giới thực. Chúng ta giải thích làm cách nào phối ghép 8051 với các thiết bị như là LCD, ADC và các cảm biến. 12.1 Phối ghép một LCD với 8051. Ở phần này ta sẽ mô tả các chế độ hoạt động của các LCD và sau đó mô tả cách lập trình và phối ghép một LCD tới 8051. 12.1.1 Hoạt động của LCD. Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần cho các đèn LED (các đèn LED 7 đoạn hay nhiều đoạn). Đó là vì các nguyên nhân sau: 1. Các LCD có giá thành hạ. 2. Khả năng hiển thị các số, các ký tự và đồ hoạ tốt hơn nhiều so với các đèn LED (vì các đèn LED chỉ hiển thị được các số và một số ký tự). 3. Nhờ kết hợp một bộ điều khiển làm tươi vào LCD làm giải phóng cho CPU công việc làm tươi LCD. Trong khi đèn LED phải được làm tươi bằng CPU (hoặc bằng cách nào đó) để duy trì việc hiển thị dữ liệu. 4. Dễ dàng lập trình cho các ký tự và đồ hoạ. 12.1.2 Mô tả các chân của LCD. LCD được nói trong mục này có 14 chân, chức năng của các chân được cho trong bảng 12.1. Vị trí của các chân được mô tả trên hình 12.1 cho nhiều LCD khác nhau. 1. Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: Cấp dương nguồn - 5v và đất tương ứng thì VEE được dùng để điều khiển độ tương phản của LCD. 2. Chân chọn thanh ghi RS (Register Select). Có hai thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các thanh ghi này như sau: Nếu RS = 0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v Nếu RS = 1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. 3. Chân đọc/ ghi (R/W). Đầu vào đọc/ ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin từ nó khi R/W = 1. 4. Chân cho phép E (Enable). Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là 450ns. 5. Chân D0 - D7. Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD.
  2. 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ Vũ đầu dòng thứ nhất C0 Ép con trỏ Vũ đầu dòng thứ hai 38 Hai dòng và ma trận 5 × 7 Ghi chú: Bảng này được mở rộng từ bảng 12.4. 12 14 13 14 1 2 14 21 DMC1610A DMC1610 DMC20261 DMC1606C 6B DMC24227 DMC16117 DMC1620 DMC24138 DMC16128 7 DMC32132 DMC16129 DMC1623 DMC32239 DMC161643 DMC40131 3 DMC40218 Hình 12.1: Các vị trí chân của các LCD khác nhau của Optrex. 12.1.3 Gửi các lệnh và dữ liệu đến LCD với một độ trễ. Để gửi một lệnh bất kỳ từ bảng 12.2 đến LCD ta phải đưa chân RS về 0. Đối với dữ liệu thì bật RS = 1 sau đó gửi một sườn xung cao xuống thấp đến chân E để cho phép chốt dữ liệu trong LCD. Điều này được chỉ ra trong đoạn mã chương trình dưới đây (xem hình 12.2). ; gọi độ thời gian trễ trước khi gửi dữ liệu/ lệnh kế tiếp. ; chân P1.0 đến P1.7 được nối tới chân dữ dữ liệu D0 - D7 của LCD. ; Chân P2.0 được nối tới chân RS của LCD. ; Chân P2.1 được nối tới chân R/W của LCD. ; Chân P2.2 được nối đến chân E của LCD. ORG MOV A, # 38H ; Khởi tạo LCD hai dòng với ma trận 5 × 7 ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Cho LCD một độ trễ MOV A, # 0EH ; Hiển thị màn hình và con trỏ ACALL COMNWRT ; Gọi chương trình con lênh ACALL DELAY ; Cấp một độ trễ cho LCD MOV AM # 01 ; Xoá LCD ACALL COMNWRT ; Gọi chương trình con lệnh ACALL DELAY ; Tạo độ trễ cho LCD
  3. Đoạn chương trình trên đây đã chỉ ra cách gửi các lệnh đến LCD mà không có kiểm tra cờ bận (Busy Flag). Lưu ý rằng chúng ta phải đặt một độ trễ lớn trong quá ảtình xuất dữ liệu hoặc lệnh ra LCD. Tuy nhiên, một cách tốt hơn nhiều là hiển thị cờ bận trước khi xuất một lệnh hoặc dữ liệu tới LCD. Dưới đây là một chương trình như vậy. ; Kiểm tra cờ bận trước khi gửi dữ liệu, lệnh ra LCD ; Đặt P1 là cổng dữ liệu ; Đặt P2.0 nối tới cổng RS ; Đặt P2.1 nối tới chân R/W ; Đặt P2.2 nối tới chân E ORG MOV A, # 38H ; Khởi tạo LCD hai dòng với ma trận 5 × 7 ACALL COMMAND ; Xuất lệnh MOV A, # 0EH ; Dịch con trỏ sang phải ACALL COMMAND ; Xuất lệnh MOV A, # 01H ; Xoá lệnh LCD ACALL COMMAND ; Xuất lệnh MOV A, # 86H ; Dịch con trỏ sang phải ACALL COMMAND ; Đưa con trỏ về dòng 1 lệnh 6 MOV A, # “N” ; Hiển thị chữ N ACALL DATA DISPLAY MOV A, # “0” ; Hiển thị chữ 0 ACALL DATA DISPLAY HERE: SJMP HERE ; Chờ ở đây COMMAND: ACALL READY ; LCD đã sẵn sàng chưa? MOV P1, A ; Xuất mã lệnh CLR P2.0 ; Đặt RS = 0 cho xuất lệnh CLR P2.1 ; Đặt R/W = 0 để ghi dữ liệu tới LCD SETB P2.2 ; Đặt E = 1 đối với xung cao xuống thấp CLR P2.2 ; Đặt E = 0 chốt dữ liệu RET DATA-DISPLAY:: ACALL READY ; LCD đã sẵn sàng chưa? MOV P1, A ; Xuất dữ liệu SETB P2.0 ; Đặt RS = 1 cho xuất dữ liệu CLR P2.1 ; Đặt R/W = 0 để ghi dữ liệu ra LCD SETB P2.2 ; Đặt E = 1 đối với xung cao xuống thấp CLR P2.2 ; Đặt E = 0 chốt dữ liệu RET DELAY: SETB P1.7 ; Lấy P1.7 làm cổng vào CLR P2.0 ; Đặt RS = 0 để truy cập thanh ghi lệnh SETB P2.1 ; Đặt R/W = 1 đọc thanh ghi lệnh ; Đọc thanh ghi lệnh và kiểm tra cờ lệnh BACK: CLR P2.2 ; E = 1 đối với xung cao xuống thấp SETB P2.2 ; E = 0 cho xung cao xuống thấp? JB P1.7, BACK ; Đợi ở đây cho đến khi cờ bận = 0 RET END Lưu ý rằng trong chương trình cờ bận D7 của thanh ghi lệnh. Để đọc thanh ghi lệnh ta phải đặt RS = 0, R/W = 1 và xung cao - xuống - thấp cho bít E để cấp
  4. Hình 12.3: Các địa chỉ con trỏ đối với một số LCD. Dat E tDSW t t H t PWH R/W AS tAH R tPwh = Enable pulse width = 450 ns (minimum) tDSW = Data set up time = 195 ns (minimum) tH = Data hold time 10 ns (minimum) tAS = Set up time prior to E (going high) for both RS and R/W = 140 ns (minimum) Hình 12.4: Phân khe thời gian của LCD. Bảng 12.4: Danh sách liệt kê các lệnh và địa chỉ lệnh của LCD. Lệnh Mô tả Thời gian thực hiện RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Xoá 0 0 0 0 0 0 0 0 0 1 Xoá toàn bộ màn hình và 1.64 μs màn đặt địa chỉ 0 của DD RAM hình vào bộ đếm địa chỉ Trở 0 0 0 0 0 0 0 0 1 - Đặt địa chỉ 0 của DD RAM 1.64 μs về như bộ đếm địa chỉ. Trả đầu hiển thị dịch về vị trí gốc DD dòng RAM không thay đổi
  5. 2. Thời gian thực thay đổi khi tần số thay đổi. Khi tần số fEP hay fosc Là 270kHz thì thời gian thực hiện được tính 250/270 × 40 = 35μs v.v 3. Các ký hiệu viết tắt trong bảng là: 4. DD RAM RAM dữ liệu hiển thị (Display Data RAM) CG RAM RAM máy phát ký tự (character Generator) ACC Địa chỉa của RAM máy phát ký tự ADD Địa chỉ của RAM dữ liệu hiển thị phù hợp với địa chỉ con trỏ. AC Bộ đếm địa chỉ (Address Counter) được dùng cho các địa chỉ DD RAM và CG RAM. 1/D = 1 Tăng 1/D = 0 Giảm S = 1 Kèm dịch hiển thị S/C = 1 Dịch hiển thị S/C = 0 Dịch con trỏ R/L = 1 Dịch sang phải R/L = 0 Dịch trái DL = 1 8 bít DL = 0 4 bít N = 1 2 dòng N = 1 1 dòng F = 1 Ma trận điểm 5 × 10 F = 0 Ma trận điểm 5 × 7 BF = 1 Bận BF = 0 Có thể nhận lênh 12.2 Phối ghép 8051 với ADC và các cảm biến. Phần này sẽ khám phá ghép các chíp ADC (bộ chuyển đổi tương tự số) và các cảm biến nhiệt với 8051. 12.1.1 Các thiết bị ADC. Các bộ chuyển đổi ADC thuộc trong những thiết bị được sử dụng rộng rãi nhất để thu dữ liệu. Các máy tính số sử dụng các giá trị nhị phân, nhưng trong thế giới vật lý thì mọi đại lượng ở dạng tương tự (liên tục). Nhiệt độ, áp suất (khí hoặc chất lỏng), độ ẩm và vận tốc và một số ít trọng những đại lượng vật lý của thế giới thực mà ta gặp hàng ngày. Một đại lượng vật lý được chuyển về dòng điện hoặc điện áp qua một thiết bị được gọi là các bộ biến đổi. Các bộ biến đổi cũng có thể được coi như các bộ cảm biến. Mặc dù chỉ có các bộ cảm biến nhiệt, tốc độ, áp suất, ánh sáng và nhiều đại lượng tự nhiên khác nhưng chúng đều cho ra các tín hiệu dạng dòng điện hoặc điện áp ở dạng liên tục. Do vậy, ta cần một bộ chuyển đổi tương tự số sao cho bộ vi điều khiển có thể đọc được chúng. Một chíp ADC được sử dụng rộng rãi là ADC 804. 12.2.2 Chíp ADC 804. Chíp ADC 804 là bộ chuyển đổi tương tự số trong họ các loạt ADC 800 từ hãng National Semiconductor. Nó cũng được nhiều hãng khác sản xuất, nó làm việc với +5v và có độ phân giải là 8 bít. Ngoài độ phân giải thì thời gian chuyển đổi cũng là một yếu tố quan trọng khác khi đánh giá một bộ ADC. Thời gian chuyển đổi được định nghĩa như là thời gian mà bộ ADC cần để chuyển một đầu vào tương tự thành một số nhị phân. Trong ADC 804 thời gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ được cấp tới chân CLK và CLK IN nhưng không thể nhanh hơn 110μs. Các chân của ADC 804 được mô tả như sau: 1. Chân CS- chọn chíp: Là một đầu vào tích cực mức thấp được sử dụng để kích hoạt chíp ADC 804. Để truy cập ADC 804 thì chân này phải ở mức thấp.
  6. Hình 12.5: Kiểm tra ADC 804 ở chế độ chạy tự do. 5. Chân ngắt INTR (ngắt hay gọi chính xác hơn là “kết thúc chuyển đổi’). Đây là chân đầu ra tích cực mức thấp. Bình thường nó ở trạng thái cao và khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết là dữ liệu được chuyển đổi sẵn sàng để lấy đi. Sau khi INTR xuống thấp, ta đặt CS = 0 và gửi một xung cao 0 xuống - thấp tới chân RD lấy dữ liệu ra của 804. 6. Chân Vin (+) và Vin (-). Đây là các đầu vào tương tự vi sai mà Vin = Vin (+) - Vin (-). Thông thường V- in (-) được nối xuống đất và Vin (+) được dùng như đầu vào tương tự được chuyển đổi về dạng số. 7. Chân VCC. Đây là chân nguồn nuối +5v, nó cũng được dùng như điện áp tham chiếu khi đầu vào Vref/2 (chân 9) để hở. 8. Chân Vref/2. Chân 9 là một điện áp đầu vào được dùng cho điện áp tham chiếu. Nếu chân này hở (không được nối) thì điện áp đầu vào tương tự cho ADC 804 nằm trong dải 0 đến +5v (giống như chân VCC). Tuy nhiên, có nhiều ứng dụng mà đầu vào tương tự áp đến Vin cần phải khác ngoài dải 0 đến 5v. Chân Vref/2 đượcdùng để thực thi các điện áp đầu vào khác ngoài dải 0 - 5v. Ví dụ, nếu dải đầu vào tương tự cần phải là 0 đến 4v thì Vref/2 được nối với +2v. Bảng 12.5 biểu diễn dải điện áp Vin đối với các đầu vào Vref/2 khác nhau. Bảng 12.5: Điện áp Vref/2 liên hệ với dải Vin. Vref/ 2(V) Vin(V) Step Size (mV) Hở * 0 đến 5 5/256 = 19.53 2.0 0 đến 4 4/255 = 15.62 1.5 0 đến 3 3/256 = 11.71 1.28 0 đến 2.56 2.56/256 = 10 1.0 0 đến 2 2/256 = 7.81 0.5 0 đến 1 1/256 = 3.90 Ghi chú: - VCC = 5V - * Khi Vref/2 hở thì đo được ở đó khoảng 2,5V - Kích thước bước (độ phân dải) là sự thay đổi nhỏ nhất mà ADC có thể phân biệt được. 9. Các chân dữ liệu D0 - D7. Các chân dữ liệu D0 - D7 (D7 là bít cao nhất MSB và D0 là bít thấp nhất LSB) là các chân đầu ra dữ liệu số. Đây là những chân được đệm ba trạng thái và dữ
  7. Hình 12.6: Phân chia thời gian đọc và ghi của ADC 804. 12.2.3 Kiểm tra ADC 804. Chúng ta có thể kiểm tra ADC 804 bằng cách sử dụng sơ đồ mạch trên hình 12.7. thiết lập này được gọi là chế độ kiểm tra chạy tự do và được nhà sản xuất khuyến cao nên sử dụng. Hình 12.5 trình bày một biến trở được dùng để cắp một điện áp tương tự từ 0 đến 5V tới chân đầu vào. Vin(+) của ADC 804 các đầu ra nhị phân được hiển thị trên các đèn LED của bảng huấn luyện số. Cần phải lưu ý rằng trong chế độ kiểm tra chạy tự do thì đầu vào CS được nối tới đất và đầu vào WR được nối tới đầu ra INTR . Tuy nhiên, theo tài liệu của hãng National Semiconductor “nút WR và INTR phải được tạm thời đưa xuống thấp kế sau chu trình cấp nguồn để bảo đảm hoạt động”. 805 ADC80 5V P2. VCC RD 10k P2. CLK WR CLK 150p P1. D0 Vin(+ 10k Vin(- PO A Vref/ GN P1. D7 P2. INTR CS Hình 12.7: Nối ghép ADC 804 với nguồn đồng hồ riêng. Ví dụ 12.7: Hãy thử nối ghép ADC 804 với 8051 theo sơ đồ 12.7. Viết một chương trình để hiển thị chân INTR và lấy đầu vào tương tự vào thanh ghi A. Sau đó gọi một chương trình chuyển đổi mã Hex ra ASCII và một chương trình hiển thị dữ liệu. Thực hiện điều này liên tục. Lời giải: ; Đặt P2.6 = WR (bắt đầu chuyển đổi cần 1 xung thấp lên cao) ; Đặt chân P2.7 = 0 khi kết thúc chuyển đổi ; Đặt P2.5 = RD (xung cao - xuống - thấp sẽ đọc dữ liệu từ ADC) ; P1.0 – P1.7 của ADC 804 MOV P1, # 0FFH ; Chọn P1 là cổng đầu vào BACK: CLR P2.6 ; Đặt WR = 0 SETB P2.6 ; Đặt WR = 1 để bắt đầu chuyển đổi
  8. 0 29.490 25 10.000 50 3.893 75 1.700 100 0.817 Bảng 12.7: Hướng dẫn chọn loạt các cảm biến họ LM34. Mã ký hiệu Dải nhiệt độ Độ chính xác Đầu ra LM34A -55 F to + 300 C + 2.0 F 10mV/F LM34 -55 F to + 300 C + 3.0 F 10mV/F LM34CA -40 F to + 230 C + 2.0 F 10mV/F LM34C -40 F to + 230 C + 3.0 F 10mV/F LM34D -32 F to + 212 C + 4.0 F 10mV/F Bảng 12.8: Hướng dẫn chọn loạt các cảm biến nhiệt họ LM35. Mã sản phẩm Dải nhiệt độ Độ chính xác Đầu ra LM35A -55 C to + 150 C + 1.0 C 10 mV/F LM35 -55 C to + 150 C + 1.5 C 10 mV/F LM35CA -40 C to + 110 C + 1.0 C 10 mV/F LM35C -40 C to + 110 C + 1.5 C 10 mV/F LM35D 0 C to + 100 C + 2.0 C 10 mV/F Tính chất gắn liện với việc viết phần mềm cho các thiết bị phi tuyến như vậy đã đưa nhiều nhà sản xuất tung ra thị trường các loạt bộ cảm biến nhiệt tuyến tính. Các bộ cảm biến nhiệt đơn giản và được sử dụng rộng rãi bao gồm các loạt họ LM34 và LM35 của hãng National Semiconductor Corp. 12.2.5 Các bộ cảm biến nhiệt họ LM34 và LM35. Loạt các bộ cảm biến LM34 là các bộ cảm biến nhiệt mạch tích hợp chính xác cao mà điện áp đầu ra của nó tỷ lệ tuyến tính vơí nhiệt độ Fahrenheit (xem hình 12.7). loạt LM34 không yêu cầu cân chỉnh bên ngoài vì vốn nó đã được cân chỉnh rồi. Nó đưa ra điện áp 10mV cho sự thay đổi nhiệt độ 10F. bảng 12.7 hướng dẫn ta chọn các cảm biến loạt LM34. Loạt các bộ cảm biến LM35 cũng là các bộ cảm biến nhiệt mách tích hợp chính xác cao mà điện áp đầu ra của nó tỷ lệ tuyến tính với nhiệt độ theo thang độ Celsius. Chúng cũng không yêu cầu cân chỉnh ngoài vì vốn chúng đã được cân chỉnh. Chúng đưa ra điện áp 10Mv cho mỗi sự thay đổi 10C. Bảng 12.8 hướng dẫn ta chọn các cảm biến họ LM35. 12.2.6 Phối hợp tín hiệu và phối ghép LM35 với 8051. Phối hợp tín hiệu là một thuật ngữ được sử dụng rộng rãi trong lĩnh vực thu đo dữ liệu. Hầu hết các bộ biến đổi đều đưa ra các tín hiệu điện dạng điện áp, dòng điện, dung kháng hoặc trở kháng. Tuy nhiên, chúng ta cần chuyển đổi các tín hiệu này về điện áp nhằm gửi đầu vào đến bộ chuyển đổi ADC. Sự chuyển đổi (biến đổi)
  9. Hình 12.10 Hình 12.10: Nối ghép 8051 với DAC 804 và cảm biến nhiệt độ. Hình 12.10 biểu diễn nối ghép của bộ cảm biến nhiệt đến ADC 804. Lưu ý rằng ta sử dụng đi ốt zener LM336 - 2.5 để cố định điện áp qua biến trở 10kΩ tại 2,5V. Việc sử dụng LM336 - 2.5 có thể vượt qua được mọi dao động lên xuống của nguồn nuôi. 12.2.7 Chíp ADC 808/809 với 8 kênh tương tự. Một chíp hữu ích khác của National Semiconductor là ADC 808/809 (xem hình 12.11). Trong khi ADC 804 chỉ có một đầu vào tương tự thì chíp này có 8 kênh đầu vào. Như vậy nó cho phép ta hiển thị lên 8 bộ biến đổi khác nhau chỉ qua một chíp duy nhất. Lưu ý rằng, ADC 808/809 có đầu ra dữ liệu 8 bít như ADC 804. 8 kênh đầu vào tương tự được dồn kênh và được chọn theo bảng 12.10 sử dụng ba chân địa chỉ A, B và C. IN0 GN Cloc Vcc D0 ADC808/8 IN7 D7 Vref(+ EO Vref(-) OE SC ALE A CC (LSB) Hình 12.11: Bộ biến đổi ADC 808/809. Bảng 12.10: Chọn kênh tương tự của ADC 808. Chọn kênh tương tự C B A IN0 0 0 0 IN1 0 0 1 IN2 0 1 0 IN3 0 1 1