Forum: Mikrocontroller und Digitale Elektronik Serieller Signalpegel am Arduino UNO R3


von Daniel F. (dfens1)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich bin Neuling auf dem Gebiet und wundere mich über die Signale der 
Seriellen Schnittstelle am Arduino UNO. Ich gebe über Serial.print mit 
2400 baud, 8 Datenbits, 1 Stop-Bit und ohne Parity den Buchstaben "G" 
aus. Ich greife das Signal am Tx Pin des Arduino Uno ab, leite es ins 
Oszilloskop und lasse es dort dekodieren. Wie erwartet wird auch dort 
der Buchstabe G (ASCI 71) angezeigt. Und das Signal stellt ja den 
Binärcode dar. Also der erste "Drop" im Screenshot ist wohl das 
Startbit, dann 3 x HIGH, dann 3 x LOW, dann 1 x HIGH und wieder 1 x LOW. 
Zum Schluss geht es wieder 1 mal auf HIGH (StopBit) und bleibt dann auch 
so. Wäre also 11100010. Da LSB aber zuerst kommt, ist es in der 
richtigen Reihung und ohne Start und Stop-Bit also 01000111 (was wieder 
64+4+2+1 = 71 ergibt). Auch noch klar.

Nun zur Frage: Überall ist zu lesen, dass in einem seriellen Signal die 
0 mit Level HIGH und die 1 mit Level LOW dargestellt wird. Mein 
nagelneues Oszilloskop misst aber dort wo die 1er sind, ein HIGH Signal 
(+ 5V) und bei den Nullen ein LOW (Siehe Screenshot - der MessCursor 
steht auf einem HIGH Signal und links oben kann man sehen, dass es +5 
Volt sind, die da den 1er darstellen.

Arbeitet der Arduino mit einer anderen "Signalnorm" als Standard Serial 
? Ist mein schönes neues Oszilloskop schon kaputt ?
Nein - ich habe keine Polaritäten in den Menüs getauscht und auch der 
MessTaster ist richtig gepolt angeschlossen. Masseklemme an GND und 
Tastkopf an Arduino PIN 1 (Tx).

Kann mir da jemand ein wenig Licht in die Sache bringen ?
Danke Sehr im Voraus!

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Unterscheide zwischen TTL UART und RS232!

Daniel F. schrieb:
> Arbeitet der Arduino mit einer anderen "Signalnorm"
> als Standard Serial?

Nein! (wäre ja auch mehr als idiotisch)
Aber du sagst nicht welchen Standard du meinst.

Nachweis:
Wenn da was falsch laufen würde, dann könnte dein Oszi kein G erkennen.
Merkste?

von Joachim B. (jar)


Lesenswert?

Daniel F. schrieb:
> Nun zur Frage: Überall ist zu lesen, dass in einem seriellen Signal die
> 0 mit Level HIGH und die 1 mit Level LOW dargestellt wird.

1 muss nicht 5V bedeuten, 1 heisst nur aktiv
0 muss nicht 0V bedeuten, 0 heisst nur inaktiv

und am TTL vom µC ist es invertiert, weil ein Treiber das auch 
invertiert wie der MAX3232, so wird deine Polarität wieder "richtig"
Dein Oszi hat damit offensichtlich weniger Probleme als du.

Daniel F. schrieb:
> Überall ist zu lesen, dass in einem seriellen Signal die
> 0 mit Level HIGH und die 1 mit Level LOW dargestellt wird.

das stimmt auch, nur ob high 1 = 5V ist oder nicht bestimmt der Chip 
nach dem man sich richtet.
Genaugenommen hat 1/0 nichts mit 5V/0V zu tun, das kann auch +12/-12 
oder +5/-5 oder +5/0 oder +3,3/0 auch invertiert sein

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> 1 muss nicht 5V bedeuten, 1 heisst nur aktiv
> 0 muss nicht 0V bedeuten, 0 heisst nur inaktiv

Space und Mark, sind die Zauberworte.

von Günter Lenz (Gast)


Lesenswert?

von Daniel F. schrieb:
>Überall ist zu lesen, dass in einem seriellen Signal die
>0 mit Level HIGH und die 1 mit Level LOW dargestellt wird.

Das ist bei RS-232 so.

https://de.wikipedia.org/wiki/RS-232

Der Arduino gibt aber TTL aus, da ist 5V = ein 1Bit

Wenn du RS-232 haben möchtest, mußt du noch ein
MAX232 nachschalten.

https://www.ti.com/lit/ds/symlink/max232.pdf?ts=1600810308672&ref_url=https%253A%252F%252Fwww.google.com%252F

von Daniel F. (dfens1)


Lesenswert?

Ahhh... nun wird mir einiges klar. Hab grad mal ein wenig nach diesem 
TTL gegoogelt.
Dann bin ich mit der "anderen Signalnorm" gar nicht so falsch gelegen. 
Ist natürlich keine aber eben doch anders als RS232. War mir nicht 
bewusst dass es das.
TTL geht also mit den Spannungen bis 3,3 oder 5 Volt und seriell eben 
höher. Na gottseidank hab ich nicht das serielle Kabel an den Arduino 
direkt drangehängt...

Was mich nun noch wundert ist, dass das Oszi dennoch das "G" erkennt, 
obwohl es ja ein invertiertes Signal ist. Wenn es RS232 Standard wäre 
(wo HIGH = 0 und LOW = 1 ist) dann wäre das ja ein anderer ASCI Code.. 
Egal.. Ich denke das Oszi weiß es ohnehin besser als ich und ich hab es 
zumindest im Groben kapiert.

@Joachim: Du hast absolut recht. Im Gegensatz zu mir checkt das 
Oszilloskop alles. Ich bin echt von den Socken, was so ein Ding alles 
kann.

Danke Euch für die Tipps!

von Joachim B. (jar)


Lesenswert?

Günter Lenz schrieb:
> Wenn du RS-232 haben möchtest, mußt du noch ein
> MAX232 nachschalten.

wobei der MAX3232 nicht erst ab 4,5V arbeitet wie der MAX232 o.ä. 
sondern am Raspi und ESP auch schon bei 3,3V bis 5V.
Deswegen ziehe den MAX3232 dem MAX232 und ST232 vor!

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Daniel F. schrieb:
> Was mich nun noch wundert ist, dass das Oszi dennoch das "G" erkennt,
> obwohl es ja ein invertiertes Signal ist.

Es ist kein invertiertes Signal. Du musst nur an der richtigen 
Schnittstelle schauen. Dein Scope sieht ganz normal das 'G', wie es 
richtig binär codiert ist.
Das, was du meinst, taucht erst nach dem Leitungstreiber auf.

Dein µC gibt einfach ein serielles, asynchrones Signal aus mit Startbit, 
Datenbits und Stopbit, kein RS232-Signal, keine Invertierung.
Erst ein Leitungstreiber, z.B. der MAX232, passt das an die 
RS232-Spezifikation an. Dabei wird ein HIGH von deinem µC-Ausgang zu -5V 
... -15V, ein LOW zu +5V ... +15V am Ausgang des Leitungstreibers.
Da ist die genannte Invertierung versteckt. Blätter einfach mal das 
Datenblatt des genannten Treibers durch.

Wenn du z.B. µC und PC verbinden willst, wird in den (fast) immer ein 
Leitungstreiber notwendig sein (es könnte auch USB-UART-Teile geben, die 
direkt das serielle Signal verarbeiten). Im PC ist nämlich auch ein z.B. 
MAX232 verbaut, der eben Signale nach RS232-Spezifikation erwartet.
Willst du nur lokal (nur auf der Platine oder sehr kurze Leitungen) 
zwischen zwei µCs im Eigenbau kommunizieren, kannst du dir die 
Leitungstreiber sparen.

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> Willst du nur lokal (nur auf der Platine oder sehr kurze Leitungen)
> zwischen zwei µCs im Eigenbau kommunizieren, kannst du dir die
> Leitungstreiber sparen.

vom Atmel AVR mit 5V zum ESP32/Raspi mit 3,3V würde ich aber schon 
Pegelwandler einsetzen.

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Joachim B. schrieb:
> vom Atmel AVR mit 5V zum ESP32/Raspi mit 3,3V würde ich aber schon
> Pegelwandler einsetzen.

Ich sag mal: Pegelwandler <> Linedriver (RS232-Phy).
Die Verbindung zweier Logiksignale bei unterschiedlichen Logikspannungen 
ist ein ganz anderes Thema.

Es ging um die Beantwortung dessen, was Daniel misst:

Daniel F. schrieb:
> Nun zur Frage: Überall ist zu lesen, dass in einem seriellen Signal die
> 0 mit Level HIGH und die 1 mit Level LOW dargestellt wird. Mein
> nagelneues Oszilloskop misst aber dort wo die 1er sind, ein HIGH Signal
> (+ 5V) und bei den Nullen ein LOW

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> Die Verbindung zweier Logiksignale bei unterschiedlichen Logikspannungen
> ist ein ganz anderes Thema.

das stimmt und da hast du Recht und ich wollte das nur mal klarstellen:

HildeK schrieb:
> zwischen zwei µCs im Eigenbau kommunizieren, kannst du dir die
> Leitungstreiber sparen.

ich weiss ja Leitungstreiber != Pegelanpassung aber wer weiss wie dein 
Satz sonst hier aufgefasst wird.

wobei 2x MAX oder ein USB/Seriell auch nicht stört
vom Raspi/ESP32 mit MAX3232 zum PC oder zum AVR mit 5V incl. MAX3232 und 
Nullmodemkabel.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Joachim B. schrieb:
> wobei 2x MAX oder ein USB/Seriell auch nicht stört
> vom Raspi/ESP32 mit MAX3232 zum PC oder zum AVR mit 5V incl. MAX3232 und
> Nullmodemkabel.
Hier gehts um einen UNO, und um den am Raspberry anzuschließen, nimmt 
man ein USB Kabel.
Alles andere ist irgendwie irrational.

Es mag Ausnahmen geben, wenn es ca. 3m Abstand überschreitet.

von Joachim B. (jar)


Lesenswert?

Arduino Fanboy D. schrieb:
> Hier gehts um einen UNO

ach, na dann gilt ja der Satz nicht!
"Das gehört nicht hierher das ist Sache der Marine"
https://www.youtube.com/watch?v=qZwqKA3ZNC0

HildeK schrieb:
> Willst du nur lokal (nur auf der Platine oder sehr kurze Leitungen)
> zwischen zwei µCs im Eigenbau kommunizieren, kannst du dir die
> Leitungstreiber sparen.

oder was verstehst du unter 2 µC Eigenbau nicht?
soll ich es dir aufmalen oder willst du nur pöbeln?

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Joachim B. schrieb:
> oder was verstehst du unter 2 µC Eigenbau nicht?

Ich weiß, du meintest nicht mich mit dem Satz.
Die 2 µC habe ich als Beispiel ins Spiel gebracht; nur um anzudeuten, 
dass man auch ohne RS232-Phys kommunizieren kann. Nur eben üblicherweise 
nicht mit fertigen Geräten (PC, etc). Hätte ich vielleicht nicht tun 
sollen 😀 ...
Dem TO ging es lediglich um das Verständnis dessen, was sein Skope ihm 
anzeigt.

Arduino Fanboy D. schrieb:
> Hier gehts um einen UNO, und um den am Raspberry anzuschließen, nimmt
> man ein USB Kabel.

Mag sein, aber es ging hier nur um einen UART-Ausgang des Uno. Den RasPi 
hat Joachim B. ins Spiel gebracht - auch nur als Beispiel, dass man auf 
die Logikpegel achten muss.
Ich wollte doch nur verdeutlichen, dass man keinen Phy zwingend braucht, 
wenn man, beispielhaft und ganz allgemein, zwischen zwei µCs über UART 
kommunizieren möchte.
Dass es auch anders geht und vielleicht sinnvoller ist, steht außer 
Frage. Aber wenn ich zwei Tinys auf einem Board miteinander reden lassen 
wollte, dann würde ich sicher keinen USB-Anschluss verwenden ...

von Joachim B. (jar)


Lesenswert?

HildeK schrieb:
> Ich weiß, du meintest nicht mich mit dem Satz.

puh gut erkannt "schweiss von der Stirn wisch"

HildeK schrieb:
> Aber wenn ich zwei Tinys auf einem Board miteinander reden lassen
> wollte, dann würde ich sicher keinen USB-Anschluss verwenden ...

und ich vom ATmega8 zum PI RxTx TxRx brauchte eine Pegelanpassung

: Bearbeitet durch User
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.