Forum: Mikrocontroller und Digitale Elektronik ATTINY 84 als Slave im Two wire mode


von Werner (Gast)


Lesenswert?

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?

von Sascha W. (sascha-w)


Lesenswert?

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

von Werner (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Werner (Gast)


Lesenswert?

Hallo Peter

Danke für den Tipp, habe USIWM0 auf 0 und USIWM1 auf 1 gesetzt. Leider 
mit dem gleichen Ergebniss.

von Sascha W. (sascha-w)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?


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
Noch kein Account? Hier anmelden.