Hallo Leute,
ich muß zwei AVR auf verschiedenen Platinen zum Datenaustausch
verbinden. Problem ist, daß der Sender-AVR mit 5V läuft, der Empfänger
AVR mit 3,3V. Jetzt habe ich das Forum durchsucht und einiges gefunden,
bin mir aber unsicher:
1. Einfach verbinden, die Schutzdioden halten beim 3,3V AVR die 5 V
schon aus
2. in die RX/TX-Leitung einfach 2 Dioden in Reihe, der Spannungsabfall
reich
3. Levelshifter in die RX/TX einbauen, nur welchen kaufen als
Normalsterblicher?
Jetzt stellt sich die Frage, was am sichersten ist. Schaffen die
Schutzdioden die wirklich sicher die 5V? Oder verfälschen die Dioden
vielleicht die Datenrate und es kommt nur Müll beim Empfänger an?
Würde mich über hilreiche Ideen freuen, vielen Dank.
vollbrücke schrieb:> 1 K Serie in RX des Empfängers
Dann halten die Schutzdioden das aus ;-)
Von 5V zu 3.3V kann man auch einen Spannungsteiler verwenden.
Es kommt auch auf die Geschwindigkeit an. Wirklich sauber ist die Lösung
mit den Widerstände nicht. Man bewegt sich außerhalb der Spezifikation
und somit sind defekte nicht auszuschließen.
Eine einfache Lösung ist Logikgatter vor zuschalten das mit 3.3V
betrieben wird. Fast alle Gatter sind 5V tolerant und können in weiten
Betriebsspannungsbereichen betrieben werden.
Nicht benötigte Gatter können zum treiben von LEDs etc verwendet werden.
Um die 5V auf 3,3V runter zu bringen, nimm einen simplen 1k Ohm
Widerstand in Reihe. Oder (wenn du die ESD Dioden nicht belasten
möchtest) nimm Spannungsteiler:
1
1k 2,2k
2
Tx o----[===]---+---[===]---|
3
|
4
Rx
Das funktioniert mit und ohne den 2,2k Widerstand mindestens bis 115200
Baud einwandfrei.
Für die andere Richtung brauchst du nichts zu tun. 5V AVR's erkennen
3,3V Signale zuverlässig. Mehr als 115200 baud habe ich aber auch dort
nicht versucht.
Bei einer logischen 1 auf TxD sperrt die Diode und RxD erhält über den
Widerstand 3,3V als eine logische 1.
Bei einer 0 auf TxD ist Diode leitend, an RxD liegt die Flussspannung
der Diode an (0,7V) welches als 0 erkannt wird. Wem die 0,7V zu viel
sind, kann anstelle der 1N4148 auch eine BAT48 nehmen.
Hat (mit einer BAT48) getestet bis 230400 Baud funktioniert.
Ich sehe es schon kommen das der TO noch eine Leitung dazwischen haben
will wo die Kapazität nicht mehr vernachlässigbar ist. Dann kann man den
Vorschlag mit Widerstand vergessen. Je nach Übertragungsrate.
In der Praxis schon oft gesehen habe ich die Variante von Marco H. Und
Frank K. Mit Logik Gattern. Dann sollte auch das treiben eines (kurzen)
Leitungsstückes kein Problem sein.
Ja, auch die Variante mit der Diode hat bei mir nie Probleme gemacht.
Aktive level Shifter sind bei kurzen leitungen und "niedrigen" Baudraten
(wie 155200) in der Regel nicht notwendig. Schaden aber auch nicht.
Bei langen Kabeln würde ich definitiv aktive Levelshifter verwenden.
Eigentlich ist das ein Fall für den MAX232 bzw. Max3232.
Bei dem Wechselspiel aus Kabel und der hohen Impedanz des
Spannungsteilers (bzw Dioden/Widerstand Kombi) würde ich sonst starke
Signalverzerrungen erwarten.
okay....meine amateurhafte Meinung war: wenn es für Netzwerkdaten im
M-bit-Bereich gut ist, sollte es doch eigentlich auch für das bißchen
von mir gut sein...aber die Netzwerkhardware hat sicher noch
Verstärkerhardware, richtig?
Wenn du Softseriell nimmst von einem beliebigen zugewiesenen PIN ,
passiert nichts von TX 5 Volt zu RX 3,3 Volt. Du darst nur nicht die den
Festverdrahteten TX auf dem AVR nehmen wenn damit über USB eine
Übertragung mit TX stattfindet.
Gruss
Dass man 5V Ausgänge nicht an 3V Eingänge anschließen soll, ist wohl
klar.
@Peter
> Wenn du Softseriell nimmst von einem beliebigen zugewiesenen> PIN, passiert nichts von TX 5 Volt zu RX 3,3 Volt.
Du wolltest damit nicht das Gegenteil aussagen, oder doch? Ich verstehe
diesen Satz nicht.
Damit ist vllt gemeint dass die GPIO Pins 5V tolerant sind bei 3,3V
Betrieb. Das wäre mir allerdings neu.
Pegelwandler:
https://www.mikrocontroller.net/articles/Pegelwandler
Durch die extreme Einfachheit sollte man den Minimal-Pegelwandler mal
ausprobieren:
Beitrag "Re: 1 Transitor + 2 Widerstände = Verwirrung"
Klappt für I2C super, bei UART muss mans mal probieren. Kann auch sein
dass der die Schaltzeiten zu stark verändert.
Na denn...
Wenn du einen AVR hast, wo du das Flashen mit USB über TX0 machst soll
man den TX nicht an RX 3,3 Volt legen. Wenn du aber einen TX hast der
Softwaremäßig erzeugt wird an einem bestimmten PIN den man selber
festlegt, ist es total ungefährlich den TX an eine RX von 3,3 Volt
anzuschliessen.
Wenn du einmal die Spannung abtasten wirst von diesen TX, weißt du
warum.
Gruss
---------------
Dass man 5V Ausgänge nicht an 3V Eingänge anschließen soll, ist wohl
klar.
---------------
Das ist nicht meine Aussage für einen TX die du da falsch auslegst.
Mess die Spannung am Software-TX , der nicht in Verbindung mit USB
steht.
Ihr seit zuviel Theoretiker...
Gruss
Also wenn die Kopplung über ein Kabel erfolgt auch noch unsymmetrisch
würde ich dies über RS422/RS485 Linedriver laufen lassen. z.Bsp SN75176
für die 5V Seite.
Da leider die 3.3V Typen sehr rar und teuer sind würde ich wieder über
ein Logikgatter die Anpassung an die 3.3 GPIO erledigen. Somit ist auch
auf der 3.3V der SN75176 verwendbar.
Vorteil:
-symmetrisch
-störsicher
-billig
- funktioniert bis 1Mbit/s sicher bis über 100m bei 110 OHM Kabel und
Abschlusswiderstand
- fachlich korrekte Lösung
Wie gesagt Abschlusswiderstand am Empfänger nicht vergessen bei RS485
auf Anschaltung des Treibers beachten da sich die Busrichtung dreht.
Alternativ kann man auch über CAN Bus oder so nachdenken.
Prinzipiell kann ja auch auf beiden Seiten einen RS232 Linedriver
einsetzen nur die Kondensatoren für die Ladungspumpen benötigen sehr
viel Platz.
Da die Leitungen immer nur in eine Richtung gehen kann man das auch
einfach mit je einem Transistor machen.
Musst nur aufpassen das Du nicht invertierst.
Peter
@Peter
Die Ausgänge von AVR Mikrocontrollern haben bei 5V Spannungsversorgung
auch 5V Pegel. Es spielt keine Rolle, ob das ein Hardware-UART Pin ist,
oder durch Software gesteuerter Pin.
Wenn du einen 5V Ausgang an einen 3,3V Eingang anschließt, fließt ein
überhöhter Strom durch die ESD Schutzdiode des Eingangs in Richtung 3,3V
VCC. Dadurch kann die Diode kaputt gehen, wodurch wiederum der Eingang
nicht mehr vor ESD geschützt ist.
Außerdem kann sich die 3,3V Versorgungsspannung auf unzulässige Werte
erhöhen und dadurch weitere Bauteile beschädigen.
> Au mein Gott.... mess doch einmal die Spannung.
Danke, so werde ich nur selten genannt :-)
Wenn du am Ausgang nicht mehr als 3,3V gemessen hast, dann kann das nur
drei Gründe haben:
a) Deine angebliche 5V Schaltung wird gar nicht mit 5V Betrieben,
sondern mit 3,3V.
b) Dein Ausgang wurde so hoch überlastet, dass er nur noch 3,3V
erreicht. Mach das mit mehr als 5 Ausgängen gleichzeitig, und dein µC
wird kaputt gehen.
c) Dein Ausgang ist gar kein Ausgang, sondern ein Eingang mit Pull-Up
Widerstand. Dann wird er aber in den meisten Fällen nicht korrekt
funktionieren.
>Wenn du einen 5V Ausgang an einen 3,3V Eingang anschließt, fließt ein>überhöhter Strom durch die ESD Schutzdiode des Eingangs in Richtung 3,3V>VCC. Dadurch kann die Diode kaputt gehen, wodurch wiederum der Eingang>nicht mehr vor ESD geschützt ist.
deswegen soll ja kurz vor dem Empfänger-AVR (läuft mit 3,3V) ein 1k
Widerstand eingepflegt werden...oder ist das jetzt doch nichts für 3m-
Leitungslänge und 19200kps?
Ich würde auf jeden Fall einen Treiberbaustein in die seriellen
Leitungen einschleifen. Wenn irgendwas passiert, ist es einfacher, einen
5-Pinner zu wechseln als ein TQFP32 oder 64 oder so. Treiberbausteine
haben auch gröbere Silizium-STrukturen und sind daher auch robuster als
ein Mikrocontroller.
fchk
> oder ist das jetzt doch nichts für 3m- Leitungslänge und 19200kps?
Das kann ich nicht einschätzen, habe ich noch nie probiert. Einfach
Widerstände als Spannungsteiler habe ich nur bei sehr kurzen
Verbindungen innerhalb eines Gerätes probiert.
Die parallelen Drucker Interface vergangener Jahre hatten R/C Filter
drin, zum Beispiel aus 100 Ohm und 220pF. Ich schätze, dass die
Hersteller gerne auch 1k Ohm verwendet hätten, wenn das funktioniert
hätte.
Hast du ein Oszilloskop? Wenn ja, wäre das doch eigentlich der Moment,
es mal auszuprobieren. Mit dem konkreten Kabel, das verwendet werden
soll.