Forum: Mikrocontroller und Digitale Elektronik I2C Lesen mit takt woher?


von Franko P. (sgssn)


Lesenswert?

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ß

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

RTFdatasheet

Das sollte alles im Datenblatt stehen. Den Takt liefert immer nur der 
Master.

von EAF (Gast)


Lesenswert?

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

von Walter T. (nicolas)


Lesenswert?

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!

von Tautologe (Gast)


Lesenswert?

Full ACK!

Um I²C zu lesen muss man I²C lesen

:D

von Franko P. (sgssn)


Lesenswert?

:-(
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....

von Walter T. (nicolas)


Lesenswert?

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.

von EAF (Gast)


Lesenswert?

UM10204.pdf

von Walter T. (nicolas)


Lesenswert?

EAF schrieb:
> UM10204.pdf

Danke! Das hatte ich gesucht. Das ist für mich der Goldstandard in Bezug 
auf I2C.

von Stefan F. (Gast)


Lesenswert?

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.

von Franko P. (sgssn)


Lesenswert?

Tja, wird wohl so sein...

von Walter T. (nicolas)


Lesenswert?

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 Christoph db1uq K. (christoph_kessler)


Lesenswert?

von 2014 - gab es da noch keinen Mischbetrieb 3,3V/5V?
irgendwo hatte Philips auch noch die MOSFET-Schaltung für die 
Pegelumsetzung

von Jobst Q. (joquis)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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?

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

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

von EAF (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Gemeint war sicherlich: AN10441.pdf

Zweifellos auch sehr lesenswert.

von Walter T. (nicolas)


Lesenswert?

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.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

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
von W.S. (Gast)


Lesenswert?

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.

von Oliver S. (oliverso)


Lesenswert?

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

von Franko P. (sgssn)


Lesenswert?

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