2. Các khối trong mạch • Khối xử lý trung tâm
•
Khối nguồn
Tạo điện áp chuẩn 5V cho vi điều khiển. D1 tạo điện áp 1 chiều, các bộ tụ C1, C2 để san phẳng và làm ổn định điện áp ra cho vi điều khiển.
•
Khối đo độ ẩm
HS1101 là cảm biến điện dung. Khi độ ẩm thay đổi, điện dung của HS1101 thay đổi. Do vậy, để đo được độ ẩm người ta thiết kế mạch đo điện dung của HS1101. Trong thực tế, người ta thường ghép nối HS1101 và IC NE555. Khi đó giá trị điện dung của HS1101 thay đổi thì làm thay đổi tần số đầu ra của IC555. Như vậy chỉ cần đo tần số đầu ra là có thể đo được điện dung của HS1101. •
Khối đo nhiệt độ
•
Khối role
Khi t mở. Chân tiếp điểm kéo xuống đất. Vcc mức 1, tạo ra sự chênh áp. • Khối hiển thị LCD
•
Khối reset
•
Khối dao động
•
Khối nút nhấn
III.tìm hiểu về các linh kiện được sử dụng Trong mạch đo nhiệt độ và độ ẩm dùng cảm biến nhiệt độ DS18B20 và cảm biến điện dung HS1101 hiển thị ra màn hình LCD ta cần sử dụng các linh kiện sau: …………. 1. Vi điều khiển 89S52 a. Hình ảnh
a. Cấu tạo và chức năng các chân trên 89s52
AT89S52 có tất cả 40 chân có chức năng như các đường xuất nhập. Trong đó có 24 chân có tác dụng kép (có nghĩa là 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ. * PORT Port 0: là port có 2 chức năng ở các chân từ 32- 39. Trong các thiết kế cỡ nhỏ không dùng đến bộ nhớ mở rộng thì port 0 có chức năng là xuất/nhập dữ liệu. Nếu trong các thiết kế cỡ lớn phải dùng đến bộ nhớ mở rộng thì port 0 được kết hợp giữa bus địa chỉ và bus dữ liệu. Port 1: là port có 1 chức năng từ chân 1- 8. Có thể dùng cho giao tiếp với thiết bị ngoài nếu cần. Vì không có chức năng khác ngoài xuất/nhập nên nó chỉ được dùng giao tiếp với các thiết bị bên ngoài. Port 2: là 1 port có tác dụng kép trên các chân 21- 28 được dùng như các đường xuất nhập hoặc là byte cao của các bus địa chỉ đối với thiết bị dùng bộ nhớ mở rộng. Port3: là port có tác dụng kép trên các chân 10- 17, port này có nhiều chức năng cụ thể như sau:
P3.0
RXT
Ngõ vào đữ liệu nối tiếp
P3.1
TXD
Ngõ xuất dữ liệu nối tiếp
P3.2
INT0
Ngõ vào ngắt 0
P3.3
INT1
Ngõ vào ngắt 1
P3.4
T0
Ngõ vào của timer/ couter 0
P3.5
T1
Ngõ vào của timer/ couter 1
P3.6
WR
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
P3.7
RD
Tín hiệu đọc dữ liệu bộ nhớ ngoài
* các ngõ tín hiệu điều khiển PSEN PSEN là tín hiệu ngõ ra ở chân 29 có ứng dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nối với chân 0E( output ennable) của EPROM cho phép đọc các byte mã lệnh. PSEN ở mức 0 khi 89s52 lấy lệnh, các mã lệnh của chương trình đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh để giải lệnh. PSEN ở mức 1 khi 89s52 thi hành chhuowng trình trong ROM nội. ALE ALE ở chân số 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt. Vì khi 89s52 truy xuất bộ nhớ bên ngoài port 0 có chức năng là đường địa chỉ và dữ liệu nên phải tách riêng ra. Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động. EA Ngõ tín hiệu vào EA ở chân 31 thường được mắc lên nguồn. Nếu ở mức 1 thì 89s52 thi hành chương trình từ ROM nội trong khaongr địa chỉ thấp 8kbyte. Nếu ở mức 0 thì 89s52 sẽ thi hành chương trình từ bộ nhớ mở rộng. RST Ngõ tín hiệu RST (reset) ở chân số 9. Khi 89s52 thực hiện 2 chu kỳ máy hoặc khi cấp điện mạch tự động reset. X1,X2
Ngõ tín hiệu dao động X1, X2 ở chân 18, 19. Thường được nối với thạch anh để tạo dao động. Vcc Vcc là chân số 40, thường được nối lên nguồn 5V. 2. Cảm biến nhiệt độ DS18B20
a. Hình ảnh
DS18B20 là IC cảm biến nhiệt độ chỉ bao gồm 3 chân, đóng gói dạng TO-92 b. Cấu tạo
+ Lấy nhiệt độ theo giao thức 1 dây (1wire) + Cung cấp nhiệt độ với độ phân giải config 9,10,11,12 bit, tùy theo sử dụng. Trong trường hợp không config thì nó tự động ở chế độ 12 bit. Thời gian chuyển đổi nhiệt độ tối đa là 750ms cho mã hóa 12 bit +Có thể đo nhiệt độ trong khoảng -55 -> +125°C. Với khoảng nhiệt độ là -10°C to +85°C thì độ chính xác ±0.5°C,±0.25°C ,±0.125°C,±0.0625°C. theo số bít config.
+ Có chức năng cảnh báo nhiệt khi nhiệt độ vượt ngưỡng cho phép. Người dùng có thể lập trình chức năng này cho DS18B20. Bộ nhớ nhiệt độ cảnh báo không bị mất khi mất nguồn vì nó có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip (on chip), giá trị nhị phân được khắc bằng tia laze.
+ Cam bien nhiet do DS18B20 có mã nhận diện lên đến 64-bit, vì vậy bạn có thể kiểm tra nhiệt độ với nhiều IC DS18B20 mà chỉ dùng 1 dây dẫn duy nhất để giao tiếp với các IC này. Với DS18B20 bạn hoàn toàn có thể tạo cho mình mạch cảm biến nhiệt độ theo y muốn. + Điện áp sử dụng : 3 – 5.5 V + Dòng tiêu thụ tại chế độ nghỉ rất nhỏ. d. Lập trình đo nhiệt độ với vi điều khiển 89s52 Khi xử ly DS18b20 chúng ta cần quan tâm đến 2 nhóm lệnh sau: + nhóm lệnh truy cập ROM + nhóm lệnh chức năng bộ nhớ • Nhóm lệnh truy cập ROM - READ ROM (33h) Cho phép đọc ra 8 byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết bị tớ cùng đáp ứng. - MATCH ROM (55h) Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn ra chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào. Chỉ có DS1820 nào có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới đáp ứng lại các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM không trùng khớp sẽ tiếp tục chờ một xung reset. Lệnh này được sử dụng cả trong trường hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm biến một dây. - SKIP ROM (CCh) Lệnh này cho phép thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820 mà không cần gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ mang hiệu quả khi trên bú
chỉ có một cảm biến. - SEARCH ROM (F0h) Lệnh này cho phép bộ điều khiển bus có thể dò tìm được số lượng thành viên tớ đang được đấu vào bus và các giá trị cụ thể trong 64 bit ROM của chúng bằng một chu trình dò tìm. - ALARM SEARCH (ECh)
Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH và nhỏ hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt trên thanh ghi trong bộ nhớ của cảm biến. Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ nháp (scratchpath) của cảm biến DS1820. khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và xác định chế độ cung cấp điện áp nguồn. Các lệnh chức năng có thể được mô tả ngắn gọn như sau: - WRITE SCRATCHPAD (4Eh) Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi TL (byte 3 của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có y nghĩa nhất và kế tiếp là những bit có y nghĩa giảm dần. Cả hai byte này phải được ghi trước khi thiết bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất hiện. - READ SCRATCHPAD (BEh) Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình
đọc bắt đầu từ bit có y nghĩa nhấy của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 – CRC). Thiết bị chủ có thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một phần của dữ liệu trên bộ nhớ nháp cần được đọc. - COPYSCRATCHPAD (48h) Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ EEPROM. Nếu cảm biến được sử dụng trong chế dộ cấp nguồn l bắt đầu việc đo. - CONVERT T (44h) Lệnh này khởi động một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân). Sau khi chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0. - READ POWER SUPPLY (B4h) Một lệnh đọc tiếp sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế nào, giá trị đọc được bằng 0 nếu cấp nguồn bằng
chính đường dẫn dữ liệu và bằng 1 nếu cấp nguồn qua một đường dẫn riêng. • Nhóm lệnh chức năng bộ nhơ Để xử ly được nhiệt độ được từ DS18B20 chúng ta cần quan tâm đến hàm : -float ds18b20_readtemp(void): Đây là hàm giúp các bạn tính toán và trả về giá trị nhiệt độ mà DS18b20 đo được Chúng ta có hàm đọc nhiệt độ float ds18b20_readtemp(void) { float temp;
unsigned char a,b; DS18B20_Init(); // Khoi tao DS18b20 ds18b20_writebyte(0xCC) ; // Cho phep VDK truy cap thang den cac lenh bo nho cua DS18b20 ds18b20_writebyte(0x44) ; // Khoi dong qua trinh do va chuyen doi nhiet do ra so nhi phan DS18B20_Init() ; ds18b20_writebyte(0xCC) ; ds18b20_writebyte(0xBE) ; // Cho phep doc du lieu tu bo nho DS18b20 ra ngoai a = ds18b20_readbyte(); temp=((float)(a&0x0f))/16; // Lay phan thuc cua gia tri nhiet do b = ds18b20_readbyte(); a =((a&0xf0)>>4)|((b&0x0f)<<4) ; // Lay phan nguyen cua gia tri nhiet do temp=temp+a; return temp; } Chúng ta có hàm main đo nhiệt độ: #include <main.h> void main() { float Nhiet_Do; unsigned char Lcd_Buff[15]; lcd1602_init();
HS1101 là loại cảm biến đo độ ẩm. Độ chính xác +-2%. Dãy nhiệt độ hoạt động từ -400C à 1000C. Cảm biến HS1101 được sử dụng phổ biến trong cuộc sống, ngoài ra nó còn dùng kết hợp với cảm biến DS18B20 dùng đo nhiệt độ.
Nguyên ly làm việc
Cảm biến HS1101 là cảm biến điện dung. Khi độ ẩm thay đổi, điện dung của HS1101 thay đổi. Do vậy, để đo được độ ẩm người ta thiết kế mạch đo điện dung của HS1101. Trong thực tế, người ta thường ghép nối HS1101 và IC NE555. Khi đó giá trị điện dung của HS1101 thay đổi thì làm thay đổi tần số đầu ra của IC555. Như vậy chỉ cần đo tần số đầu ra là có thể đo được điện dung của HS1101. Sơ đồ ghép nối HS1101 với NE555
c.
Cách thức đo độ ẩm Ta có công thức tính tần số như sau : d.
(1)
Trong đó: oF là tần số oC@%RH: độ ẩm oR2 = 576K, R4 = 49.9k Ta có công thức liên hệ giữa độ ẩm và điện dung: (2) Trong đó: oC@55% = 180pF ( tài liệu của hãng ) oC(pf) chính là điện dung đo được.
Từ (1) và (2) ta có mỗi liên hệ giữa tần số và độ ẩm Giải pháp tính toán: Ta thấy hàm độ ẩm là hàm mũ 3, nên rất khó tính toán mối liên hệ F và RH. Ta thấy hàm C(pf) là hàm đồng biến với RH. Do vậy ta F sẽ nghịch biến với RH. Từ đó ta có phương pháp tính độ ẩm bằng phương pháp tra bảng Ta dùng bảng Excel như bảng 1, tạo mối quan hệ RH và F, ta thu được bảng. F[100] = {7410;7392;….;6019}. Mảng này có 100 phần tử tương đương với độ ẩm từ 0-100% Như vậy, khi ta đo được tần số F, ta chọn F>=F và sát nhất với F. Khi đó Độ ẩm RH =i%. Bảng 1: Bảng tính giá trị độ ẩm qua tần số.
4. Hiển thị LCD a. Hình ảnh
b. Cấu tạo và các chức năng
- Chân vcc, Vss,VEE: Cấp dương nguồn - 5v và đất tương ứng thì V EE được dùng để
điều khiển độ tương phản của LCD.
- Chân chọn thanh ghi RS: 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. - Chân W/R: Đầ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. - Chân cho phép E: 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. - 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. Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1. Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ. Bảng h1sau liệt kê các mã lênh. Chúng ta cũng sử dụng RS = 0 để kiểm tra bít cờ bận để xem LCD có sẵn sàne nhân thông tin. Cờ bận là D7 và có thể được đọc khi R/W = 1 và RS = 0 như sau: Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận thông tin mới. Lưu y chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ dữ liệu nào lên LCD. 5. Role