Gast
#1161177
Hi zusammen, vorne Weg erstmal ein paar Infos. Ich will eine I2C Verbindung zwischen einem Atmega 168 (Arduino NG Board) und drei Attiny 25 herstellen. Für den Master benutze ich die Wire Library von Arduino und beim Attiny Slave verwende ich den Quellcode des Appnotes 312 von AVR (siehe Anhang). Eingestellt ist eine Bus-Frequenz von 400kHz. Die Kommunikation funktioniert auch grundlegend d.h. ich kann Daten senden und empfangen. Das Problem ist allerdings das sich der Master nach einiger Zeit bei der STOP Condition (in der Wire Library ist das die Funktion Wire.endTransmission()) aufhängt. Meine Frage ist es möglich das der Slave den Master nicht mehr an den Bus "ranlässt"? Oder liegt es eher am Master? Was ich schon versucht habe ist folgendes: - Bus Frequenz auf 100kHz runtersetzen - Delay von 500ms nach jedem Wire.endTransmission() eingebaut - Rückantworten von den Slaves ausgeschaltet - Andere Bibliotheken für den Master benutzt z.B. die von Peter Fleury. (Mit dieser konnte ich allerdings garnichts senden, hing schon bei der START Condidition) - Die beiden while Schleifen in der Funktion twi_writeTo(..) entfernt, leider auch ohne Erfolg - externe Pullup Widerstände benutzt - und sonst noch eher kuriose, sinnlose Versuche (wie garnicht die endTransmission() Funktion ausführen usw. ;) Kann es vielleicht daran liegen das die I2C-Nachrichten schnell hintereinander an die Slaves gesendet werden? (bei mir werden jedem Slave schnell hintereinander ca. fünf I2C Nachrichten von je einen Byte gesendet) Langsam bin ich mit meinen Latein am Ende. Hier würde echt ein Oszilloskop helfen. Leider hab ich kein zur Verfügung, somit kann ich euch kein Timing Diagramm anbieten. :( Gruss, Werner