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
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.
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?
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
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...
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.
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 ;-)
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).
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?!
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.
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.
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
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.
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.
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.
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...
Stefan ⛄ F. schrieb: > Deine Zeichnung sagt was anderes. Korrigiere sie bitte. Kann ich das hochgeladene Bild nicht noch ändern oder löschen?!
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.
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.
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...
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
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.
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...
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.
Die Led verhindert das das Signal nach den 3k3 Low genug wird.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.