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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.