Hallo Leute,
versuche seit einiger Zeit TWI per USI am ATTiny 2313 zum Laufen zu
bringen. Bin schon kurz davor auf Bit banging zu wechseln, da die
Vereinfachung per USI nur gering zu sein scheint (vor allem als Master).
Und es funktioniert nicht. Also Start und Stop bekomme ich hin. Ich kann
mitlerweise sogar das erste Byte ausgeben. Seit dem ich das aber so weit
habe, dass ein ACK vom Slave zurückkommt, geht danach gar nichts mehr.
Das ACK setzt nämlich SDA auf L und da bleibt es dann auch. Schon nach
dem Senden des ersten Bytes ist USIDC im USISR gesetzt (da habe ich
ACK/NACK noch gar nicht ausgewertet). Sende ich Daten, die kein ACK
ergeben, passiert das nicht und ich kann auch ein zweites Byte senden.
Jetzt setze ich auch das Schieberegister von Hand weiter, aber
eigentlich müsste das per SCL passieren (USICS1:0 = 1). So könnte man
auch ACK und NACK darüber generieren bzw. einlesen. Das funktioniert
aber bei mir gar nicht.
Was auf dem Bus passiert haben ich mit Logicanalyzer verfolgt.
Systemtakt ist 7,37MHz.