Forum: Mikrocontroller und Digitale Elektronik Zahlen über UART senden


von Gerd (Gast)


Lesenswert?

Hallo,
im Moment sende ich Zahlen per ASCII Entsprechung und füge sie dann 
zusammen. Kann man nciht aber auch direkt Dezimalzahlen senden über UART 
und Welchen Wertebereich dürfen diese dann habe?
Danke

von micro1 (Gast)


Lesenswert?

Hi,
wäre es mit
sprintf(out,"%f",zahl)

von Purzel H. (hacky)


Lesenswert?

Was ist der unterschied zwischen ASCII, Hex und Binaer ?

von Gerd (Gast)


Lesenswert?

Naja also der Unterschied ist die Interpretation. Aber ich weiß ja eben 
nciht den Wertebereich. Kann man nur 8BIt senden? Oder geht da auch 
mehr?

von Purzel H. (hacky)


Lesenswert?

Ja. vielfache von 8 bit. Die kann man dann als Lowbyte first oder 
Highbyte first interpretieren. Den besten Werteberich mit ASCII hat man 
mit Hex, das waern dann 256 fuer 2 byte uebertragen, 65536 fuer 4 byte 
uebertragen. Als Binaer bekommt man 256 fuer ein byte uebertragen, und 
65536 fuer 2 byte uebertragen.

von Martin V. (oldmax)


Lesenswert?

Hi
Wenn du willst, kannst du auch Zahlen binär senden, auch Zahlenformate. 
Es kommt immer auf die Interpretation an. Deine Sschnittstelle kann 
nicht wissen, das eine Float kommt, also das Format einer Floatzahl, 
oder das eine Sequenz ASCII kommt, oder eine 32Bit Integer. Du legst das 
fest, sowohl auf Sender- als auch auf Empfängerseite. Oder du schreibst 
ein Protokoll etwa nach Art:
ASCII: Formatbyte, Ziffer, ziffer; ziffer, Ziffer, Ziffer; Ziffer
Float: Formatbyte, Mantisse, Exponent (so glaub ich war das....)
Integer: Format, Hex,Hex,Hex,Hex
Auf Empfängerseite schaust du dir das Formatbyte an und behandelst das 
empfangene entsprechend...
Gru oldmax

von Reinhard Kern (Gast)


Lesenswert?

Gerd schrieb:
> Hallo,
> im Moment sende ich Zahlen per ASCII Entsprechung und füge sie dann
> zusammen. Kann man nciht aber auch direkt Dezimalzahlen senden über UART
> und Welchen Wertebereich dürfen diese dann habe?
> Danke

Du kannst senden, was immer du willst, solange es in Bytes eingeteilt 
werden kann, aber ich rate davon ab. Der Vorteil ist gering, du musst 
die Variablen beim Empfang so oder so wieder zusammensetzen, und die 
Länge der Daten ist nur sehr selten wirklich ein Problem. Dafür wird 
eine Fehlersuche schwierig bei Binärdaten - versuch mal, sowas mit einem 
Terminal mitzulesen.

Gruss Reinhard

von Karl H. (kbuchegg)


Lesenswert?

Gerd schrieb:
> Naja also der Unterschied ist die Interpretation. Aber ich weiß ja eben
> nciht den Wertebereich. Kann man nur 8BIt senden? Oder geht da auch
> mehr?

Unser Alphabet hat nur 26 Buchstaben.
Kann man mit diesen 26 Buchstaben auch mehr Information vermitteln als 
26 verschiedene?

---> Ja nar klar. Setze einfach mehrere Buchstaben hintereinander und 
postuliere dass zb immer 3 zusammengehören. Schon kannst du jede Menge 
'3-buchstabiger' Wörter bilden.
Aber achte darauf, dass der Empfänger herausfinden kann, wo ein Wort 
aufhört und das nächste anfängt.

(Spätestens da kanns dann plötzlich wieder aufwändig werden, so dass die 
Grundidee mit ASCII Übertragung eigentlich wieder einfach wirkt)

von g457 (Gast)


Lesenswert?

Obacht beim senden von Rohdaten über UART: Das kann je nach System 
gehörig schief gehen. Unter Linux ist es z.B. üblich, dass bei einer 
Seriellen die üblichen(tm) Steuerzeichen (darunter u.a. break, xon, 
xoff, ..) interpretiert werden. Und abhängig von der benutzten 
Programmiersprache ist es nicht so ohne weiteres möglich, den Port 
passend zu konfigurieren.

Ein Anwendungsprotokoll, das unter 'C' problemlos läuft (wenn es den 
Port per passender ioctls umgebogen hat), lässt sich dann in Java nicht 
ohne weiteres implementieren (von dadort aus kommt man nicht ohne 
Hilfsmittel an die passenden ioctls).

Ergo: Wenns möglich ist, dann im Klartext ('menschenlesbar') übertragen, 
das erleichtert erstens die Portierbarkeit und zweitens wie schon 
angesprochen das Debuggen :-)

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.