Forum: Mikrocontroller und Digitale Elektronik PIC 18F: Probleme mit dem Timing bei I2C


von Bernd D. (bernddoe)


Lesenswert?

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
Noch kein Account? Hier anmelden.