ATmega 32 I2C

Gast #4773020
Lesenswert?
• ▲
▼
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
Angehängte Dateien:
Gast #4773081
Lesenswert?
• ▲
▼
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
(Firma: Vescomp) #4773085
Lesenswert?
• ▲
▼
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.
Gast #4773093
Lesenswert?
• ▲
▼
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.
Gast #4773101
Lesenswert?
• ▲
▼
> 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
Gast #4773120
Lesenswert?
• ▲
▼
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.
(Firma: Vescomp) #4773138
Lesenswert?
• ▲
▼
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.