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

Thứ Hai, 21 tháng 3, 2016

STM8S003K6 LCD 16x2 4bit

STM8S003K6 LCD 16x2 4bit

Schematic.


  • Các bước setup LCD 16x2 4 bit data.


Lưu đồ các bước setup.

B1: 
  • Sau khi cấp nguồn cho LCD, delay >=15ms.
  • Cho chân RS, RW xuống mức thấp. 

B2: 
  • Gửi 4 bit data DB7=0, DB6=0, DB5=1, DB4=1. 
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Delay >=4.1ms.

B3:
  • Gửi 4 bit data DB7=0, DB6=0, DB5=1, DB4=1. 
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Delay >=100us.

B4:
  • Gửi 4 bit data DB7=0, DB6=0, DB5=1, DB4=0. 
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B5:
Command function set: DL=0 mode 4 bit, DL=1 mode 8 bit, N=0 mode 1 dòng, N=1  mode 2 dòng, F=0 mode font 5x10, F=1 mode font 5x8. => 0x28: giao tiếp 4 bit , 2 dòng, font 5x8.

  • Gửi 4 bit cao.( 0010)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit thấp. (1000)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B6:
Command on display: D=1 display on, D=0 display off, C=1 hiện con trỏ, C=0 tắt con trỏ. =>0x0C.
Tách ra gửi 2 lần mỗi lần 4 bit: 
  • Gửi 4 bit cao.(0000)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit thấp.(1100)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B7:

Command entry mode- hiển thị tăng không dịch. ID=1 hiển thị tăng kí tự sau sẽ nằm bên phải kí tự trước, ID=0 hiển thị giảm kí tự sau hiển thị bên trái kí tự trước , S=1 kí tự trước sẽ bị đẩy đi ,kí tự sau sẽ chiếm chỗ, S=0 không dịch. =>0x06.

  • Gửi 4 bit cao.(0000)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit thấp.(0110)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B8:


Command clear display- 0x01.

  • Gửi 4 bit cao.(0000)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit thấp.(0001)
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
Hiển thị data ra màn hình.
B1: 
  • Gửi một byte command vị trí xuất data.
  • Command: 0x80 + x (x=0->15): hàng 1 cột từ 0->15.
  • Command: 0xC0 + x(x=0->15): hàng 2 cột từ 0->15.
  • Gửi command.
  • Cho chân RS=0.
  • Gửi 4 bit cao.
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit thấp.
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
B2:
  • Cho chân RS=1. Gửi 1 byte data mã ASCII.
  • Gửi 4 bit data cao.
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Gửi 4 bit data thấp.
  • Cho chân E lên mức cao, delay khoảng 5us, E xuống thấp delay 50us.
  • Cho chân RS=0.
  • Nếu muốn gửi một chuỗi ta gửi nhiều lần mã ASCII của kí tự trong chuỗi

Kết quả

Link code: https://drive.google.com/file/d/0B9pHWA4exz3gRjQxSGc3Vld3LU0/view?usp=sharing