3.3. Cảm biến nhiệt độ LM35
IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt độ chuyển thành tín hiệu điện dưới dạng dòng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán dẫn với nhiệt độ, tạo ra điện áp hoặc dòng điện tỷ lệ thuận với nhiệt độ tuyệt đối. Đo tín hiệu điện ta biết được giá trị của nhiệt độ cần đo. Sự tác động tạo ra điện tích tự do và lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phần tử, bứt các electron thành dạng tự dô di chuyển qua cùng cấu trúc mạng tinh thể tọa sự xuất hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo quy luật hàm mũ với nhiệt độ.
Các đặc trưng của LM35:
-
Ngõ ra là điện áp.
-
Đơn vị nhiệ độ : oC.
-
Các hiệu năng cao, công suất tiêu thụ là 60uA.
-
Sản phẩm không cần phải canh chỉnh nhiệt độ khi sử dụng.
-
Độ nhạy 10mV/1oC.
-
Sai số cực đạu 1,5oC khi nhiệt độ lớn hơn 100oC.
-
Phạm vi sử dụng: 0oC => 100oC.
-
Chân +Vs là chân cung cấp điện áp cho LM35 hoạt động (4->20V)
-
Chân Vout là chân điện áp ngõ ra của LM35, được đưa vào chân Analog của các bộ ADC.
-
Chân GND là chân nỗi mas, lưu ý cần nỗi mass chân này để tránh làm hỏng cảm biến cũng như làm giảm sai số trong quá trình đo.
-
Cứ 10mV tương ứng với 1oC, ở 0oC điện áp ra là 0V, tương ứng với giá trị ADC là 0. Ta dùng ADC 10bit với điện áp lấy mẫu là 5V , giá trị của ADC từ 0 đến 1023. Vậy mỗi giá trị ADC ứng với 5V/1024 = 4.883mV. Vậy 1 giá trị của A/D tương ứng với 0.4883oC. Muốn tăng độ phân giải A/D ta giảm giá trị điện áp lấy mẫu đi.
Hình 3. 3: Sơ đồ chân của LM35
Tính toán để chuyển đổ mức logic chân ADC của vi điều khiển thành nhiệt độ hiện thị:
Ta có ADC 10bit, vậy có 1024 mức lượng tử. Điện áp lấy mẫu trong bài ta sử dụng là 5V. Như vậy mỗi mức lượng tử tương ứng với giá trị điện áp là: LM35 thay đổi 10mV/1oC do đó ứng với thay đổi 1oC sẽ thay đổi 2.048 mức lượng tử (10mV/4.883mV = 2.048). Như vậy ta sẽ có công thức tính nhiệt độ để hiển thị là:
Nhiệt độ = (oC)
(Adc_value :là giá trị chân ADC của PIC đọc từ LM35)
3.4. Module Ethernet ENC28J60 và chuẩn giao tiếp SPI
Thông thường để kết nối thiết bị điều khiển với mạng Ethernet có hai cách, một là sử dụng các vi điều khiển tích hợp sẵn phần giao tiếp với Ethernet, phổ biến là các dòng PIC18F66J60, PIC18F66J65, PIC18F67J60, PIC18F67J60, PIC18F86J60…. của Microchip. Sử dụng phương thức này có ưu điểm viết mã code đơn giản, kích thước bo mạch nhỏ gọn. Ngoài ra còn có cách khác là sử dụng chip giao tiếp Ethernet ENC28J60, với cách sử dụng này bo mạch sẽ có kích thước lớn hơn, thường tách thành hai module độc lập được kết nối qua card hỗ trợ giao tiếp chuẩn SPI (Serial Pheripheral Interface).
Trong module ghép nối Ethernet, người thực hiện đề tài đã chọn cách sử dụng chip ENC28J60.
3.4.1. Vi Mạch Ethernet ENC28j60
ENC28J60 là vi điều khiển hỗ trợ kết nối Ethernet ở lớp vật lý tương tự trong mô hình OSI cho bất kỳ vi điều khiển nào có giao tiếp SPI. ENC28J60 được thiết kế và chế tạo bởi Microchip.
Phần cứng của ENC28J60 được tích hợp trong cả hai lớp kết nối dữ liệu và lớp vật lý .
Hỗ trợ giao tiếp SPI với tốc độ tối đa đạt 20MHz.
Điện áp hoạt động của ENC28J60 từ 3.1V đến 3.6V.
Hỗ trợ công nghệ 10BASE-T.
Hỗ trợ truyền song công và bán song công, đồng thời nhằm tránh xung đột trên kênh truyền.
3.4.2. Sơ đồ chân và sơ đồ khối của ENC28j60
Sơ đồ chân ENC28j60:
Hình 3. 4: Sơ đồ chân ENC28J60
Sơ đồ khối ENC28J60:
Hình 3. 5: Sơ đồ khối ENC28J60
3.4.3. Sơ đồ ghép nối vi điều khiển với ENC28j60
Hình 3. 6: Sơ đồ ghép nối vi điều khiển với ENC28j60
-
SCK Serial Clock – Xung đồng bộ cho đường nối tiếp
-
SI Serial Input – Tín hiệu nối tiếp vào (ghi)
-
SO Serial Output – Tín hiệu nối tiếp ra (đọc)
Hình 3. 7 : Sơ đồ nguyên lý Module Ethernet
-
Nguyên lý hoạt động của mạch:
-
Vi điều khiển ENC28J60 được điều khiển hoàn toàn thông qua giao tiếp SPI với PIC18.
-
PIC18 đóng vai trò là Master trong giao tiếp SPI với ENC28J60.
-
Tương tự như kết nối mạng trên PC, PIC18 đóng vai trò là PC còn ENC28J60 đóng vai trò như card mạng.
-
Nhận dữ liệu: Tín hiệu yêu cầu từ mạng truyền qua cổng RJ45 vào ENC28J60. ENC28J60 được thiết kế để giải mã tín hiệu và chuyển tín hiệu đó thành dữ liệu và lưu vào bộ đệm thu. Thông qua giao tiếp SPI, PIC18 liên tục kiểm tra bộ đệm của ENC28J60. Nếu phát hiện có dữ liệu nó sẽ đọc dữ liệu và xử lí.
-
Truyền dữ liệu: Thông qua giao tiếp SPI, PIC18 sẽ gửi dữ liệu vào bộ đệm phát của ENC28J60. ENC28J60 sẽ mã hóa dữ liệu và truyền ra đường RJ45 đến địa chỉ mong muốn.
3.4.5. Module Ethernet
Hình 3. 8: Module Ethernet thực tế
-
Sử dụng chip ENC28j60 Ethernet, SOP 28 chân.
-
Giao tiếp theo chuẩn SPI.
-
Đầu nối RJ45 HR911105A.
-
Sử dụng điện áp 3,3V.
-
Tần số 25Mhz.
-
Trong mạch này, sử dụng đầu cắm giao tiếp RJ45 là HR911105A của HANRUN.HR911105A được tích hợp sẵn biến áp cad có 2 đèn led để thông báo trạng thái kết nối của mạch.
3.4.6. Chuẩn truyền thông SPI
SPI (Serial Peripheral Inteface) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng Motorola đề xuất. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select).
SCK: Xung giữ nhịp cho giao tiếp SPI, vì SPI là chuẩn truyền đồng bộ nên cần 1 đường giữ nhịp, mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi. Đây là điểm khác biệt với truyền thông không đồng bộ mà chúng ta đã biết trong chuẩn UART. Sự tồn tại của chân SCK giúp quá trình tuyền ít bị lỗi và vì thế tốc độ truyền của SPI có thể đạt rất cao. Xung nhịp chỉ được tạo ra bởi chip Master.
MISO– Master Input/Slave Output: nếu là chip Master thì đây là đường Input còn nếu là chip Slave thì MISO lại là Output. MISO của Master và các Slaves được nối trực tiếp với nhau.
MOSI – Master Output/Slave Input: nếu là chip Master thì đây là đường Output còn nếu là chip Slave thì MOSI là Input. MOSI của Master và các Slaves được nối trực tiếp với nhau.
SS – Slave Select: SS là đường chọn Slave cần giap tiếp, trên các chip Slave đường SS sẽ ở mức cao khi không làm việc. Nếu chip Master kéo đường SS của một Slave nào đó xuống mức thấp thì việc giao tiếp sẽ xảy ra giữa Master và Slave đó. Chỉ có 1 đường SS trên mỗi Slave nhưng có thể có nhiều đường điều khiển SS trên Master, tùy thuộc vào thiết kế của người dùng.
Hình 3. 9: SPI giữa một chip Master và 3 chip Slave thông qua 4 đường.
Hoạt động: mỗi chip Master hay Slave có một thanh ghi dữ liệu 8 bits. Cứ mỗi xung nhịp do Master tạo ra trên đường giữ nhịp SCK, một bit trong thanh ghi dữ liệu của Master được truyền qua Slave trên đường MOSI, đồng thời một bit trong thanh ghi dữ liệu của chip Slave cũng được truyền qua Master trên đường MISO. Do 2 gói dữ liệu trên 2 chip được gởi qua lại đồng thời nên quá trình truyền dữ liệu này được gọi là “song công”.
Hình 3. 10: Quá trình truyền 1 gói dữ liệu thực hiện bởi module SPI
Vi mạch ENC28J60 giao tiếp với các vi xử lý khác thông qua chuẩn truyền dữ liệu nối tiếp SPI (Serial Peripheral Interface), dùng để nối các vi mạch trong cùng một hệ thống với ưu điểm là chạy nhanh và tốn rất ít dây nối tín hiệu, chỉ cần 3 dây cho cả đường ghi và đọc.
Sau đây là bộ lệnh SPI dùng cho vi mạch ENC28J60 và các giản đồ xung thể hiện các quá trình ghi, đọc dữ liệu, lệnh giữa vi xử lý và ENC28J60 :
Hình 3. 11: Quá trình đọc thanh ghi điều khiển Ethernet
Hình 3. 12: Quá trình đọc thanh ghi điều khiển MAC
Hình 3. 13: Quá trình ghi vào thanh ghi lệnh
Hình 3. 14: Quá trình ghi vào bộ đệm lệnh
Hình 3. 15: Quá trình ghi vào lệnh của hệ thống
Mặc dù đã được thiết kế theo cấu trúc “stand alone” (một chip làm hết các việc) nhưng việc điều khiển để vi mạch này hoạt động được là rất phức tạp và đòi hỏi có hiểu biết khá toàn diện về vi điều khiển, mạch điện tử và mạng Internet. Tuy nhiên, rất may mắn cho người thiết kế và lập trình vì hãng MicroChip (hãng sản xuất vi mạch ENC28J60) đã hỗ trợ tối đa, bằng cách đưa ra đầy đủ các thư viện phục vụ cho việc lập trình, làm cho việc lập trình giao tiếp với vi mạch này trở nên khá dễ dàng.
3.5. Text LCD
3.5.1. Cấu trúc Text LCD
Text LCD là các loại màn hình tinh thể lỏng dung để hiển thị các dòng chữ hoặc số trong bẳng mã ASCII.Không giống các loại LCD lớn, text LCD được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII.Cũng vì lý do chỉ hiển thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (để phân biết với Graphic LCD có thể hiển thị được hình ảnh). Mỗi ô của Text LCD bao gồm các chấm tinh thể lỏng, việc kết hợp “ẩn” và “hiện”các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong Text LCD, các mẫu ký tự được đinh nghĩa sẵn. Kích thước của Text LCD được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Ví dụ LCD 16x2 là loại có 2 dòng và mỗi dòng hiển thị tối đa được 16 ký tự. Một số kích thước thông thường của LCD là: 16x1, 16x2, 16x4, 20x2, 20x4…
Hình 3. 16: Text LCD 16x2
Text LCD có 2 giao thức cơ bản là nối tiếp (như I2C) và song song. Trong phạm vi bài học này chúng tôi chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD 16x2 điều khiển bởi chip HD44780U của hang Hitachi. Đối với các LCD khác bạn cần tham khảo datasheet riêng của từng loại , HD44780U cũng được gọi là chuẩn chung cho các loại Text LCD, vì thế bạn có thể dung chương trình ví dụ trong bài này để text trên các LCD khác với 1 ít chỉnh sửa cho phù hợp.
HD44780U là bộ điều khiển cho các Text LCD dạng ma trận điểm, chip này có thể được dung cho các LCD có 1 hoặc 2 dòng hiển thị. HD44780U có 2 mode giao tiếp là 4bit và 8 bit. Nó chứa sẵn 208 ký tự mẫu kích thước font 5x8 và 32 ký tự mẫu font 5x10 (tổng cộng có 240 mẫu ký tự khác nhau).
3.5.2. Sơ đồ chân
Bảng 3. 7: Chức năng chân của LCD
Chức năng
|
Số thứ tự chân
|
Tên
|
Trạng thái logic
|
Mô tả
|
Ground
|
1
|
VSS (GND)
|
-
|
0V
|
Nguồn cho LCD
|
2
|
VDD (VCC)
|
-
|
+5V
|
Tương phản
|
3
|
Vee
|
-
|
0 – Vdd
|
Điều khiển LCD
|
4
|
RS
|
0
1
|
D0-D7: lệnh
|
5
|
R/W
|
0
1
|
D0-D7: dữ liệu
|
6
|
E
|
0
1
Từ 1 xuống 0
|
Ghi (Từ PIC vào LCD)
Đọc (từ LCD vào PIC)
|
Dữ liệu/ Lệnh
|
7
|
D0
|
0/1
|
Bit 0 LSB
|
8
|
D1
|
0/1
|
Bit 1
|
9
|
D2
|
0/1
|
Bit 2
|
10
|
D3
|
0/1
|
Bit 3
|
11
|
D4
|
0/1
|
Bit 4
|
12
|
D5
|
0/1
|
Bit 5
|
13
|
D6
|
0/1
|
Bit 6
|
14
|
D7
|
0/1
|
Bit 7 MSB
|
Các Text LCD theo chuẩn HD44780U thường có 16 chân trong đó có 14 chân kết nối với bộ điều khiển và 2 chân nguồn cho “đèn LED nền”. Thứ tự chân thường được sắp xếp như hình trên.
Trong một số LCD 2 chân LED nền được đánh số 15 và 16 nhưng trong một số trường hợp 2 chân này đươc ghi là A(Anode) và K(Cathode).
Hình 3. 17: kết nối Text LCD với Vi điều khiển
Chân 1 và 2 là các chân nguồn, được nối với GND và nguồn 5V. Chân 3 là chân chỉnh độ tương phản (contrast), chân này cần được nối với 1 biến trở để đạt được độ tương phản cần thiết, sau đó giữa mức biến trở này. Các chân điều khiển RS, R/W,EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển, chúng ta sẽ khảo sát kỹ càng hơn trong các phần sau.
3.5.3. Điều khiển hiển thị
Các chân điều khiển việc đọc và ghi LCD bao gồm RS,R/W và EN. Chân RS là chân số 3: Chân lựa chọn thanh ghi ,chân này cho phép lựa chọn 1 trong 2 thanh ghi ỈR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR được chọn và nếu RS=1 thanh ghi DR được chọn. Chúng ta đều biết thanh ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gởi 1 mã lệnh đến LCD thì chân RS phải được reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả trong hình 12.
Hình 3. 18: Hoạt động của chân RS
R/W (chân số 4): Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ Busy Flag - BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên, nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị. Trong bài này tôi hướng dẫn bạn cách tổng quát là cách 1, để sử dụng cách 2 bạn chỉ cần một thay đổi nhỏ trong chương trình wait_LCD (sẽ trình bày chi tiết sau) và kết nối chân R/W
của LCD xuống GND.
EN (chân số 5): Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một “xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0:7, sau đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống.
3.5.4. Mạch RJ14
- Mạch sử dụng đầu cắm giao tiếp RJ14 là HR911105A của HANRUN, HR911105A được tích hợp sắn biến áp và có 2 con led để thông báo trạng thái kết nối của mạch.
Hình 3. 19: Sở đồ khối của HR911105A
Chia sẻ với bạn bè của bạn: |