Hallo habe mich gerade mit SPI rumgeschlagen, und hab jetzt ein Bauteil (RTC) mit I2C-Anschluss. Die Frage, die mich gerade beschäftigt, ist, wie lese ich als Master von einem Client? ich schicke die Adresse und danach den Lesebefehl, aber muss ich dann wie bei SPI auch ein Dummy-Byte schicken, damit der takt erzeugt wird, oder wie funktioniert das? Ist mir nicht klar. Hab schon mit I2C gearbeitet (DAC), aber da nur Daten gesendet und nicht gelesen... Danke und Gruß
RTFdatasheet Das sollte alles im Datenblatt stehen. Den Takt liefert immer nur der Master.
I2C ist sehr gut Dokumentiert. Warum liest du nicht diese Dokus? Hier wäre z.B. ein Anfang: https://de.wikipedia.org/wiki/I²C
Franko P. schrieb: > aber muss ich dann wie bei SPI auch ein Dummy-Byte schicken, > damit der takt erzeugt wird, Nein. Da Du nicht gleichzeitig lesen und schreiben kannst, darfst Du genau das nicht. Franko P. schrieb: > oder wie funktioniert das? Tu Dir einen Gefallen: Das "I2C Manual" von Philipps (AN10216-01) ist der Goldstandard und auch noch gut geschrieben. Gönn Dir den Inhalt!
:-( gerade das wollte ich mir sparen, ihr Spielverderber! Versuche gerade die alten PIC16-Routinen für meinen PIC18 umzuschreiben. Nur der kann soviel, entsprehend viele Seiten hat in der Doku der I2C-Teil....
Walter T. schrieb: > Das "I2C Manual" von Philipps (AN10216-01) Nachtrag: Hoppla, da habe ich etwas verwechselt. AN10216-01 war nicht das Gute. Da muss ich nochmal tiefer im Archiv tauchen.
EAF schrieb: > UM10204.pdf Danke! Das hatte ich gesucht. Das ist für mich der Goldstandard in Bezug auf I2C.
Franko P. schrieb: > gerade das wollte ich mir sparen, ihr Spielverderber! Schlechte Idee. I²C ist so "speziell" dass man um das lesen der Spec nicht umhin kommt. Also lies UM10204.
Stefan ⛄ F. schrieb: > Franko P. schrieb: >> gerade das wollte ich mir sparen, ihr Spielverderber! > > Schlechte Idee. I²C ist so "speziell" dass man um das lesen der Spec > nicht umhin kommt. Also lies UM10204. Zumal unnötig. Das User Manual ist so gut geschrieben, dass man es als Vorzeige-Muster für gute Whitepapers nutzen könnte. Vorn ein wenig Werbung, um die Marketing-Abteilung zufriedenzustellen, aber dann kommt eine mustergültige Doku.
von 2014 - gab es da noch keinen Mischbetrieb 3,3V/5V? irgendwo hatte Philips auch noch die MOSFET-Schaltung für die Pegelumsetzung
Franko P. schrieb: > ich schicke die Adresse und danach den > Lesebefehl, aber muss ich dann wie bei SPI auch ein Dummy-Byte schicken, > damit der takt erzeugt wird, oder wie funktioniert das? Nix mit Dummy-Byte. Den Takt muss der Master vorgeben auf SCL. Die Taktrate ist egal, solange sie nicht zu hoch ist. Mit der steigenden Flanke (loslassen auf Pullup) werden die Daten gelesen, beim Schreiben vom Slave, beim Lesen vom Master.
Christoph db1uq K. schrieb: > von 2014 - gab es da noch keinen Mischbetrieb 3,3V/5V? Das Dokument noch viel älter. 2014 war nur das letzte Update. Gemischter Betrieb wird an mehreren Stellen beschrieben, z.B. in Kapitel 3.1.1 Fig. 3. https://www.pololu.com/file/0J435/UM10204.pdf > irgendwo hatte Philips auch noch die MOSFET-Schaltung > für die Pegelumsetzung Ja, in eben diesem UM10204 Dokument, Fig. 36 ! Schläfst du noch?
Hallo zusammen. Alle wichtigen Dokumente sind erwähnt, angeführt, aufgelistet. Das grundlegende Protokoll sollte man schon verstanden haben. Ansonsten ist das nicht sonderlich aufregend. Schon vor mehr als 20 Jahren mit Bit Banging -> LPT programmieren unter WIN98 (Turbo Pascal 3 oder was auch immer) und ab auf das Testboard. Problemlos. 73 Wilhelm
Stefan ⛄ F. schrieb: >> irgendwo hatte Philips auch noch die MOSFET-Schaltung >> für die Pegelumsetzung > > Ja, in eben diesem UM10204 Dokument, Fig. 36 ! > > Schläfst du noch? Das Bild und der zugehörige Text behandelt ein anderes Thema... Gemeint war sicherlich: AN10441.pdf Vergleiche die Schaltungen, nachdem du ausgeschlafen hast.
Stefan ⛄ F. schrieb: > EAF schrieb: >> Gemeint war sicherlich: AN10441.pdf > > Zweifellos auch sehr lesenswert. Das ist aber immer noch eine DRAFT-Version. Seit 2007. Die Review-Prozesse bei NXP brauchen halt ihre Zeit. SCNR.
Ich hatte nach "3.3" gesucht, da kam nichts. Ich dachte, in der Appnote wären konkrete NXP-Mosfet-Typen genannt. AN97055 das wars, von 1997 https://www.datasheetarchive.com/AN97055-datasheet.html BSN10 BSN20 BSS83 BSS88
:
Bearbeitet durch User
Franko P. schrieb: > habe mich gerade mit SPI rumgeschlagen, und hab jetzt ein Bauteil (RTC) > mit I2C-Anschluss. Die Frage, die mich gerade beschäftigt, ist, wie lese > ich als Master von einem Client? ich schicke die Adresse und danach den > Lesebefehl,... Nö. Beim I2C adressiert man den Slave und legt zugleich die Transferrichtung fest. Es gibt da keinen Lesebefehl, wenn der Slave sowas nicht für seine internen Zwecke braucht. Bei sowas wie seriellen EEPROM's usw. ist es eigentlich immer nur ein vorheriges Setzen des Schreib- bzw. Lesezeigers. Im Grunde besteht jeder Transfer aus 3 Stufen: 1. Slave adressieren und Datenrichtung festlegen 2. Daten transferieren 3. End-Condition, d.h. Verbindung zum Slave wieder lösen Eigentlich ganz easy. Was da oftmals Probleme macht, sind die zumeist kruden Implementationen des I2C-Peripherie-Cores im µC. Manche sind strunzdumm und wälzen alle Logik auf einen Sack voll Interrupts ab und manche sind super-schlau, wollen alles ganz allein machen und nerven den Programmierer damit, daß sie zuvor die genaue Anzahl von zu transferierenden Bytes wissen wollen, bevor sie irgend etwas machen. Nach meiner Einschätzung gibt es unter den I2C-Cores nur ganz wenige, die wirklich gut sind. Also bereite dich mal auf Plan B vor, das heißt, das ganze Datengefummel per Software selbst zu machen. Das ist oftmals sogar einfacher und kürzer als das Benutzen eines widerspenstigen I2C-Cores. W.S.
Franko P. schrieb: > gerade das wollte ich mir sparen, ihr Spielverderber! Eiegtnlich sollte die Antwort zu deiner Frage auch im Datenblatt der RTC stehen. Das ist sicherlich kürzer als die I2C-Spec. Oliver
Da hast vielleicht Recht. Nur die uC sind ja nicht alle gleich. Bei der beschreibung von der SPI-Schnittstelle steht da z.B.. dass due zum Empfangen ein dummy-byte schicken musst. Nur im Datenblatt von dem PIC18F16Q41 steht bei I2C nix dazu, so als wäre eh klar. Auch in dem Datenblatt von dem PIC16F18877, mit dem früher mal gearbeitet habe, auch mit I2C, steht da nix. Nur habe da nur einen DAC betrieben und der Takt kam da eben, hab nicht gross darüber nachgedacht. Wenn ich jetzt aber einen Lesebefehl mache, bei dem PIC18F16Q41 lesen ich ja nur das EIngangsregister aus, löse aber keinen Lesetakt aus. Das erscheint mir da noch unklar. Also ich denke eher, dass das Geheimnis in der beschreibung der I2C-register liegt, aber da habe ich noch gefunden... Aber wird schon noch werden. hokus-pokus...usw Gruß
:
Bearbeitet durch User
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.