Forum: Mikrocontroller und Digitale Elektronik Wieso ändert der MAX3232 die Werte?


von Johannes D. (jhns)


Lesenswert?

Moin,

ich will nen Raspberry Pi B+ und nen Arduino UNO hotplug fähig über 
Seriell miteinander verbinden. Nach vielem suchen bin ich auf den 
MAX3232 gestoßen, welcher das angeblich möglichen machen soll, dass der 
Pi nicht jedes mal abraucht wenn man nen Arduino ansteckt :D
Schön und gut, heut sind 4 MAX3232 direkt auf kleiner Platine mit 
Kondensatoren von ebay gekommen. Angeschlossen, funktioniert und 
verwirrt...
Wenn man einen MAX3232 in die Verbindung macht ändert der die Werte 
immer, also aus 'a' wird 'O' Beispielsweise. Also viel probiert, wenn 
man am Pi RX und TX verbindet stimmt alles, beim Arduino genauso.

Also hab ich den MAX3232 getestet und am Arduino (da der unempfindlicher 
und billiger ist) einfach zwischen RX und TX geschlossen (natürlich auch 
GND und 5V angeschlossen). ==> Gleiches Problem wie zwischen Arduino und 
Pi: aus 'a' wird 'O' usw.
Dann jetzt wieder ewig gegooglet und irgendwie dann mal ausprobiert was 
passiert wenn ich das ganze nochmal durch den MAX3232 wieder 
zurückschleife und plötzlich kommt das richtige raus..

Aber wieso ändert der MAX3232 die Werte? Und ist mein Seriell dann 
wirklich hotplug fähig? bzw schützt der chip den Pi vorm abrauchen?

Danke
Johannes :)

von Max H. (hartl192)


Lesenswert?

Zeig mal wie du den MAX, Arduino und Pi verschalten hast...

von Peter II (Gast)


Lesenswert?

Johannes De schrieb:
> Aber wieso ändert der MAX3232 die Werte?
weil er für den Zweck vermutlich das Falsche Bauteil ist.

er Wandelt von UART zu TTL Pegel, PI und Atmel haben aber schon TTL 
Pegel, passen also direkt zusammen.


> Und ist mein Seriell dann
> wirklich hotplug fähig?
sollte kein Problem sein.

> bzw schützt der chip den Pi vorm abrauchen?
schutzwiderstände und eventuell ein paar Dioden verwenden man dafür.

von Nemo (Gast)


Lesenswert?

Peter II schrieb:
> PI und Atmel haben aber schon TTL
> Pegel, passen also direkt zusammen.
Hat der PI nicht 3.3V CMOS pegeln?

von Peter II (Gast)


Lesenswert?

Nemo schrieb:
> Hat der PI nicht 3.3V CMOS pegeln?

ja und Atmel's kann man auch mit 3.3V betreiben.

Wenn der UNO aber mit 5V arbeitet, braucht man einen Spannungsteiler. 
Oder 2 MAX232

von Nemo (Gast)


Lesenswert?

Peter II schrieb:
> Atmel's kann man auch mit 3.3V betreiben.
Dann hat dieser auch keine TTL Pegel.

von Peter II (Gast)


Lesenswert?

Nemo schrieb:
> Dann hat dieser auch keine TTL Pegel.

ok dann nennen wir es Logic-Pegel.

von Johannes D. (jhns)


Angehängte Dateien:

Lesenswert?

Max H. schrieb:
> Zeig mal wie du den MAX, Arduino und Pi verschalten hast...
Ich hab im Anhang mal 2 Schaltbilder: einmal raspi-max-uno und einmal so 
wie ichs jetzt rausgefunden hab uno-max-uno
Edit: Die Kondensatoren sind schon fertig auf den kleinen Platinen 
drauf, deswegen hab ich die jetzt nicht noch mit eingezeichnet.

Peter II schrieb:
> schutzwiderstände und eventuell ein paar Dioden verwenden man dafür.
Wie müsste ich das dann aufbauen und macht das wenn eh schon 2 MAX3232 
drin sind noch Sinn? Ich lern in der Schule leider nur bischen FlipFlops 
und ABEL, aber halt nichts was direkt jetzt mit Strom zu tun hat :D

Und ja, der Pi läuft mit 3,3V und der Arduino mit 5V.

So wie ich das jetzt gelesen hab ist die Möglichkeit mit den 2 MAX3232 
die beste, da ich eh 4 hab (http://www.ebay.de/itm/191269324967) und das 
ganze hotplug fähig sein muss.

Danke!

: Bearbeitet durch User
von Thomas W. (Gast)


Lesenswert?

Johannes De schrieb:
> Aber wieso ändert der MAX3232 die Werte?

Weil es ein RS232-Transceiver ist.

In Datenblatt auf Seite 1 siehst du das an dem Punkt im vereinfachten 
Schaltbild. Häng zwei hintereinander in die Leitung, dann paßt es 
wieder.

von Panorama (Gast)


Lesenswert?

So wie du es gezeichnet hast wird das nicht funktionieren.

Wie weiter oben schon erwähnt ist der MAX3232 ein RS232 Transceiver. 
Schau dir mal bei Wikipedia die Spannungspegel dazu an, die lassen sich 
nur sinnvoll mit einem weiteren MAX232 wieder einlesen. Auf keinen Fall 
funktioniert es direkt an einem IO-Pin, wenn die Ladungspumpen im MAX 
mehr Strom liefern könnten wäre dein Arduino jetzt auch hinüber.

Wieso verwendest du nicht die USB Schnittstelle, die ist doch 
Hotplug-fähig?
Damit könntest du sogar sofort reagieren sobald der Arduino angesteckt 
wird (udev).

von Johannes D. (jhns)


Lesenswert?

Panorama schrieb:
> Wieso verwendest du nicht die USB Schnittstelle, die ist doch
> Hotplug-fähig?
Weil das später direkt mit nem AtMega laufen soll, ohne Arduino UNO 
ausenrum.

Panorama schrieb:
> Damit könntest du sogar sofort reagieren sobald der Arduino angesteckt
> wird (udev).
Das hab ich z.Z. über einen weiteren Pin mit 3,3V gelöst, der beim 
angesteckten Stecker direkt an den Pi geht und dann mit GPIO-Listener 
abgefragt.

Gibts noch ne andere Möglichkeit das Hotplug-fähig zu bekommen?

von Helmut L. (helmi1)


Lesenswert?

Jeder RS232 Treiber (MAX3232) invertiert die Signal Logik, macht also 
aus einer 1 eine 0 und umgekehrt. Du must auf jeder Seite einen Treiber 
setzen dann stimmt auch die Signallogik wieder. Einer allein nuetzt nix. 
Auch kann er dir weil er hoehere Spannungspegel (+-10V) liefert dir 
deinen Eingang zerdeppern. Die Invertierung sieht man auch im 
Blockschaltbild des Treiber ICs da ist da ein Punkt oder Kreis 
vorhanden. Du hast ja selber schon rausgefunden das zwei hintereinander 
das Problem beheben. Das ist so gewollt und richtig, also bau den 2. ein 
und alles ist gut.

von Joachim B. (jar)


Lesenswert?

zur Ausgangsfrage, ein MAX passt die Pegel an die Übertragungsnorm an 
und dazu gehört num mal die Invertierung, ergo macht er nix falsch, er 
ändert auch nicht die "Werte" ausserhalb seiner Aufgabe.

Ich frage ja auch nicht wieso verhindert (Diesel)Sprit im (Benzin)Auto 
zügige Fahrt.

: Bearbeitet durch User
von Johannes D. (jhns)


Lesenswert?

Ok, vielen Dank :-)
Wo ist es dann am sinnvollsten die Hotplug-Verbindung hinzumachen?
1
UNO---MAX---/---MAX---Pi
oder
1
UNO---/---MAX---MAX---Pi
?
oder ist das egal? Bevorzugen würd ich nämlich zwischen UNO und MAX.

von Panorama (Gast)


Lesenswert?

Die sinnvollste Variante wäre #1
Damit hast du eine "echte" RS232 Verbindung zwischen den Geräten und 
kannst ggf. auch mal eine längere Leitung verwenden. Außerdem sind die 
MAX232-Ausgänge robust und haben interne Pullups.

von Georg (Gast)


Lesenswert?

Johannes De schrieb:
> Bevorzugen würd ich nämlich zwischen UNO und MAX.

Eine RS232C-Verbindung (Max-Max) ist per Design hotplugfähig, deine 
Version nicht, auch wenn da beim Rumfingern meistens nichts passieren 
wird - allerdings wenn doch ist der UNO hin.

Auch wenn Anfänger das oft nicht einsehen wollen, Normen haben schon 
ihren Sinn, besonders für externe Schnittstellen.

Georg

von Jobst M. (jobstens-de)


Lesenswert?

Johannes De schrieb:
> Wo ist es dann am sinnvollsten die Hotplug-Verbindung hinzumachen?
>
1
UNO---MAX---/---MAX---Pi

SO!

Und der MAX am UNO bekommt 5V, der am Pi bekommt 3.3V


Gruß

Jobst

von Joachim B. (jar)


Lesenswert?

Jobst M. schrieb:
> Und der MAX am UNO bekommt 5V, der am Pi bekommt 3.3V

und immer auf max3232 achten, nicht etwa das sich ein max 232 oder st232 
da reinmogelt.

von Max D. (max_d)


Lesenswert?

Du kannst TX vom pi direkt an RX vom arduino hängen, die 3.3V reichen 
damit der eine 1 erkennt (ab 2,7V ist das der Fall).
In die andere Richtung benutzt du einen Spannungsteiler. Ein Widerstand 
mit 47k von arduino-tx zu pi-rx und ein 91k von pi-rx zu gnd.

von Schaulus Tiger (Gast)


Lesenswert?

Das ist aber nicht hotplug-fähig. Wenn der Arduino ausgeschaltet ist, 
wird er aus dem TX-Pin des Pi mit 3.3V versorgt.

Also: schlechter Plan.

von Peter II (Gast)


Lesenswert?

Schaulus Tiger schrieb:
> Das ist aber nicht hotplug-fähig. Wenn der Arduino ausgeschaltet ist,
> wird er aus dem TX-Pin des Pi mit 3.3V versorgt.

was hat das ausschalten mit hotplug-fähig zu tun?

von Max D. (max_d)


Lesenswert?

Schaulus Tiger schrieb:
> Das ist aber nicht hotplug-fähig. Wenn der Arduino ausgeschaltet
> ist,
> wird er aus dem TX-Pin des Pi mit 3.3V versorgt.
>
> Also: schlechter Plan.

Dann schaltet man den pin auf low.

von mx (Gast)


Lesenswert?

Max D. schrieb:
> Dann schaltet man den pin auf low.

Im Ruhezustand hat der Ausgang eines UART aber nunmal high zu sein.

von Max D. (max_d)


Lesenswert?

mx schrieb:
> Max D. schrieb:
>> Dann schaltet man den pin auf low.
>
> Im Ruhezustand hat der Ausgang eines UART aber nunmal high zu sein.

Im Leerlauf-Betrieb aber wenn die Gegenseite abgeschaltet ist, dann kann 
man die UART auch ganz abschalten und dann den Pin selber low.

Mal ganz abgesehen davon, dass währen der Pi läuft der Verbrauch des 
AVRs im Vergleich ein Witz ist...

von Werner M. (Gast)


Lesenswert?

Peter II schrieb:
> was hat das ausschalten mit hotplug-fähig zu tun?

Die Eingangsschutzdioden dürfen meist nur mit 1mA belastet werden. Und 
dieser Wert wird überschritten, wenn auf der Leitung High liegt und am 
Empfänger-µC keine Versorgung anliegt.

von Peter II (Gast)


Lesenswert?

Werner M. schrieb:
> Die Eingangsschutzdioden dürfen meist nur mit 1mA belastet werden. Und
> dieser Wert wird überschritten, wenn auf der Leitung High liegt und am
> Empfänger-µC keine Versorgung anliegt.

das beantwortet aber immer noch nicht die Frage. Man kann einfach sagen 
das für das Hot-Plug immer beide Geräte eingeschaltet sein müssen.

von Max D. (max_d)


Lesenswert?

Wenn der Strom über die BodyDiode die Quelle für Sorgen ist, dann legt 
man noch 3k3 in Serie zwischen Arduino Rx und Raspi Tx, dann können 
nurnoch maximal 1mA fließen....

von Johannes D. (jhns)


Lesenswert?

Johannes De schrieb:
> UNO---MAX---/---MAX---Pi

Also ich hab das jetzt so aufgebaut und werde es heute testen.
Ich geb dann noch kurz Rückmeldung obs funktioniert.

danke :)

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.