Hallo, hat evtl. einer von euch eine fertig geschriebene Library für AVR GCC? Die er mir zu verfügung stellen würde?
Ich glaub dein google ist kaputt. Da werd ich mal kurz für dich ein paar Seiten raussuchen: https://android.googlesource.com/kernel/msm.git/+/77cac325253126dd9e6c480d885aa51f1abf3c40/drivers/input/misc/bmp180.c https://github.com/mozilla-b2g/kernel-android-galaxy-s2-ics/blob/master/drivers/sensor/bmp180.c http://simonetti.media.mit.edu/dev/projects/tidmarsh/repository/revisions/fe9e2cc80a9b/entry/tidsense/bmp180.c https://github.com/devthrash/environment-logger/blob/master/main.c Grüße Oliver
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?
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.
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?
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
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 | }
|
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.
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
|
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 ?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.