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
I2C hat keine untere Taktfrequenz, man könnte theoretisch mit 0Hz arbeiten.
Hi es gibt einige Chips (meist AD-Wandler) die einen Mindesttakt verlangen. Aber die große Mehrheit verlangt das nicht. Matthias
Naja ein gewisser Mindesttakt am PIC muss ja sein, denn wenn ich mit 10 Hz Takte und ich bekomm über den Bus Informationen mit 100Khz kann ich die ja garnicht verarbeiten. Gibts da nicht ne grobe Richtlinie? Gruß Hannes
Hi na das betrifft die PIC Seite und nicht den Bus. Was dein PIC für einen Mindesttakt braucht um einen 100kHz I2C bedienen zu können wirst du in dessen Datenblatt finden. Es wird wohl mindestens ein Faktor 4 zum I2C Takt sein. Matthias
Vorausgesetzt, der PIC teilt den Takt nicht vor, brauchst Du mindestens die doppelte SCL-Frequenz (Nyquist). Mark
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).
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 !
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
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
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.