Forum: Mikrocontroller und Digitale Elektronik 3,3V Hardware betreiben an 5V Arduino


von Obs (Gast)


Lesenswert?

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.

von LOL (Gast)


Lesenswert?

Wie sieht es mit
Pegelwandler

aus? Nicht genug Infos? Nicht gesehen?

von Helge A. (besupreme)


Lesenswert?

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.

von Max H. (hartl192)


Angehängte Dateien:

Lesenswert?

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
von Sebastian W. (wangnick)


Lesenswert?

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

von Obs (Gast)


Lesenswert?

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

von Besserwisser (Gast)


Lesenswert?

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!

von asd (Gast)


Lesenswert?

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.

von San L. (zwillingsfreunde)


Lesenswert?

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

von Max H. (hartl192)


Lesenswert?

San Lue schrieb:
> Gibt genug von denen die 5V Tolerante
> Eingänge haben, aber 3V3 Speisung
z.B. den 74HC4050

von Harald W. (wilhelms)


Lesenswert?

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
von Sebastian W. (wangnick)


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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

von Helge A. (besupreme)


Lesenswert?

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