STM8S003 + LCD16x2 4bit + Temperature and humidity module AM2301
Schematic
Ảnh thực tế module AM2301
Sơ đồ chân module AM2301
Giới thiệu module cảm biến AM2301.
- Độ ẩm : 0->99.9%
- Độ chính xác: 3%
- Độ phân giải: 0.1%
- Nhiệt độ: -40->80oC
- Độ chính xác: 0.3oC
- Độ phân giải: 0.1oC
Hướng dẫn giao tiếp module AM2301
Giao thức one-wire với module AM2301
- Tạo xung start:
Set chân SDA(MCU) output =>Đưa chân SDA high =>SDA low ít nhất 800uS->20mS (mình để khoảng 1mS) =>SDA high =>Set SDA input.
- Kiểm tra xung Responce.
Nếu chân SDA kéo xuống low khoảng 80uS =>Sau đó SDA high khoảng 80uS =>Báo start read data. (Ở đây mình chỉ cần chờ SDA xuống low khoảng 80uS sao đó lên high là OK, không cần chờ lên high trong 80uS).
- Nhận data.
Data bao gồm 5 byte: 2 byte đầu là độ ẩm, 2 byte tiếp theo là nhiệt độ, byte cuối là byte parity.
Byte parity = byte cao dộ ẩm + byte thấp độ ẩm + byte cao nhiệt độ + byte thấp nhiệt độ.
Xung xác định bit 0 và bit 1.
Sao khi kiểm tra xong xung Responce ta chờ SDA lên high bắt đầu delay 50us => kiểm tra nếu SDA vẫn high =>bit 1, còn nếu sau delay 50 mà SDA low =>bit 0 => cứ tiếp tục kiểm tra hết 5 byte ( 40 bit) là xong.
Sao đó cộng 4 byte đầu lại kiểm tra parity =>nếu đúng => OK.
Nếu 0000 0010+1001 0010 +0000 0001+0000 1101= 1010 0010 ≠ 1011 0010 (Data nhận sai).
Giá trị độ ẩm : 0000 0010 1001 0010 = 0292H (Hexadecimal)= 2×256 + 9×16 + 2 = 658 =>65.8%.
Giá trị nhiệt độ: 0000 0001 0000 1101 = 10DH(Hexadecimal) = 1×256 + 0×16 + 13 = 269 =>26.9oC.
Với nhiệt độ âm ta có 1 bit dấu: 1 000 0000 0110 0101 =>-10.1
Khi tính nếu thấy bít dấu =>ta sẽ bỏ qua bit dấu
0000 0000 0110 0101 = 0065H(Hexadecimal)= 6×16 +5 = 101
Kết quả
Video
Link code: https://drive.google.com/file/d/0B9pHWA4exz3gdHBqd1RFZUVtdnM/view?usp=sharing