Hi Community, ich hab folgende Situation: Ich habe einen Arduino Mega2560, der mit 5V arbeitet. Jetzt möchte ich den Arduino über UART mit einem externen Hardware-Element verbinden, das aber mit 3,3V arbeitet. Über den 3,3V Pin des Arduinos kann ich die externe Hardware zwar mit den benötigten 3,3V versorgen, aber wie kann ich die UART-Pins des Arduinos mit den UART-Pins der externen Hardware verbinden? Wenn ich es richtig verstanden habe, sollte es in Empfangsrichtung aus Sicht des Arduinos ja möglich sein, da die externe Hardware auf ihrem TX-Pin dann zwar maximal 3,3V anlegen kann, aber durch den internen Pull-Up-Widerstand am RX-Pin des ATmegas sollte die Spannung dann doch auf 5V gezogen werden, solange die externe Hardware das Signal nicht auf Masse zieht. Ist das so richtig? Wie sieht es in Senderichtung aus Sicht des Arduinos aus? Dort würde dieser ja dann auf dem TX-Pin auch 5V anlegen, was ja ohne weitere Maßnahmen wahrscheinlich nicht gut für meine externe Hardware wäre. Ich habe schon überlegt über einen Spannungsteiler mittels eines in Reihe geschalteten Widerstandes bzw. einer LED die Spannung entsprechend einzustellen. Würde das funktionieren und ginge es auch anders/einfacher? Vielen Dank schon mal.
Wenn es dir nur um serelle Kommunikation geht, schalte in der Senderichtung von 5V auf die 3,3V einen kleinen Widerstand dazwischen, z.B. 1kOhm. Was dein angeschlossenes Modul zurücksendet, wird erkannt werden.
Ich habe mal ein GPS Modul mit 3.3V an einen 5V µC angeschlossen. In Anhang die Schaltung. Gibt es bei Arduino eigentlich keine Möglichkeit den µC mit 3.3V zu betreiben?
:
Bearbeitet durch User
Hallo Obs, lies wirklich mal den Artikel über Pegelwandler. Zu deinen Fragen speziell noch folgende Anmerkungen (hoffentlich hilfreich :) Obs schrieb: > Wenn ich es richtig > verstanden habe, sollte es in Empfangsrichtung aus Sicht des Arduinos ja > möglich sein, da die externe Hardware auf ihrem TX-Pin dann zwar maximal > 3,3V anlegen kann, aber durch den internen Pull-Up-Widerstand am RX-Pin > des ATmegas sollte die Spannung dann doch auf 5V gezogen werden, solange > die externe Hardware das Signal nicht auf Masse zieht. Ist das so > richtig? Nicht ganz. Der TX-Ausgang der 3.3V-Hardware ist viel niederohmiger als der interne Pullup des Arduino. Nehmen wir mal an, der TX-Ausgang kann auch nur 3.3mA liefern, und hat also einen Innenwiderstand von 1kOhm. Der Pullup des Arduino liegt aber bei 20-50kOhm. Dann liegen am RX-Eingang des Arduino keine 5V an, sondern höchstens 3.3V+(5V-3.3V)/21kOhm*1kOhm = 3.38V. Aber auch 3.3V reichen schon ohne den Pullup aus, um vom Atmega2560 sicher als High erkannt zu werden (Datenblatt http://www.atmel.com/images/doc2549.pdf, 31.1 DC Characteristics, Vih Input High Voltage, Except XTAL1 and RESET pins, Vcc= 2.4V - 5.5V: Min 0.6Vcc (2); (2) "Min" means the lowest value where the pin is guaranteed to be read as high. 5V * 0.6 = 3V) Obs schrieb: > Dort würde dieser ja dann auf dem TX-Pin auch 5V anlegen, was ja > ohne weitere Maßnahmen wahrscheinlich nicht gut für meine externe > Hardware wäre. Richtig. Obs schrieb: > Ich habe schon überlegt über einen Spannungsteiler mittels eines in Reihe > geschalteten Widerstandes Ein in Reihe geschalteter Widerstand begrenzt den Strom durch die Schutzdioden der externen Hardware und wird wohl auch funktioneren. Er teilt aber nicht die Spannung, da der RX-Eingang der externen Hardware sehr hochohmig sowohl zu Vcc wie zu GND ist. Ein Spannungsteiler ist aber auch eine mögliche Idee. Obs schrieb: > bzw. einer LED die Spannung entsprechend einzustellen. Spannungsabfall über einer Diode funktioniert nur bei High 5V->3.3V, aber für 0V->0V fehlt dann noch ein Pulldown nach GND am RX-Eingang der externen Hardware, oder? Max H. schrieb: > Gibt es bei Arduino eigentlich keine Möglichkeit den µC mit 3.3V zu > betreiben? Es gibt Arduinos die mit 3.3V betrieben werden, aber die laufen mit 8MHz. Der Mega2560 wäre mit seinem 16Mhz-Quarz bei 3.3V nicht mehr in der "Safe Operating Area". LG, Sebastian
Hey! Vielen Dank schon mal für die Antworten. Ich komme mehr aus der Software-Ecke und bin ein ziemlicher Neuling was Elektronik betrifft. Ich habe mir mal den Pegelwandler-Artikel durchgelesen und hätte da noch ein paar Fragen zu: „3,3V -> 5V“: „3,3-V-Pegel werden bei TTL kompatiblen Eingängen richtig erkannt (Schaltschwelle 1,4 V).“ Was genau bedeutet TTL kompatible Eingänge? Bei einem ATmega hat man TTL kompatible Eingänge? Rein zum Verständnis was die Sache mit der LED angeht: Ich habe mir in dem Pegelwandler-Artikel die Schaltung mit dem Vorwiederstand angesehen (http://www.mikrocontroller.net/wikifiles/e/e0/Pw_vw_5-3.png). Mal abgesehen davon, dass die LED wohl keinen Innenwiderstand von 1kOhm hat, wieso kann ich statt des Widerstands nicht eine LED verwenden? Wie gesagt bin ich Elektronik-Neuling und ich dachte eine LED wäre auch nur ein Widerstand der leuchtet und durch den der Storm nur in eine Richtung fließen kann :D
Hi, den 3,3V-Tx-Ausgang Deiner externen Hardware kannst Du direkt auf den ATMEGA Rx-Eingang geben, der TTL-Kompatibel ist. Kleiner 0,4 V ist Low, größer 0,8 V ist ein high -> passt also. Den Tx-Ausgang des Atmegas musst Du über einen Spannungsteiler auf 3,3V runterteilen. Dieses Signal gibst Du dann auf den Rx-Pin Deiner externen Hardware -> fertig! Alternativ: Sollte Deine externe Hardware (die kenne ich leider nicht) eine Diode am Eingang gegen Vcc und eine gegen Gnd haben (wie viele uC), dann kannst Du auch Deinen Ausgang über einen Widerstand direkt auf den Eingang Deiner externen Hardware anschliessen. Der Widerstand begrenzt den Strom über die Diode, die an Vcc hängt. Ach ja: Wenn schon Pegelwandler, dann gleich RS232-Pegelwandler, falls Du mit einer Leitung die zwei verbindest. Das ist ja der eigentliche Sinn einer RS232-Verbindung. Viel Spass!
Besserwisser schrieb: > Kleiner 0,4 V ist Low, > größer 0,8 V ist ein high -> passt also. Stehen diese Werte irgendwo im Datenblatt? Ich finde in Atmels Datenblättern "Input Threshold Voltages" die für High knapp über V_CC/2 liegen und für Low knapp unter V_CC/2. z.B. http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet.pdf Seite 610f (ATMega88A) http://www.atmel.com/pt/br/Images/doc2545.pdf Seite 330f (ATMega88) http://www.atmel.com/images/doc8246.pdf Seite 222 (ATTiny2313A) Würde mich interessieren, da ich meine Schaltung bisher auf die verlinkten Werte ausgelegt habe.
Ein OR Gate könnte da auch helfen. Gibt genug von denen die 5V Tolerante Eingänge haben, aber 3V3 Speisung. An einen Eingang dein Signal, den anderen mit einem Widerstand an Masse. Fertig
San Lue schrieb: > Gibt genug von denen die 5V Tolerante > Eingänge haben, aber 3V3 Speisung z.B. den 74HC4050
Besserwisser schrieb: > TTL-Kompatibel ist. Kleiner 0,4 V ist Low, > größer 0,8 V ist ein high -> passt also. Das passt überhaupt nicht zu TTL. M.W. gilt da für TTL-Eingänge: L < 0,8V und H > 2,4V.
:
Bearbeitet durch User
Obs schrieb: > „3,3V -> 5V“: „3,3-V-Pegel werden bei TTL kompatiblen Eingängen richtig > erkannt (Schaltschwelle 1,4 V).“ Was genau bedeutet TTL kompatible > Eingänge? Bei einem ATmega hat man TTL kompatible Eingänge? TTL: Siehe Wikipedia. Atmega2560: TTL-kompatibel in dem Sinne, dass TTL-Bausteine und Atmegas direkt miteinander verbunden werden können. Die Atmega-Ports verhalten sich aber nicht genau so wie TTL-Ports. Wie sie sich verhalten siehe Datenblatt (oben in meinem Beitrag verlinkt und erläutert). Nur darauf darf man sich verlassen. Zum Beispiel ist die Schaltschwelle von 1.4V NICHT garantiert. Bitte §31.1 lesen!!! Obs schrieb: > ich dachte eine LED wäre auch nur > ein Widerstand der leuchtet und durch den der Storm nur in eine Richtung > fließen kann :D Erstens verändert eine LED wie jede Diode in Durchflussrichtung ihren Widerstand so, dass immer dieselbe Spannung abfällt. Zweitens sperrt eine LED wie jede Diode in Sperrrichtung, so dass eine bei High auf dem RX-Eingang deiner externen Hardware deponierte elektrische Ladung bei Low dann nicht nach GND abfliessen kann, und der RX-Eingang dann dauerhaft High bleibt... Besserwisser schrieb: > Ach ja: Wenn schon Pegelwandler, dann gleich RS232-Pegelwandler, falls > Du mit einer Leitung die zwei verbindest. Das ist ja der eigentliche > Sinn einer RS232-Verbindung. Den Aufwand, alles nach +-3..15V und zurück zu wandeln, würde ich nur bei langen Leitungslängen treiben ... LG, Sebastian
Obs schrieb: > ich hab folgende Situation: Ich habe einen Arduino Mega2560, der mit 5V > arbeitet. Jetzt möchte ich den Arduino über UART mit einem externen > Hardware-Element verbinden, das aber mit 3,3V arbeitet. Über den 3,3V > Pin des Arduinos kann ich die externe Hardware zwar mit den benötigten > 3,3V versorgen, aber wie kann ich die UART-Pins des Arduinos mit den > UART-Pins der externen Hardware verbinden? Für CMOS-ICs (Schaltschwelle bei 1/2 VDD) gilt allgemein: 3.3V -> 5V: 74HCT* oder 74AHCT*, mit 5V versorgt 5V -> 3.3V: 74LVC* oder 74AHC*, mit 3.3V versorgt Eventuell hat Dein 5V-IC eine TTL-kompatible Schaltschwelle, dann kannst Du direkt Dein 3.3V Signal auf den Pin geben. Manche 3.3V ICs haben 5V-tolerante Eingänge, dann kannst Du direkt Dein 5V-Signal auf den Pin geben. Schau ins Datenblatt! Ein universeller Pegelwandler ist der NC7SZ125: http://de.rs-online.com/web/p/puffer-linedriver-kombinationen/6709807/ Den findet man zB in einigen ISP/JTAG-Adaptern. Kann man immer mal wieder gebrauchen. fchk
Ohallo. 3-3,3V->5V funktioniert einfach so. Das paßt. 5V->3,3V einen 1k Widerstand zwischenschalten, in Reihe.
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.