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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren