Hallo zusammen,
Ich habe bereits den SHT21 Temperatur und Feuchte Sensor per I2C an
meinen Atmega8 angebunden. Jetzt benötige ich noch den BMP180 für den
Lufdruck. Allerdings scheitere ich immer wieder am auslesen.
Die Temperatur und die Komponsationsdaten des BMP180 kann ich ohne
Probleme auslesen und es kommt auch eine plausible Temperatur dabei
raus.
Bei dem Luftdruck bekomme ich aber zum einen immer einen negativen Wert
und zum anderen (was ich überhaupt nicht verstehe) funktioniert das
Auslesen der Temperatur nicht mehr, sobald ich 1x versucht habe den
Druck auszulesen. Erst ein Neustart des Atmega8 behebt das Problem (so
lange, bis ich erneut versuche den Druck abzufragen).
Ich habe auch schon testweise die kompletten Berechnungen, die nach dem
Datenempfang gemacht werden müssen, um den tatsächlichen Druck zu
erhalten auskommentiert. Aber trotzdem "zerstört" der Aufruf von
Bmp180Press() die Temperaturmessung des BMP180.
1 | long Bmp180Press(){
|
2 | unsigned char ret;
|
3 | short data = NULL;
|
4 | long pressLong = NULL;
|
5 | short oss = 0;
|
6 | ret = i2c_start((0x77<<1)+I2C_WRITE);
|
7 | if ( ret ) {
|
8 | i2c_stop();
|
9 | }
|
10 | else{
|
11 | i2c_write(0xF4);
|
12 | i2c_write(0x34+(oss<<6));
|
13 | _delay_ms(6);
|
14 | i2c_rep_start((0x77<<1)+I2C_WRITE);
|
15 | i2c_write(0xF6);
|
16 | i2c_rep_start((0x77<<1)+I2C_READ);
|
17 | data = i2c_readAck();
|
18 | data = data << 8;
|
19 | data = data | i2c_readNak();
|
20 | i2c_stop();
|
21 | }
|
22 | pressLong = (data << 8);
|
23 | pressLong = pressLong >> (8-oss);
|
24 | ...
|
25 | //Berechnungen
|
26 | ...
|
27 | return pressLong;
|
28 | }
|
Ich wäre für Ratschläge sehr dankbar, da ich überhaupt keine Idee mehr
habe, wo der Fehler liegen könnte