Forum: Mikrocontroller und Digitale Elektronik I2C Kommunikation zwischen uCs Master/Slave getrennte Vcc


von Marten M. (mcgonahy148)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,


Verständnisfrage zu I2C Kommunikation zwischen Atmega 2560 bzw. auf 
Basis des Arduino Bootloaders.

Ich habe einen I2C-Master, der über RS232-USB-Wandler mit dem PC 
spricht. Der Master spricht mit seinen Slaves.

1.) Ich kenn das Thema mit den Pullups, damit dieser nicht floatend 
sondern notfalls immer high ist:
https://www.nxp.com/docs/en/user-guide/UM10204.pdf

Allerdings habe ich getrennte PCBs, die 5V werden jeweils aus eigenen 
LDOs erzeugt aus z.B. 8V-Quelle.

Funktioniert das mit den Pullups dann nachwievor, weil ja die Controller 
unterschiedliche 5V-Quellen haben...

2.) Wenn die 8V-Quelle aus ist, der PC jedoch noch über den USB-RS232 
Wandler am Controler hängt, dann zeigt mir das Netzteil noch 1-2V an. 
Wie kommts? ÜBer die 5V vom USB und die Datenleitungen (auch hier sowas 
wie Pullups, Schutzdioden oä.)?


Es sei gesagt, ich hatte das Setup schon mal aufgebaut und es hatte 
funktioniert, allerdings kann ich es theoretisch nicht so 
nachvollziehen. Vielleicht sehen die Slaves die Pullups nicht, macht 
aber keine Probleme.

Was denkt ihr?


Gruß,
Marten

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> damit dieser nicht floatend
> sondern notfalls immer high ist:

Nicht "notfalls". Die Pull-Up Widerstände sind notwendig weil alle 
Ausgänge Open-Drain sind und daher nur auf GND ziehen können.

> Funktioniert das mit den Pullups dann nachwievor, weil ja die Controller
> unterschiedliche 5V-Quellen haben...

Ja

> Wenn die 8V-Quelle aus ist, der PC jedoch noch über den USB-RS232
> Wandler am Controler hängt, dann zeigt mir das Netzteil noch 1-2V an.
> Wie kommts?

Vermutlich hast du irgendwo weitere (nicht gezeichnete) Pull-Up 
Widerstände, die Spannung auf die Leitungen geben.

von Route_66 H. (route_66)


Lesenswert?

Wenn die GNDs verbunden sind und die Leitungslängen im cm-Bereich 
bleiben, sollte das funktionieren.
Probleme sehe ich, wenn bei Slave1 und/oder Slave2 die Betriebsspannung 
ausfällt. Wie sieht die Hardware dort aus, und könnte sie die restliche 
Kommunikation beeinträchtigen?

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:

>> Funktioniert das mit den Pullups dann nachwievor, weil ja die Controller
>> unterschiedliche 5V-Quellen haben...
>
> Ja

Das meine ich ja, es scheint zu funktionieren, aber der Pullup geht ja 
auf die +5V vom Master. Die +5V die den Slave1/2 versorgen wissen ja 
erstmal nichts von der anderen Quelle. Das verwirrt mich etwas.

Eigentlich habe ich keine weitern Pullups drin. An RX/TX an der 
Seriellen messe ich 3.3V und 3.1V.

Der RS232-USB-Wandler ist das Kabel: 
https://de.rs-online.com/web/p/products/6877786?cm_mmc=DE-PPC-DS3A-_-google-_-3_DE_DE_M_SEMIS_Exact-_-ftdi_chip%7Centwicklungskits_interface-_-ttl+232r+5v+we&matchtype=e&aud-260778816640:kwd-49063684794&gclid=EAIaIQobChMI7bavuf-V6wIVVpnVCh3vMA3pEAAYAiAAEgKOcfD_BwE&gclsrc=aw.ds

von Marten M. (mcgonahy148)


Lesenswert?

Route_66 H. schrieb:
> Wenn die GNDs verbunden sind und die Leitungslängen im cm-Bereich
> bleiben, sollte das funktionieren.
> Probleme sehe ich, wenn bei Slave1 und/oder Slave2 die Betriebsspannung
> ausfällt. Wie sieht die Hardware dort aus, und könnte sie die restliche
> Kommunikation beeinträchtigen?

Die Betriebsspannung kommt global aus den +8V, also wenn die aus ist, 
dann für alle PCBs.

Im Prinzip ist die HW bei allen 3 PCBs exakt gleich, nur dass der Master 
die Pullups auf "seine" +5V (nach dem LDO) hat. Der Rest ist exakt 
gleich.

Und der Unterschied, dass eben der Master das Serielle Kabel zum 
USB-Wandler und zum PC dran hat...

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Das meine ich ja, es scheint zu funktionieren, aber der Pullup geht ja
> auf die +5V vom Master. Die +5V die den Slave1/2 versorgen wissen ja
> erstmal nichts von der anderen Quelle. Das verwirrt mich etwas.

Wo der High Pegel her kommt, ist egal, solange die Schaltungsteile einen 
gemeinsamen Bezugspunkt (GND) haben.

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Marten M. schrieb:
>> Das meine ich ja, es scheint zu funktionieren, aber der Pullup geht ja
>> auf die +5V vom Master. Die +5V die den Slave1/2 versorgen wissen ja
>> erstmal nichts von der anderen Quelle. Das verwirrt mich etwas.
>
> Wo der High Pegel her kommt, ist egal, solange die Schaltungsteile einen
> gemeinsamen Bezugspunkt (GND) haben.

ok, gut...dachte es wäre wichtig bezogen auf seine eigene Vcc...ich 
streich das aus meinem Kopf, Bezug ist der GND..sonst nix ;-)

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Eigentlich habe ich keine weitern Pullups drin. An RX/TX an der
> Seriellen messe ich 3.3V und 3.1V.

Kann es sein, dass du I²C mit UART und UART mit RS232 verwechselst?

I²C ist ein völlig andere Übertragungsprotokoll als UART/RS232.

UART und RS232 senden im Ruhezustand aktiv einen High Pegel am Tx 
Ausgang. Woebi der High Pegel bei UART +3,3V oder +5V ist. Bei RS232 ist 
High jedoch -3 bis -15V (und Low ist +3 bis +15V).

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Vermutlich hast du irgendwo weitere (nicht gezeichnete) Pull-Up
> Widerstände, die Spannung auf die Leitungen geben.

Also ich messe 5...20MegR zwischen +8V und RX/TX pin, wenn das 
Wanderkabel abgezogen ist. Also ein Pullup erscheint mir das nicht. Aber 
irgendwas scheint da hochohmig verbunden...

Das muss doch dann im uC intern was sein?!

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> ok, gut...dachte es wäre wichtig bezogen auf seine eigene Vcc

Nein, der Bezugspunkt ist GND.

Low eine kleine Spannung über GND, und High ist eine hohe Spannung über 
GND. Die genauen Schwellwerte variieren je nach Mikrochip.

Was dich verwirrt hat ist wohl die Angabe in Datenblätter wo die 
Spannungspegel relativ zu VCC angegeben sind. Zum Beispiel High >= 
0,7*VCC.

Das ist schon korrekt so. Was genau Low und High ist hängt meistens von 
der Versorgungsspannung des jeweiligen IC ab, aber dennoch misst man die 
Spannungen relativ zu GND.

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Marten M. schrieb:
>> Eigentlich habe ich keine weitern Pullups drin. An RX/TX an der
>> Seriellen messe ich 3.3V und 3.1V.
>
> Kann es sein, dass du I²C mit UART und UART mit RS232 verwechselst?
>
> I²C ist ein völlig andere Übertragungsprotokoll als UART/RS232.
>
> UART und RS232 senden im Ruhezustand aktiv einen High Pegel am Tx
> Ausgang. Wobei der High Pegel bei UART +3,3V oder +5V ist. Bei RS232 ist
> High jedoch -3 bis -15V (und Low ist +3 bis +15V).

Ja, es ist etwas verwirrend, aber I2C und UART/RS232 verwechsele ich 
nicht.

I2C --> hierüber kommunizieren die uCs untereinander, das hat nix mit 
Seriell zu tun.

UART/RS232 --> ich geb dir recht, ich hab das fälschlicherweise 
verwendet. Der uC spricht UART über RX/TX. Über den USB-Wandler an den 
PC wird dann am Rechner ein COM-Port simuliert, glaub das nennt sich ja 
wieder RS232. :-) Verwirrung also komplett.

Also I2C interne Kommuniktion zwischen den uC`s und UART um in die 
Außenwelt zu kommunizieren am Master.

von Marten M. (mcgonahy148)


Angehängte Dateien:

Lesenswert?

Marten M. schrieb:
> Stefan ⛄ F. schrieb:
>> Vermutlich hast du irgendwo weitere (nicht gezeichnete) Pull-Up
>> Widerstände, die Spannung auf die Leitungen geben.
>
> Also ich messe 5...20MegR zwischen +8V und RX/TX pin, wenn das
> Wanderkabel abgezogen ist. Also ein Pullup erscheint mir das nicht. Aber
> irgendwas scheint da hochohmig verbunden...
>
> Das muss doch dann im uC intern was sein?!

Denn diese UART-Pins (RX/TX) gehen direkt vom Controller zum Stecker. Es 
ist lediglich noch ein Autoreset-Pin mit dran neben RX/TX, den man für 
den Arduino-Programmflash braucht, siehe Bild.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Also I2C interne Kommuniktion zwischen den uC`s und UART um in die
> Außenwelt zu kommunizieren am Master.

Das geht so nicht. Wie gesagt liefert der USB-UART Adapter an seinem Tx 
Ausgang einen aktiven High Pegel.

Wenn jetzt die anderen Baugruppen auf der selben Leitung I²C "sprechen" 
ziehen sie die Leitung auf Low und schon hast du da einen Kurzschluss. 
Der stärkere gewinnt.

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Marten M. schrieb:
>> Also I2C interne Kommuniktion zwischen den uC`s und UART um in die
>> Außenwelt zu kommunizieren am Master.
>
> Das geht so nicht. Wie gesagt liefert der USB-UART Adapter an seinem Tx
> Ausgang einen aktiven High Pegel.
>
> Wenn jetzt die anderen Baugruppen auf der selben Leitung I²C "sprechen"
> ziehen sie die Leitung auf Low und schon hast du da einen Kurzschluss.
> Der stärkere gewinnt.

Hm glaube du verstehst mich falsch... UART und I2C sind an dem Atmega 
komplett andere Pins, das sind HW-mäßig vorgesehene Pins, also nicht die 
selben IOs.

Das geht schon, schon probiert :-)

Aber wie gesagt, mir ist unklar woher die Spannung kommt wenn die 8V weg 
ist und nur noch USB vom PC dran hängt.

Ohne fundiertes Wissen - ich kann mir das nur erklären, dass über USB + 
den Wandler an RX/TX ein Pullup dran hängt. Da der uC aber auf seiner 
+5V-Seite in der Luft hängt, kommt da hochohmig etwas durch auf die 
+5V-Seite...und von dort dann über den LDO auf die +8V-Seite.

Da ist auf dem RX/TX-Pin auf meiner Platine kein Pullup und garnichts, 
nur zwei Leitungen auf den Controller vom Stecker.

Vermutlich ist die Antwort zu kompliziert, dann müsste man wissen was im 
dem USB-Wandler passiert und was in dem uC wenn dieser außer Spec ist an 
Vcc.

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Hm glaube du verstehst mich falsch... UART und I2C sind an dem Atmega
> komplett andere Pins, das sind HW-mäßig vorgesehene Pins, also nicht die
> selben IOs.

Deine Zeichnung sagt was anderes. Korrigiere sie bitte.

> Aber wie gesagt, mir ist unklar woher die Spannung kommt
> wenn die 8V weg ist und nur noch USB vom PC dran hängt.

Habe ich doch erklärt: Von dem Tx Ausgang des USB-UART Adapters.

Übrigens betreibst du den Mikrocontroller außerhalb seiner "Absolute 
Maximum Ratings". Bei 0V Spannungsversorgung darf an jedem Pin maximal 
0,5V anliegen. Du legst da aber wesentlich mehr. Wunder dich nicht, wenn 
dein Mikrocontroller bald kaputt ist.

> Da der uC aber auf seiner +5V-Seite in der Luft hängt,
> kommt da hochohmig etwas durch auf die
> +5V-Seite...und von dort dann über den LDO auf die +8V-Seite.

Nicht hochohmig, sondern ziemlich niederohmig durch die ESD 
Schutzdioden. Bei denen ist aber gar nicht spezifiziert, wie viel Strom 
sie vertragen. In einer Application Note wies Atmel mal darauf hin, dass 
man unter 1mA bleiben soll, ansonsten können sie kaputt gehen und dann 
liegen die betroffenen Pins ganz blank ohne ESD Schutz. Danach reicht 
eine simple Berührung mit dem Finger (wenn du geladen bist), um dem Chip 
den Todesstoß zu geben.

Mache mal zwischen USB-UART und AVR Mikrocontroller jeweils einen 3,3kΩ 
Widerstand in die beiden Leitungen. Dadurch begrenzt du den Strom. Das 
könnte als Seiteneffekt einen negativen Einfluss auf die maximale 
Baudrate haben.

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Deine Zeichnung sagt was anderes. Korrigiere sie bitte.

Verdammt, ja du hast Recht...das war zu schnell gezeichnet, das 
funktioniert natürlich nicht :-o

So langsam versteh ich das. Habe an der +5V Seite ca. 2,5V gemessen. An 
den TX/RX-Pins 3.1...3.3V. Das ist dann wohl die Vcc+0.6...0.8V was der 
Diodenspannung entspricht.

Du hast schon Recht irgendwie mit dem außer Spec, aber ich messe 2.5V 
auf der Vcc Seite. Kommt dieser Vcc-Anhebung dann von dem Strom, der 
über die Schutzdioden in die Schaltung fließt? Ist das nicht dann ein 
Henne-Ei-Problem? Annahme Vcc=0V, IO sieht aber Spannung bis z.B. 5V, 
Schutzdioden sprechen an ab 0.7V am IO...sie macht gut auf, der Strom 
fließt was was der USB-Wandler so hergibt (evtl. hat der nen Serien-R 
drin der begrenzt), die VCC wird von 0V auf 2.5V angehoben. Dadurch wäre 
aber dann ja wieder die Spannungsdifferenz zwischen IO-Spannung und Vcc 
wieder geringer, es stellt sich ein geringere Strom ein usw und 
sofort...

Es wäre aber sicher nicht schlecht in Serie vor die Ios noch 
Vorwiderstände zu legen, auch wenns für die Baudrate nicht optimal ist. 
Dadurch dass ich das aber schon lange so am Laufen habe ohne dass was 
kaputt ging, vermute ich dass hier irgendwo ein Widerstand drin ist oder 
Strombegrenzung, so dass es die Schutzdioden überleben...

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> Deine Zeichnung sagt was anderes. Korrigiere sie bitte.

Kann ich das hochgeladene Bild nicht noch ändern oder löschen?!

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Kommt dieser Vcc-Anhebung dann von dem Strom, der
> über die Schutzdioden in die Schaltung fließt?

Ja genau.

Wenn du jetzt mal zum Spaß eine große Last an die 5V Schiene hängst 
(sagen wir mal eine 5W Glühlampe), dann hast du fast einen Kurzschluss. 
Es könnte die betroffene ESD Diode duchbrennen, oder der Tx Ausgang 
deines USB-UART. Wenn du Glück hast begrenzt er den Strom auf wenig 
genug, dass nichts durchbrennt.

Die "Absolute Maximum Ratings" von AVR Mikrocontrollern lassen nicht zu, 
dass Strom durch die ESD Dioden fließt.

Bei manchen anderen Mikrochips ist angegeben, wie viel Strom die Dioden 
vertragen, da wäre so ein Szenario tatsächlich erlaubt - wenn der Strom 
diesen Maximalwert nicht überschreitet. Dabei sollte man aber auch 
bedenken, dass die "Absolute Maximum Ratings" nur so viel bedeuten wie 
"er geht nicht kaputt". Ob er unter diesen Bedingungen ordnungsgemäß 
funktioniert, ist damit nicht gesagt. Die Bedingungen für ordnungsgemäße 
Funktion findest du immer in den Tabellen darunter.

von Marten M. (mcgonahy148)


Lesenswert?

Stefan ⛄ F. schrieb:
> In einer Application Note wies Atmel mal darauf hin, dass
> man unter 1mA bleiben soll,

Stefan - findest du die AppNote noch?

Hab das mal mit 3k3 getestet, der Strom sollte jetzt knapp unter 1mA 
sein. Kommunikation scheint noch zu funktionieren.

von Marten M. (mcgonahy148)


Lesenswert?

Allerdings bekomm ich im TX mit 3k3 keine Kommunikation mehr zusammen, 
mit 1kR schon.

Im RX klappt es mit 3k3.

Oder es liegt an den Positionen, die 5mm unterschiedlich ist und die 
Reflexionen unterschiedlich stark zuschlagen...

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
>> In einer Application Note wies Atmel mal darauf hin, dass
>> man unter 1mA bleiben soll,
>
> Stefan - findest du die AppNote noch?

http://ww1.microchip.com/downloads/en/AppNotes/Atmel-2508-Zero-Cross-Detector_ApplicationNote_AVR182.pdf

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Allerdings bekomm ich im TX mit 3k3 keine Kommunikation mehr zusammen,
> mit 1kR schon.

Kann gut sein. Mit weniger Baudrate geht bestimmt auch 3,3kΩ. Es sei 
denn, da hängt noch was anderes an dem Pin (z.B. eine LED).

Ganz ehrlich: Ich gehe zu 95% davon aus, dass diese ESD Dioden mehr als 
1mA vertragen. Ich nehme auch immer 1kΩ. Aber das darf man hier nicht 
sagen, weil: ist ja außerhalb der Spezifikation. Vor allem, wenn man so 
wie ich quasi im selben Atemzug darum bittet, die Maximum Ratings 
einzuhalten.

von Marten M. (mcgonahy148)


Lesenswert?

Also mit 1kR im TX gehts mit 115200Baud.

Allerdings hab ich gesehen, dass der kritische IO der Pin für RX ist, 
dort fließt ein Strom über die Diode. Im TX-Pfad scheint kein Strom zu 
fließen. Aber ich kann schon nicht mehr annehmen dass die Schutzdiode 
noch funktioniert...also hätte ich überall gern einen Vorwiderstand drin 
zur Sicherheit.

Außerdem - vielleicht ist der Ausgangstreiber im uC am TX-Pfad viel 
schwächer wie der Treiber beim RX-Pfad (im USB-Wandler)? Sprich 
vielleicht kann der die 3k3 einfach nicht mehr treiben?!

Und ja...an TX und an RX hängen auch noch parallel LEDs dran...

von Stefan F. (Gast)


Lesenswert?

Marten M. schrieb:
> Außerdem - vielleicht ist der Ausgangstreiber im uC am TX-Pfad viel
> schwächer wie der Treiber beim RX-Pfad (im USB-Wandler)?

Die ATmega Controller haben eigentlich ziemlich starke Ausgänge. Im 
Kurzschlussfall fließen da typischerweise 30-50mA.

von Achim H. (pluto25)


Lesenswert?

Die Led verhindert das das Signal nach den 3k3 Low genug wird.

von Stefan F. (Gast)


Lesenswert?

A. H. schrieb:
> Die Led verhindert das das Signal nach den 3k3 Low genug wird.

Deswegen fragte ich bereits nach einer LED:

Stefan ⛄ F. schrieb:
> Mit weniger Baudrate geht bestimmt auch 3,3kΩ. Es sei
> denn, da hängt noch was anderes an dem Pin (z.B. eine LED).

Man kennt ja seine Pappenheimer.

von Marten M. (mcgonahy148)


Lesenswert?

Ja...verstehe, der Strom der LED lässt ordentlich Spannung abfallen an 
den 3k3 in der TX-Richtung...

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.