ATmega 32 I2C

Gast #4773020
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
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)
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
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
> 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
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.
Gast
Fehler gefunden:
absoluter ANFÄNGERFEHLER. Die Taktrate des Avr war nicht im makefile 
korrekt eingetragen.
Trotzdem Danke für die schnellen Antworten.
(Firma: Vescomp)
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.