Thứ Tư, 23 tháng 3, 2016

STM8S003+LCD16x2+AM2301

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

Không có nhận xét nào:

Đăng nhận xét