ATTINY 84 als Slave im Two wire mode

Gast #1675731
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?
Gast #1676472
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.
#1676509
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

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