Hallo! 1)Wie kommen die Status Codes in das TWSR? "Wer" schreibt die da rein? Sollte der Controller Anhand dessen was in TWBR steht die Status Codes aus einer art "Tabelle" auslesen: Wie unterscheidet der Controller ob grade ein SLA+W oder ein Data byte verschickt wird? 2) Was ist denn zu tun wenn ein NOT ACK "zurückkommt"? Was sollte denn eine "ERROR()" Funktion machen? Einfach noch mal "von vorne"? Wie macht man das "richtig"? Vielen Dank!
Attila Ciftci schrieb: > Hallo! > > 1)Wie kommen die Status Codes in das TWSR? "Wer" schreibt die da rein? > Na die Hardware. > Sollte der Controller Anhand dessen was in TWBR steht die Status Codes > aus einer art "Tabelle" auslesen: Ich versteh die Frage nicht wirklich. Im Datasheet zum AtMega8 hat Atmel doch einen schönen langen Absatz eingefügt, in dem im Detail (inklusive Code) die Vorgehensweise aufgeschlüsselt ist. Dort steht doch alles relevante. > 2) Was ist denn zu tun wenn ein NOT ACK "zurückkommt"? Das musst du entscheiden, wie du den Fall handhaben willst. > Was sollte denn > eine "ERROR()" Funktion machen? Einfach noch mal "von vorne"? Kommt drauf an. Wenn du denkst, der NOT_ACK ist nur deswegen aufgetreten, weil eine Störung auf den Leitungen vorgelegen hat, dann kannst du nochmal starten. Aber eigentlich sollte der Fall selten vorkommen. Je nachdem, wo der NOT_ACK auftritt, hat der eine andere Bedeutung. Wenn du einen Sensor anzusprechen versuchst, der einfach physikalisch gar nicht am Bus hängt, dann kannst du wiederholen so oft du willst. Wenn er nicht da ist, kann er auch nicht antworten und du wirst immer wieder einen NOT_ACK kriegen. In dem Fall wird es wohl das vernünftigste sein, den Benutzer darüber zu informieren, dass der angesprochene Teilnehmer am I2C Bus nicht erreichbar war. Dann kann der Benutzer mal nachsehen was überhaupt los ist. Vielleicht ist ja auch irgendwo einfach nur ein Kabel abgerissen. > Wie macht > man das "richtig"? Es gibt kein "richtig". Richtig ist, was du als richtig definierst.
Hallo Karl Heinz, vielen Dank für Deine Erklärung. Der Teil mit dem ERROR() ist sehr hilfreich. Jetzt habe ich zumindest eine Idee worum es bei einem NOT ACK überhaupt geht! Ja den TWI Teil habe ich natürlich gelesen dennoch habe ich einen "Knoten" beim Verständnis. Ich versuche es mal anders zu formulieren: Wenn ich ein START verschicke wo kommt dann die zu prüfende 0x08 her? (Tabelle 66) Sagt der Controller: "Da war ein (1<< STA) also tu ich mal 0x08 ins TWSR!" Ist das so?
Attila Ciftci schrieb: > Wenn ich ein START verschicke wo kommt dann die zu prüfende 0x08 her? > (Tabelle 66) > Sagt der Controller: "Da war ein (1<< STA) also tu ich mal 0x08 ins > TWSR!" Ist das so? Im Prinzip: ja. Genau so ist das.
Hallo, habe da auch mal eine Frage zum NACK. Müsste um einen Read zu beenden an den Slave ein NACK senden. Weiß jemand welche Register dazu gesetzt werden müssen im ATMega32? Gruß Alex
Hi Dafür ist Bit 6 – TWEA: TWI Enable Acknowledge Bit in TWCR zuständig. MfG Spess
Hallo Spess, ja Bit 6 ist das Acknowledge Bit. Aber was ist NACK? Das hab ich bisher nicht verstanden. Gruß Alex
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.