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.
Max schrieb: > 3. Levelshifter in die RX/TX einbauen, nur welchen kaufen als > Normalsterblicher? 74LVC1T45. http://www.diodes.com/_files/datasheets/74LVC1T45.pdf funktioniert sicher für beliebige VccA,VccB mit 1.8V<VccA<5.5V und 1.8V<VccB<5.5V.
:
Bearbeitet durch User
Sender TxD 5V auf 3,3V RxD Empfänger
1 | 3,3V |
2 | ^ |
3 | | |
4 | | |
5 | / |
6 | \ 1,8k |
7 | / |
8 | | |
9 | | |
10 | TxD o---|<----*------O RxD |
11 | |
12 | 1N4148 |
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.
Okay, das habe ich vergessen: 3m über Cat-6 und bei 19200bps
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?
Probier es aus - hängt sehr vom kabel ab. Wenn es zuverlässig sicher klappen soll, dann nimmt die richtigen treiber-IC's.
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
------------- Und warum nicht? ------------- Au mein Gott.... mess doch einmal die Spannung.
@peter Was du von Dir gibst, ist schlicht kaum zu verstehen.
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.
:
Bearbeitet durch User
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.
@ Peter schon verstanden wie Schnittstellentreiber funktionieren und wozu sie da sind? Auch den Unterschied zwischen symmetrisch und unsymmetrisch?
>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.
Das ist alles noch in der Planung;) Daher ist noch nichts vorhanden...also wohl doch den sicheren Weg über Treiberbaustein...
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.