Forum: Mikrocontroller und Digitale Elektronik UART Empfang ohne Stopbit


von Elolehrling (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag

Ich will den Ursprung meines Problemes garnicht lange geschreiben, da es 
ziemlich kompliziert wäre.

Kurz gesagt:
Ich arbeite an einem M-Bus Master und habe ein kleines Problem beim 
Empfang der Antwort.

Eine Antwort eines M-Bus Slaves sieht folgendesmassen aus:

Startbit: 1
Gefolgt von 8 Datenbits
Stopbit: 0

Genau dieses Stopbit wird mir beim Empfang zum Problem. Wie bereits 
erwähnt ist dieses Stopbit im Gegensatz zu vielen anderen arten der 
Kommunikation eine Logische 0, und nicht eine 1.

Im Anhang findet ihr ein Bild von der Anwort welche ich zurzeit Empfange 
beziehungsweise eben nicht Empfange, denn mein Master interpretiert das 
fehlende Stopbit als Leitungsbruch.

Nun meine Frage:
Gäbe es eine möglichkeit, mit einem uC über UART die Daten einzulesen 
ohne Stopbit? Dass ich sogesehen von Slave -> uC -> Steuerung Empfange.

Das ganze hört sich etwas verwirrend an, ich möchte an der Stelle auch 
nicht gross weiter drauf eingehen. Meine frage ist es lediglich, ob es 
möglich wäre diese Daten in einen uC einzulesen ohne das Stopbit.

Sprich dieses:
Start "1" | 8 Datenbit | Stopbit "0"

Soweit ich mich einlesen konnte, erwartet ja auch die UART Schnittstelle 
eines uC's ein Stopbit "1".

Ich hoffe, die frage ist verständlich formuliert, leider nicht ganz 
einfach mein Problem in Worte zu fassen.

Ich danke bereits jetzt für jeden Tipp den ich erhalte und stehe 
natürlich für Fragen zur Verfügung.

Freundliche Grüsse
Elolehrling

von Peter D. (peda)


Lesenswert?

Elolehrling schrieb:
> Startbit: 1
> Gefolgt von 8 Datenbits
> Stopbit: 0

Dann ist das Signal invertiert.
Eine UART sendet:
Startbit: 0
Gefolgt von 8 Datenbits
Stopbit: 1

von Mikki M. (mmerten)


Lesenswert?

Bei Standard UART Kommunikation ist das Startbit "0" und die Stopbits 
"1"
daher einfach nur alles einmal invertieren und fertig.

von Elolehrling (Gast)


Lesenswert?

Dann habt ihr wohl die Frage falsch verstanden.

Das Empfangene Telegramm von:
Startbit: "1"
8 Datenbit
Stopbit: "0"

kommt NICHT von einer UART Schnittstelle!!! Das ganze basiert auf einem 
M-Bus Protokoll von welchem ich lediglich die Pegel umgewandelt habe um 
sie theoretisch mit einem uC Empfangen zu können.

Das ganze lässt sich also nicht einfach invertieren, die Richtung stimmt 
so schon.

von Karl H. (kbuchegg)


Lesenswert?

Elolehrling schrieb:
> Dann habt ihr wohl die Frage falsch verstanden.

nicht wirklich. Du hast die Antwort nicht verstanden.

Hardwaremässig dein Eingangssignal invertieren.

> kommt NICHT von einer UART Schnittstelle!!! Das ganze basiert auf einem
> M-Bus Protokoll von welchem ich lediglich die Pegel umgewandelt habe um
> sie theoretisch mit einem uC Empfangen zu können.

Ja.
Und wenn du den Pegel nochmal umdrehst und an die UART gepflogenheiten 
anpasst, dann kannst du die UART verwenden. Sonst kannst du ganz einfach 
die UART nicht verwenden. Punkt.
Im empfangenen Datenbyte die Bits nachher nochmal im Programm umdrehen 
ist ja nicht das große Problem.

: Bearbeitet durch User
von Faultier (Gast)


Lesenswert?

>Das ganze lässt sich also nicht einfach invertieren, die Richtung stimmt
>so schon.

Und warum lässt sich das nicht invertieren?

von Thomas E. (thomase)


Lesenswert?

Elolehrling schrieb:
> Dann habt ihr wohl die Frage falsch verstanden.
>
> Das Empfangene Telegramm von:
> Startbit: "1"
> 8 Datenbit
> Stopbit: "0"
>
> kommt NICHT von einer UART Schnittstelle!!! Das ganze basiert auf einem
> M-Bus Protokoll von welchem ich lediglich die Pegel umgewandelt habe um
> sie theoretisch mit einem uC Empfangen zu können.
>
> Das ganze lässt sich also nicht einfach invertieren, die Richtung stimmt
> so schon.

Dann hast du wohl den UART nicht verstanden.

Wenn du ein Problem mit Stopbit = 0 hast, hast du auch ein Problem mit 
Startbit = 1. Damit ein UART das richtig empfängt, muß Startbit = 0 und 
Stopbit = 1 sein.
Also invertiere das Signal. Damit die Daten dann wieder passen müssen 
die im Controller dann nochmal invertiert werden.

Sofern du nicht auch ein Problem mit der Datenreihenfolge hast. Also 
Highbit statt Lowbit first. Dann musst du das auch noch umdrehen.

mfg.

: Bearbeitet durch User
von Elolehrling (Gast)


Lesenswert?

Okay, jetzt verstehe ich was mit dem invertieren gemeint war. Das könnte 
funktionieren, werde ich die kommenden Tage ausprobieren!

Vielen dank für den Vorschlag, soweit habe ich nicht gedacht.

von Karl H. (kbuchegg)


Lesenswert?

PS:
Was so landläufig 'Stopbit' genannt wird, kann man auch einfach als eine 
Pause zwischen 2 zu übertrageneden Bytes auffassen, in der die Leitung 
auf Ruhepegel geht. Die Pause soll dem Empfänger einfach nur ein bischen 
Zeit verschaffen, in der er das erhaltene Byte loswerden kann.
Mehr ist das nicht, was da hochtrabend "Stopbit" genannt wird.

von Elolehrling (Gast)


Lesenswert?

Komm mal runter o.o

ich bin im 4ten Lehrjahr Elektroniker, ich denke schon dass ich ein 
wenig Ahnung habe. Zudem habe ich nur euer "invertieren" zuerst falsch 
inverpretiert.

Und wo pöble ich jemanden an? Ich habe hier im vergleich zu dir keinen 
beleidigt, ich habe lediglich gesagt, dass das ganze nicht geht. Mehr 
auch nicht. Ich habe keinen von euch angegriffen und bin sachlich 
geblieben, finde ist kein Grund mich direkt als dumm abzustempeln.

Zudem habe ich mich stets freundlich bedankt für eure Hilfe, also bitte 
ich dich mal runter auf den Boden der Tatsachen zu kommen und dich 
wieder zu beruhigen, danke! :)

von Elolehrling (Gast)


Lesenswert?

*interpretiert

bevor hier einer auf die Idee kommt auch noch meine Grammatik zu 
beleidigen.

von Faultier (Gast)


Lesenswert?

> ... habe ich nur euer "invertieren" zuerst falsch inverpretiert.

Nun ja. Es könnte Dir auf lange Zeit nützen, wenn Du mal beschreibst, 
wie Du denn das zuerst interpretiert hast und wir Dir erklären, worin 
der Interpretationsfehler liegt. Damit könntest Du verhindern, das DIr 
das an anderer Stelle nochmal passiert.

von Mumie (Gast)


Lesenswert?

USB schrieb im Beitrag #3419531:
> Elolehrling schrieb:
>> soweit habe ich nicht gedacht.
>
> Man merkt schon ziemlich deutlich, dass Nachdenken nicht wirklich Deine
> Stärke ist. Du bist einfach zu dumm für Elektronik oder andere komplexe
> Themengebiete.

@USB: Ohne solche Leute wäre das Forum gähnend leer und du hättest auch 
nichts zu tun.

von Elolehrling (Gast)


Lesenswert?

Ja, bevor ich hier weiter beleidigt werde und für dumm abgestempelt:

ich habe da invertieren so interpretiert, dass ich die Richtung des 
Telegramms invertieren soll und nicht die Pegel.

Ist nun gut. Beleidigt mich ruhig weiter.

Eigentlich schade. Mir wurde hier X-mal sehr gut weitergeholfen von sehr 
netten Leuten, heute wohl einige ein schlechten Tag oder so.

Auf jedenfall noch einmal danke für die hilfe, hat mir geholfen! :)

von Thomas E. (thomase)


Lesenswert?

Karl Heinz schrieb:
> PS:
> Was so landläufig 'Stopbit' genannt wird, kann man auch einfach als eine
> Pause zwischen 2 zu übertrageneden Bytes auffassen, in der die Leitung
> auf Ruhepegel geht. Die Pause soll dem Empfänger einfach nur ein bischen
> Zeit verschaffen, in der er das erhaltene Byte loswerden kann.
> Mehr ist das nicht, was da hochtrabend "Stopbit" genannt wird.
Vorsicht.

Auf diese Weise gönne ich einem Controller auch mehr Zeit, indem ich vom 
PC mit 2 Stopbits sende. Es muss aber 1 sein, also der Pegel. Sonst gibt 
es einen Frameerror.
Allerdings habe ich auch ein paar USB-Serial, denen das gar nicht 
gefällt.
Sind glaube ich Prolifics.

mfg.

von Reinhard Kern (Gast)


Lesenswert?

Elolehrling schrieb:
> heute wohl einige ein schlechten Tag oder so.

Es ist völlig klar, wer hier einen schlechten Tag hatte, du hast ja 
schliesslich behauptet, alle hier hätten das Problem falsch verstanden, 
nur du nicht. Nennt man Geisterfahrer-Syndrom: "Ein Geisterfahrer? 
Hunderte!".

Gruss Reinhard

von Faultier (Gast)


Lesenswert?

>ich habe da invertieren so interpretiert, dass ich die Richtung des
>Telegramms invertieren soll und nicht die Pegel.

Du meinst wahrscheinlich eine Umkehr in der Zeit oder auch in der 
Reihenfolge. Zuerst das Stop-Bit, die Daten und dann das Start-Bit.

Das nennt eigentlich niemand "Invertieren". Die einzige im 
Elektronikbereich relevante Verwendung bezieht sich auf das digitale 
Schaltelement "Inverter" und das analoge Element gleichen Namens.
Ersteres tut, was Du jetzt annimmst. Letzteres erzeugt Spannungungen aus 
anderen Spannungen (im allgemeinen, aber nicht zwingend, höhere) mit 
umgekehrter Polarität.

Falls das von Dir Angenommene gemeint gewesen wäre, hätte man von der 
Reihenfolge der Bits gesprochen.

Erlaube mir bitte, Dir zu empfehlen, Dir mal die Zeit zu nehmen und die 
Begriffe, die Du so in der Lehre kennengelernt hast, in einer 
Enzyklopädie nachzuschlagen (notfalls auch in Wikipedia). Du wirst 
feststellen, das es oft eine ganze Reihe von Subjektbereichen gibt. Sehr 
viele Begriffe sind "ererbt", eine Reihe aber auch Neuschöpfungen. Man 
kann dann auch leichter erschließen auf welche anderen Bereiche dieser 
Begriff durch Analogie zu sinnvoll zu übertragen ist. Andererseits sind 
manche Verwendungen oder Nicht-Verwendungen durchaus willkürlich.

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.