I2C-Reset Kategorie: I²C-Bus (von Thomas S. - 31.08.2011 8:54) | ||
| ||
Nachdem mir dieses Forum schon bei vielen Fragen weitergeholfen hat, möchte ich keine Frage stellen sondern einen Programmschnipsel beitragen den mit und vielleicht auch anderen bei Problemen mit der I2C-Schnittstelle weiterhilft. Die I2C-Schnittstelle der ProMega bleibt bei Störungen auf dem Bus oder falschen Pullup-WiederstĂ€nden gelegentlich "hĂ€ngen" wobei anschlieĂend keine vernĂŒnftige Kommunikation mehr ĂŒber die Schnittstelle möglich ist. Bisher konnte ich das Problem nur durch einen Reset des Moduls lösen. Nun schafft bei mir folgende kleine Basic Funktion Abhilfe: Sub I2C_Reset() If DirAcc_Read(0x56)<>4 Then DirAcc_Write(0x56,0) n++ End If End Sub Dabei wird das TWCR-Register des Mega32 Moduls abgefragt und bei einer Störung zurĂŒckgesetzt. Bei der Mega128 ist dieses Register bestimmt auf einer anderen Adresse als 0x56 aber das kann man in der Dokumentation des jeweiligen Moduls nachlesen. n++ ist eine ZĂ€hler mit dem man die HĂ€ufigkeit der Störung untersuchen kann und so Aukunft ĂŒber die "QualitĂ€t" seines I2C-Buses erhĂ€lt. | ||
Antwort schreiben Antworten: ![]() |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum