Forum: Mikrocontroller und Digitale Elektronik Raspberry liest via I2C (TWI) nur jedes 2. Byte vom ATmega


von McLovin (Gast)


Lesenswert?

Hallo,

ich benutze am ATmega8 die TWI-Slave-Bibliothek von Manfred Langemann 
und habe den folgenden Code:
1
TWIS_Init(15, 100000);
2
3
while (1) {
4
  TWIS_Write(0x00);
5
  for (int i = 0; i < 8; i++) {
6
    TWIS_Write(i);
7
  }
8
  TWIS_Stop();
9
}

Mittels
1
i2cdetect -y 1
am Raspberry wird der Chip auch korrekt erkannt und ich kann Bytes 
lesen, jeweils einen mit dem Befehl
1
i2cget 1 0x0f
Allerdings kommen die Bytes in der folgende Reihenfolge an:

0, 2, 4, 6, 0x1f (???), 1, 3, 5, 7

Bis auf die 31 (0x1f) zwischendrin und die fehlende 0 (es sollten ja 
eigentlich zwei Nullen sein) also die korrekten Bytes, allerdings in 
seltsamer Reihenfolge. Meine Vermutung wäre ja, dass die Clocks nicht 
korrekt synchron laufen, aber dagegen spricht, dass ich die Daten 
jedesmal zuverlässig lesen kann, nur nicht in der korrekten Reihenfolge.

Hat jemand eine Idee, warum dieses seltsame Verhalten auftritt bzw. wie 
ich das abstellen kann? Oder auch, wo die 0x1f her kommt?

Vielen Dank!

von McLovin (Gast)


Lesenswert?

Kurzes Update, was ich jetzt schon probiert habe:
- Beim Kernel-Modul i2c_bcm2708 die Baudrate auf 23.000, später 10.000 
zu setzen
- Im ATmega die Frequenz auf 10.000 Hz zu setzen
- Die I2C-Daten mittels selbst geschriebenem Programm (mittels 
WiringPi-Lib) zu lesen

Bislang alles ohne Erfolg.

Falls noch jemand eine Idee hat, gerne her damit!

von McLovin (Gast)


Lesenswert?

Ich habe das Problem gelöst, indem ich auf die Bibliothek

http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html

umgestiegen bin. Damit klappt jetzt alles einwandfrei!

von McLovin (Gast)


Lesenswert?

Ich habe noch eine kurze Zusammenfassung geschrieben: 
Beitrag "Raspberry Pi und AVR verbinden mittels I2C/TWI"

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.