Hallo zusammen Ich bin gerade dabei die Kommunikation für einen ATTINY 84 zu programmieren. Der ATTINY soll dabei als Slave fungieren. Jetzt habe ich schon einige Beispiele gefunden und den Programmablauf habe ich (denke ich) verstanden. Das Problem. was ich habe ist folgendes: Vom Master (Aardvard I2C/SPI als Master) werden neun bits übertragen (sieben für die Slave-Adresse, eins für die R/W-Operation und das Ack-bit). Nun müßte ich als Slave, wenn die Adresse stimmt, während des Ack-bits die SDA-Leitung auf low ziehen. Und genau da liegt mein Problem. Die ISR für die Startbedingung wird durchlaufen. Ich sehe im Buffer die richtigen Werte für die Slave-Adresse und den R/W-Befehl. Ich schaffe es aber nicht die SDA Leitung auf low zu ziehen, bevor das Ack-bit vom Master gesendet wird. Selbst wenn mein erster Befehl (ausgeführt mit einem Makro) in der ISR für den USI_OVF ist, bin ich zu spät dran. Habe ich da was falsch verstanden, oder mache ich grundsätzlich was falsch?
Die Vorgenhensweise stimmt erst mal, wobei du vor dem setzten des ACK ja erst noch die Slave-Adresse mit deiner eigenen vergleichen musst. Wie schnell läuft denn dein ATTiny und wie hoch ist der I2C-Takt am Master eingestellt. Sascha
Hallo Sascha Die Taktfrequenz vom ATTINY ist 8MHz und der I2C Takt ist 400kHz. Die Adresse vergleiche ich direkt als erstes in der ISR für den USI_OVF. Ich habe gestern abend aber noch festgestellt, dass selbst wenn ich die SDA-Leitung noch vor dem Vergleichen der Adresse auf low ziehe, bin ich zu spät dran. Also denke ich, dass ich schon vorher ein Problem habe. Weiterhin habe ich die Flags USIWM0 und 1 auf high gesetzt, damit die SCL-line low gehalten wird.
Du mußt USI-Mode 3 nehmen, dann wird SCL auf low gehalten, solange das Overflowbit gsetzt ist. Und dann kannst Du bequem das SDA auf 0 setzen und danach das Overflowbit löschen. Natürlich muß der Master auch ein voll ausgerüstetes Standard-I2C haben, d.h. er darf erst weitermachen, wenn SCL = high ist. Peter
Hallo Peter Danke für den Tipp, habe USIWM0 auf 0 und USIWM1 auf 1 gesetzt. Leider mit dem gleichen Ergebniss.
nimm mal 100kHz, mit dem "soft"-TWI wird die Fequenz nur schwer oder garnicht zu erreichen sein. Ich hab's auf einem ATTiny44 mit 100kHz ohne Probleme am laufen . Sascha
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.