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?
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!
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
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.
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