I2C Slave Problem AVR

OP #1801069
Lesenswert?
• ▲
▼
Hallöchen,

ich habe hier eine Steuerungsplatine mit einem Atnega168, welcher als
Slave fungieren soll. Im Slave Receiver Betrieb.

Ich bekomm vom Master die Adresse und anschließend 3 Datenbytes. Das
funktioniert auch soweit ganz Prima. Ich schreibe mir die Bytes dann
nacheinander in ein Array.

Jetzt ist es aber so das, wenn ich ich mir die Bytes ausgeben lasse, das
erste Byte falsch ist. Byte 2 und 3 sind richtig. und ich weiß nich wo
mein fehler ist.
hier die ISR:
Achso hier das Acknowledge als Makro:

#define I2C_ACK
(1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC) 
;


interrupt [TWI] void twi_isr(void)
{
switch (TWSR)
    {
    case 0x80:
    i2cdaten[x] = TWDR;
    x++;
    break;

    case 0xA0:
    x = 0;
    twidatcomplet = 1;
    break;
    }

I2C_ACK;

}

Wird bestimmt nur ne kleinigkeit sein aber ich komm hier nicht weiter.
Schon einmal Danke für eure Mithilfe ;)

Herb
OP #1802772
Lesenswert?
• ▲
▼
huhu, keiner da der mir helfen kann???

achso, ich habe mir die Signale aufm Oszi angeschaut. Sind Ok, nur mein 
Slave checkt das erste der Bytes nicht. Ich weiß nur leider nicht was er 
einliest, da ich kein LCD an meiner Schaltung habe, ich las mir den 
Zusatnd nur über LED anzeigen.

Viel Grüße
OP #1803191
Lesenswert?
• ▲
▼
Das mit dem makro isn tippfehler da ich aufm anderen rechner geprogt 
habe;)
aber danke;)

In den unteren 3 Bits vom TWSR sind laut Datenblatt die Prescaler(Bit 1 
und 0) und eins (Bit 3) ist ungenutzt. Und die Hex Status codes sind für 
Prescaler = 0 angegeben. Deswegen scheint mir meine Umsetzung richtig zu 
sein.

Oder?
#1803204
Lesenswert?
• ▲
▼
Herb B. schrieb:
> aber warum
> sollte der Prescaler nicht null sein?

Das ist eine gute Frage, über die ich mir heute keine Gedanken machen 
will. Morgen will ich dann erstmal rausfinden, warum sich Peter Fleurys 
I²C-Mastercode bei mir manchmal in den while-Schleifen aufhängt.
Bin also gerade auch dabei, mir Atmels TWI-Interface näher 
anzuschauen...
OP #1803311
Lesenswert?
• ▲
▼
Also die Prescaler Bits sind wie gesagt nur Master relevant. Habe sie 
sicherheitshalber maskiert. Aber hat nix geholfen...
Ich werd hier noch bekloppt :)
Verstehe nicht warum der beim ersten Datenbyte nur mist einliest.
Der Master toggelt die ganze zeit das LSB im Datenbyte eins. Und das 
will ich ausgeben.
Allerdings leuchtet die Led nur wenn die Daten übertragen werden, oder 
sie bleibt an und wird wärend der Datenübertragung dunkler.... gut, die 
Info wird auch nicht helfen :)

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.