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
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
Das ist mir aufgefallen: Dein Makro enthält nur einen Ausdruck. So allein auf einer Zeile macht der glaub keinen Sinn. Im TWSR solltest du die unteren 3 Bits ausmaskieren.
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?
Herb B. schrieb: > Und die Hex Status codes sind für > Prescaler = 0 angegeben. Deswegen scheint mir meine Umsetzung richtig zu > sein. Und was ist, wenn Prescaler mal nicht 0 ist, während du im switch steckst? Das hab ich heute im AVR Datenblatt oder im AppNote 315 gelesen, dass man den Prescaler für die Statusabfrage maskiert.
Ok, Interresant. Es ist schon spät und ich werd mir das morgn mal ansehen, aber warum sollte der Prescaler nicht null sein? Grüße
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...
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.