Jain:
Start senden
warten bis start ist raus
return(TWSR & 0xf;
checken ob start korrekt rausgegangen ist (kann immer mal schief gehen, u.a. bei mehreren mastern)
Adresse senden
warten bis adresse draussen ist
return(TWSR & 0xf;
checken, ob adresse vom slave bestätigt wurde (ack)
Daten senden
warten, bis byte draussen ist
return(TWSR & 0xf;
checken, ob slave das byte mit ack bestätigt hat
Stopbedingung
geht einfach so, jedenfalls tu ich da nix mehr checken
Im Fehlerfall ein Stop rausschicken.
Im Anhang ein Beispiel mit ein paar kleinen Erweiterungen wie timeouts und der Versuch im Fehlerfall die Slaves etwas wachzurütteln. Geht mit Sicherheit schöner, aber tut so seit Monaten im Dauerbetrieb. Waitalittle() sind nur ein paar us.
Ach ja, zwischen einzelnen Nachrichten etwas warten kann nicht schlecht sein.
Lesezeichen