Mindesttaktzahl für I²C?

OP #335547
Lesenswert?

Hallo,

ich hab mir ne kleine Testplatine mit einem PIC16F876A mit I²C
gebastelt. Soweit ist alles ok, aber beim senden eines I²C Bytes wird
das erste und das letzte Bit verschluckt, das heisst das ist immer 0.
Ich arbeite im 100KHz I²C Modus und hab einen 4MHz Takt am PIC. Ist das
zu wenig? Im Datenblatt hab ich nichts gefunden ob der Takt höher sein
muss?

Gruß

Hannes
Gast #335555
Lesenswert?

Unter ca. 1 KHz sollte man nicht gehen, da der Slave evt. einen
"Timeout" fehler unterstellt (bus stalled). Bei 100 KHz sind keine
probleme zu erwarten. Source code veröffenlichen! Und was ist der Slave
(µC code unbekannt, oder doch ein std. bauteil).
Gast #335556
Lesenswert?

Du betreibst den PIC als Master in der I2C-Kommunikation ?
Dann gibt er die Geschwindigkeit vor. Da ist es egal, wie schnell (oder
langsam) er ist ! (solange er nicht den maximale Schritttakt der Slaves
übersteigt).

Du hast die I2C-Kommunikation unter Verwendung der Hardware erstellt ?
Gut, da kann nicht viel schief gehen, poste den Code !

Du hast es in C zu Fuß programmiert ? Viel Spaß noch !

Gerne werden die Pullups in SCL und SDA vergessen !
Gast #335557
Lesenswert?

Mit zu hohen Pullups (20k) in einer Anwendung mit 100kbit/s, wurde der
I2C-Bus in einer meiner Anwendungen, auf 70 kbit/s ausgebremst
(Flankenverzögerung). Das habe ich jedoch erst am Oszi gesehen,
Störungen am I2C-Bus und Datenfehler traten jedoch nicht auf.

Zur Berechnung der Pullups gibt es ein Papier mit einem Graphen R in
Abhängigkeit der Frequenz, von Philips, irgendwas mit I2C
Spezifikationen, das ist dort downloadbar. Den Link habe ich jedoch
leider an meinem Arbeitsplatz und nicht hier.

Beim µController, bei mir der LPC2129 von Philips, läßt sich die
niedrigste Bitrate etwa ab 1 kbit/s einstellen.

Philips ist einer der I2C-Erfinder. Dort findet man auf jeden Fall noch
Informationen.

Gruß

Dietmar
OP #335558
Lesenswert?

Hallo,

Ich betreibe meinen PIC eigentlich im Slave Mode. Auf den Master habe
ich keinen Einfluss. Die Überschrift die ich gewählt hab ist
irreführend. Ich meinte nicht welchem minimalen Takt der I²C-Bus haben
muss, sondern welchen minimalen Takt mein Slave-PIC haben muss um auf
einem 100KHz I²C Bus lauschen zu können. Aber wenn das mit 4Mhz kein
Problem sein sollte, dann muss ich den Fehler vo anders suchen.

Im Anhang hab ich mal mein Assembler File angehängt. Nict irritieren
lassen von dem RxBuffer und TxBuffer ich will einfach auf jede Anfrage
255 zurücksenden, nur leider macht er das nicht. Sieht jemand einen
Fehler?

Gruß

Hannes
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren