Forum: Mikrocontroller und Digitale Elektronik I2C mit AVR312 geht 2313, geht nicht 861A - Kennt das wer?


von Gerald L. (troet)


Lesenswert?

Hallo Ihr (hoffentlich) Wissenden!

Ich habe auf der Basis des AVR-Dokumentes AVR312 ein kleines Programm 
geschrieben, das einen ATtiny zu einem I2C-Slave machen soll. Genauer 
gesehen habe ich eigentlich nur den 312-Code geklaut ...

Als Master fungiert mir ein Arduino mit der dazugehörigen 
WIRE-Bibliothek. Wenn ich damit einen PCF8574 ansteuere, dann klappt das 
ganz prima, also scheint mein Master wohl zu funktionieren.

Wenn ich mein USI-Slave-Programm nun auf einen ATtiny2313 lade, dann 
klappt es auch, ich kann Daten vom Master zum Slave senden und danach 
per Abfrage wieder zurücksenden lassen. Wenn ich es aber auf einen 
ATtiny861A portiere, dann geht es nicht mehr. Obwohl der Code (abgesehen 
von den Konstanten) der gleiche ist, und obwohl die USI-Schnittstelle 
doch eigentlich die Gleiche sein sollte.

Es scheint irgendwie so zu sein daß der Overflow-Interrupt beim 861A nur 
ein einziges Mal ausgelöst wird, während er beim 2313 mehrmals ausgelöst 
wird. Es scheint so, daß das USIDR-Register beim 861A nicht das Byte 
enthält, das gerade auf dem Bus gesendet wurde.

Fällt dazu irgend jemandem etwas Sinnvolles ein? Zum Beispiel einen 
Hinweis, daß ich in den Datenblättern irgend einen Nebensatz übersehen 
habe, der einen gravierenden Unterschied zwischen den beiden USIs 
beschreibt, oder so?

Vielen Dank für Euere Kommentare.

Trööt!

: Verschoben durch User
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.