Hallo zusammen, ich habe versucht einen ATTiny 25 als TWI-Slave (nur Datenempfänger) zu nutzen und bin zunächst kläglich gescheitert: der als Master genutzte ATmega48 hat entweder das ACK der Daten nicht mehr empfangen (ACK der Adresse funktionierte offenbar) oder hat einen allgemeinen Busfehler gemeldet. Also die AN 312 (Using the USI module as a I2C slave) konsultiert und gefunden, dass dort SCL-Pin des Tiny auf Ausgang geschaltet wird. Warum denn das, eigentlich ist das doch ein Eingang? Jedenfalls funktioniert es so, aber ich würde schon gerne wissen: warum? Vielen Dank, Thomas
Clock stretching. Wenn der Kleine noch nicht so weit ist, zieht er SCL in die Länge.
Verstehe ich das richtig? Der Tiny als Slave kann den eigentlich den Takt vorgebenden Master ausbremsen, dazu muss er aber die SCL Pin beeinflussen können. ... und trotz Schaltung als Ausgang kann der Pin als Eingang für das Taktsignal genutzt werden. Vielen Dank, Thomas
Ja! Genau das kann der. Das Stichwort ist "Alterate Port Functions" (-> Doku). Die ATmegas können so sogar externe pull-ups überflüssig machen. Beim ATtiny25 ist das aber nicht der Fall. Der hat beim PUOV (pull up override value) jeweils eine 0 stehen, erzeugt also niemals ein pull-up, wenn pull up override enable (hier USI_TWO_WIRE) 1 ist. Hier findest du auch die Begründung, warum das ganze funktioniert, wenn du den auf Output stellst: DDOV und PVOE sind von DDB2 abhängig. Die genaue Bedeutung kannst du im Datenblatt nachlesen. Tu dir den gefallen und ließ das mit den alternate port functions von vorne nach hinten durch...
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.