www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zahlen über UART senden


Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wäre es mit
sprintf(out,"%f",zahl)

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist der unterschied zwischen ASCII, Hex und Binaer ?

Autor: Gerd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.