Ich habe ein Problem mit I2C, villeicht kann jemand helfen: Ich betreibe einen PIC 18F2321 mit 18,432MHz (der PIC soll auch eine RS232 bedienen, daher die krumme Frequenz) der mit einem andern PIC 16F und EEPROM's reden soll. Den I2C-Code habe ich dem AN 989 und dem Web-Seminar I2C-Master Mode entnommen, mit SADD 0x0A für 400 kHz Bustakt. PIR1,SSPIF wird zur Zeitsteuerung verwendet. Das Programm macht in der Testphase nichts anderes als Start setzen, 10 Werte auf den Bus zu schreiben, Stop und wieder von vorne. Ich beobachte den Bus mit dem PICkit Serial Analyzer. Im MPLAB Einezelschritt und animiert funktioniert alles tadellos. Die Bit's der Register schalten genau so wie sie sollen, SCL und SDA verhalten sich nach dem Analyzer korrekt, die Daten werden korrekt übertragen. Mit einem Break klapt auch alles. ABER: Wenn das Programm in Echtzeit läuft wird die Stop-Bedingung vom Analyzer nicht mehr erkannt. Nur wenn der Takt auf ca. 40 kHz abgebremst wird (SADD 0xC0) werden die Daten korrekt übertragen. Oder ich warte nach dem Stop ca.300µs (2x 255 Schleife). Leider habe ich kein geeignetes Oszi um zu schauen, ob das Stop tatsächlich gesendet wird oder nicht. Pul-Up zwischen 1k und 2k zeigen keinen Einfluss auf das Verhalten. Am Bus hängen 4 Elemente, 2xPIC und 2x EEPROM. Hat irgend jemamnd eine Idee wo der Fehler liegt? Oder hat der I2C eine Art Tot-Zeit? Ziemlich ratlos Bernd
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.