Hallo,
Versuche derzeit einen HTU21D Humi & Temp mit einem ESP8266 zu koppeln.
Mit einem Atmega8 habe ich das auch schon problemlos hinbekommen. Mit
der i2c_master implementierung von Espressif will das ganze jedoch
irgendwie nicht tun. Weshalb ist mir noch nicht wirklich klar.
Der Sensor fühlt sich schon gar nicht angesprochen beim beginn (Siehe
Oszi Screenshot). Es wird jedoch genau dieselbe Adresse angesprochen..
Hat evtl. jemand hier schonmal etwas ähnliches realisiert und kennt
evtl. einen Fallstrick o.ä. welcher mir gerade widerfährt?
Verwendete C Code auf dem ESP8266:
1 |
|
2 | system_soft_wdt_stop();
|
3 |
|
4 | char status;
|
5 |
|
6 | i2c_master_start();
|
7 | i2c_master_writeByte(0b10000000);
|
8 | status = i2c_master_getAck();
|
9 | i2c_master_writeByte(0xE3);
|
10 | status = i2c_master_getAck();
|
11 | i2c_master_stop();
|
12 |
|
13 | i2c_master_start();
|
14 | i2c_master_writeByte(0b10000001);
|
15 | status = i2c_master_getAck();
|
16 |
|
17 | byte1 = i2c_master_readByte();
|
18 | i2c_master_setAck(1);
|
19 | byte2 = i2c_master_readByte();
|
20 | i2c_master_setAck(1);
|
21 | byte3 = i2c_master_readByte();
|
22 | i2c_master_setAck(0);
|
23 | i2c_master_stop();
|
24 |
|
25 | system_soft_wdt_restart();
|
Verwendete C Code auf dem Atmega:
1 | //Start temp meassurement
|
2 | i2c_start();
|
3 | i2c_transmit(0b10000000);
|
4 | i2c_transmit(0xE3);
|
5 | i2c_stop();
|
6 |
|
7 | i2c_start();
|
8 | i2c_transmit(0b10000001);
|
9 | data1 = i2c_read(1);
|
10 | data2 = i2c_read(1);
|
11 | data3 = i2c_read(0);
|
12 | i2c_stop();
|
Benjamin