Grüßgott zusammen, ich will einen Bosch BNO055 mit einem ATmega 32 (12 MHz) über i2c auslesen und die Daten dann an einem LCd anzeigen. Der Plan ist, dazu die I2C-lib vom Peter Fleury herzunehmen. Irgendwie kommt das Programm aber nicht über den ersten I2C-Start hinaus. Ist das ein Hardware oder Software Fehler. Wo muss ich mit der Fehlersuche beginnen, und wie kann ich den Fehler beheben. Danke! Gruß, Jonas
Bis wohin kommt dein Programm genau? Hast du auch gegen die twimaster.c gelinkt? Occams Razor sagt Softwarefehler.
spess53 schrieb: >> i2c_start_wait(0x29+I2C_WRITE); > > Wie kommst du auf die 0x29? Stimmt. Das ist mit 100%iger Sicherheit falsch, auch ohne ins Datenblatt zu schauen. I2C Addressen werden gerne mal nur mit den führenden 7 Bit angegeben, da muss man dann schon 2x lesen.
Hi
>0x29 ist die Adresse vom BNO
Nein. Entweder 0x50 oder 0x28. Kommt darauf an, was die Lib damit macht.
MfG Spess
Jim M. schrieb: > I2C Addressen werden gerne mal nur mit den führenden 7 Bit > angegeben, da muss man dann schon 2x lesen. I2C Adressen sind 7 Bit. Alle Verwirrung entsteht daraus, dass viele Leute den Wert des erste übertragenen Byes nicht von dessen Inhalt (u.a. der Adresse) unterscheiden können. Das erste Byte setzt sich zusammen aus dem R/W-Bit in Bitposition 0 und den 7 Adressbits in den Bitpositionen [1..7]. Nach I2C-Spezifikation gibt es nur 7-Bit oder 11-Bit Adressen. http://i2c2p.twibright.com/spec/i2c.pdf
Hi
>Ja, laut Datenblatt ist die i2c-adresse definitiv 0x29.
Lt.Datenblatt ist die Adresse, incl. R/W-Bit:
0 1 0 1 0 0 0 0
MfG Spess
Jim M. schrieb: > spess53 schrieb: >>> i2c_start_wait(0x29+I2C_WRITE); >> >> Wie kommst du auf die 0x29? > > Stimmt. Das ist mit 100%iger Sicherheit falsch, auch ohne ins Datenblatt > zu schauen. I2C Addressen werden gerne mal nur mit den führenden 7 Bit > angegeben, da muss man dann schon 2x lesen. Und wie man es auch rechnet, schreiben kann niemals eine ungerade Adresse sein... Jonas schrieb: > Ja, laut Datenblatt ist die i2c-adresse definitiv 0x29. Nein, bei dir ist es entweder 0x50 oder 0x52 beim schreiben. beim lesen ist die Adresse 0x51 bzw. 0x53.
Marc V. schrieb: > i2c_start_wait(0x29+I2C_WRITE); Vielleicht so? i2c_start_wait( (0x29<<1) + I2C_WRITE);
Jonas schrieb: > Ja, laut Datenblatt ist die i2c-adresse definitiv 0x29. Der Aufruf von i2c_start_wait() erwartet als Argument aber nicht die I2C-Adresse, sondern das komplette erst zu übertragende Byte. Marc V. schrieb: > Nein, bei dir ist es entweder 0x50 oder 0x52 beim schreiben. > beim lesen ist die Adresse 0x51 bzw. 0x53. Das, was du da angibst, sind nicht die Adressen, sondern das erste zu übertragende Byte, also Adresse in den Bits 1..7 und R/W im Bit 0.
Hi
Steht doch auch so im Datenblatt
>Example of an I²C write access to the BNO055 (i2c address in this case: 0101000b
=0x28)
MfG Spess
> Und wie man es auch rechnet, schreiben kann niemals eine ungerade > Adresse sein... Doch, denn Schreib- und Leseadresse sind ∗identisch∗ [0]:
1 | Data transfers follow the format shown in Figure 9. After the START |
2 | condition (S), a slave address is sent. This address is seven bits |
3 | long followed by an eighth bit which is a data direction bit (R/W) |
4 | [..] |
Mithin kann eine Schreibadresse auch ungerade sein sofern es ungerade Adressen überhaupt gibt (und ja, das tut es). Wie das Softwareinterface für i2c das handhabt (7-Bit-Adresse in den Bits 0-7 (so wie es sein soll) oder in den Bits 1-8 (pfui)) ist eine andere Geschichte. Nix für ungut. [0] Speckifikation [1] Kapitel 3.1.10 'The slave address and R/W bit' [1] http://www.nxp.com/documents/user_manual/UM10204.pdf
Jonas schrieb: > funktioniert aber trotzdem nicht :-( Dann nimm einen I2C-Scanner und gucke, ob dein BNO055 überhaupt irgendwo antwortet oder ob du ein Hardware-Problem hast. Du könntest dir auch mit einem Oszi mal die Pegel auf dem Bus angucken. Wolfgang schrieb: > Nach I2C-Spezifikation gibt es nur 7-Bit oder 11-Bit Adressen. Nur der Richtigkeit halber: Statt 11 muss es natürlich 10-Bit heißen.
Hi, ********************************************************/ /**\name I2C ADDRESS DEFINITION FOR BNO055 */ /********************************************************/ /* bno055 I2C Address */ #define BNO055_I2C_ADDR1 (0x28) #define BNO055_I2C_ADDR2 (0x29) schau mal hier: https://github.com/BoschSensortec/BNO055_driver/blob/master/bno055.h Gruß Kurt
Fehler gefunden: absoluter ANFÄNGERFEHLER. Die Taktrate des Avr war nicht im makefile korrekt eingetragen. Trotzdem Danke für die schnellen Antworten.
Wolfgang schrieb: > Das, was du da angibst, sind nicht die Adressen, sondern das erste zu > übertragende Byte, also Adresse in den Bits 1..7 und R/W im Bit 0. Hatten wir doch schon Hundertmal, das ist nicht der Punkt. Spess hat es ihm schon zweimal gezeichnet - Es wird 0x0101 0000 zum schreiben und 0x0101 0001 zum lesen gesendet. Du kannst das interpretieren wie es dir beliebt...
Jonas schrieb: > absoluter ANFÄNGERFEHLER. Die Taktrate des Avr war nicht im makefile > korrekt eingetragen. > Trotzdem Danke für die schnellen Antworten. Was hat das mit Hardware I2C zu tun ?
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.