Forum: Mikrocontroller und Digitale Elektronik BMP180 Library


von Jan (Gast)


Lesenswert?

Hallo,

hat evtl. einer von euch eine fertig geschriebene Library für AVR GCC?
Die er mir zu verfügung stellen würde?

von Oliver J. (skriptkiddy)


Lesenswert?


von Jan (Gast)


Lesenswert?

Hallo Oliver,

Das ist eher mehr für den PC geschrieben oder?  Da muss man ja noch ne 
Menge anpassen oder sehe ich das falsch?

von Link (Gast)


Lesenswert?

Zu faul Goolge zu bemühen und die schon bereitgestellten Links mal 
anzuschauen!!!

Beim letzten springt einen doch sofort
1
#include <avr/io.h>
an.

von Jan (Gast)


Lesenswert?

Nun habe ich mir die Library mal angeschaut, was mir direkt auffällt 
ist, dass bei der Temperatur Berechnung zum Schluss "*16" gerechnet 
wird, im Datenblatt des Herstellers aber "/16" vorgeschrieben wird 0.o
Sehe ich was falsch?
1
   X1 = (UT-BMP180_cal[5]) * BMP180_cal[4] / 32768;
2
   X2 = BMP180_cal[9] * 2048 / (X1 + BMP180_cal[10]);
3
   B5 = X1 + X2;
4
   truetemperature = (B5 + 8) * 16;

Code von ... https://github.com/devthrash/environment-logger

Datenblatt vom Hersteller ->

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0CD4QFjAF&url=http%3A%2F%2Fae-bst.resource.bosch.com%2Fmedia%2Fproducts%2Fdokumente%2Fbmp180%2FBST-BMP180-DS000-09.pdf&ei=lTTnVIGZOYO4UZzpg4AO&usg=AFQjCNFduSzyOugzpt8jpR8MKk-1qrPjTA&bvm=bv.86475890,d.d24

(Seite 15)

Was auch nicht wirklich klappt, ist das auslesen der ID = 0x55...
I2C funktioniert soweit mit anderen i2c Geräten...

hat jemand eine Ahnung?

von Wolfgang (Gast)


Lesenswert?

Jan schrieb:
> Nun habe ich mir die Library mal angeschaut, was mir direkt auffällt
> ist, dass bei der Temperatur Berechnung zum Schluss "*16" gerechnet
> wird

Das sind genau zwei verschiedene Möglichkeiten. Wenn eine davon richtig 
ist, wird sie das richtige Ergebnis liefern.

> hat jemand eine Ahnung?
Es gibt genug funktionierende Beispiel für den BMP180, die das richtige 
Ergebnis liefern. Guck dir im Datenblatt des BMP180 die Seite 15 an und 
vergleiche Rechung und Zahlenwerte Schritt für Schritt mit deiner 
Rechnung.
https://ae-bst.resource.bosch.com/media/products/dokumente/bmp180/BST-BMP180-DS000-09.pdf

von Jan (Gast)


Lesenswert?

Danke Wolfgang!

Abgesehen von der Rechnung, habe ich ein ganz anderes Problem (warum die 
Werte auch nicht passen)...

Ich habe den I2C Slave erstmal eine Anfrage gestellt und eine positive 
Antwort bekommen, dass heißt ja für mich schon mal, dass er online ist.

Nun sollte man ja mal die "DeviceID" auslesen. Diese sollte "0x55h" 
betragen.
Leider bekomme ich diese aber nicht. An was kann das liegen???

Hier mal mein Code... (Kommunikation mit anderen I2C Slave´s 
funktioniert wunderbar)
1
uint8_t BMP180_init(void)
2
{
3
  unsigned char ID;
4
  i2c_start(BMP180_address + I2C_WRITE);
5
  i2c_write(BMP180_ID);
6
  i2c_start(BMP180_address + I2C_READ);
7
  ID = i2c_readNak();
8
  i2c_stop();
9
10
  if(ID == 0x55)
11
  {  
12
    uart_puts("Online");
13
    
14
    for(uint8_t i = 0; i < 11; i++)
15
    {    
16
      i2c_start(BMP180_address+I2C_WRITE);
17
      i2c_write(BMP180_regaddress[i]);
18
      i2c_start(BMP180_address+I2C_READ);
19
      BMP180_cal[i]  = i2c_readAck()<<8;
20
      BMP180_cal[i] |= i2c_readNak();
21
      i2c_stop();
22
    }
23
    return 1;
24
  }
25
  else
26
  {
27
    return 0;
28
  }
29
}

von Jan (Gast)


Lesenswert?

vergessen...

ich bekomme (0xFF) als Wert...

von Wolfgang (Gast)


Lesenswert?

Jan schrieb:
> i2c_start(BMP180_address + I2C_WRITE);

... und für BMP180_address verwendest du welchen Wert. So wie du 
i2c_start() aufrufst, darf das nicht die 7-Bit I2C-Adresse sein.

von Jan (Gast)


Lesenswert?

Wolfgang schrieb:
> Jan schrieb:
>> i2c_start(BMP180_address + I2C_WRITE);
>
> ... und für BMP180_address verwendest du welchen Wert. So wie du
> i2c_start() aufrufst, darf das nicht die 7-Bit I2C-Adresse sein.

Das ist die "Address"
1
 #define BMP180_address 0xEE

von Jan (Gast)


Lesenswert?

Ich habe nicht daran gedacht, dass ich das Modul mit 3,3 VDC betreibe 
und den Controller mit 5VDC...

Kann es sein das der BMP Probleme mit den Pegeln bekommt / hat ?

von Wolfgang (Gast)


Lesenswert?

Jan schrieb:
> Das ist die "Address"
>  #define BMP180_address 0xEE

Die Adresse des BMP180 ist 0x77, d.h. das, was du mit BMP180_address 
benannt hast, ist schon nach links geschoben, sollte also passen, auch 
wenn die Bezeichnung verwirrend ist.

Jan schrieb:
> Kann es sein das der BMP Probleme mit den Pegeln bekommt / hat ?

Wenn du den I2C Bus mit 3,3V betrieben hast bzw. die Pull-Ups groß genug 
waren, dann nicht. Und der µC sollte eigentlich die 3,3V Signale 
trotzdem verstehen, solange sie sauber sind.

von Jan (Gast)


Lesenswert?

Dann kann ich wirklich nicht nachvollziehen wo das Problem liegt.

von Jan (Gast)


Lesenswert?

Wolfgang schrieb:
> Jan schrieb:
> Das ist die "Address"
>  #define BMP180_address 0xEE
>
> Die Adresse des BMP180 ist 0x77, d.h. das, was du mit BMP180_address
> benannt hast, ist schon nach links geschoben, sollte also passen, auch
> wenn die Bezeichnung verwirrend ist.
>
> Jan schrieb:
> Kann es sein das der BMP Probleme mit den Pegeln bekommt / hat ?
>
> Wenn du den I2C Bus mit 3,3V betrieben hast bzw. die Pull-Ups groß genug
> waren, dann nicht. Und der µC sollte eigentlich die 3,3V Signale
> trotzdem verstehen, solange sie sauber sind.

Im Datenblatt steht nichts von 0x77. Wo sieht du das denn?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.