www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 am PC im Zahlenformat ausgeben


Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muss mit meinem Mikrocontroller eine UART Kommunikation machen. 
Diese funktioniert auch soweit ganz gut. Mein einziges Problem ist, dass 
alle Terminal Programme immer versuchen die Bytes als ASCII Zeichen 
auszugeben.

Ich möchte, dass mir das Programm das empfangene Byte als Zahl zwischen 
0 und 255 ausgibt... Idealerweise immer 8 Bytes in einer Zeile und dann 
ne neue Zeile.

Kennt da jemand ein passendes Programm?

Danke!
Timo

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

Bewertung
0 lesenswert
nicht lesenswert
Timo wrote:

> Diese funktioniert auch soweit ganz gut. Mein einziges Problem ist, dass
> alle Terminal Programme immer versuchen die Bytes als ASCII Zeichen
> auszugeben.
>
> Kennt da jemand ein passendes Programm?

Du bäumst das Pferd am falschen Ende auf.
Wenn alle Terminal Programme deine Daten so interpretieren, dann wäre 
es wohl am besten, wenn dein Programm die Daten auch so schicken würde. 
Denkst du nicht?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach das Byte als Zahl schicken?
http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, ich verstehe grad nicht wie ihr das meint. Jedes der 255 ASCII 
Zeichen hat ja einen Zahlenwert (eben von 0 bis 255). Und ich möchte 
nicht das 'a' anzeigen lassen, sondern die dazugehörige 097. Geht das 
nicht???

Autor: MichiB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm HTerm.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Perfekt. Genau sowas hab ich gesucht!!!

Tausend Dank

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

Bewertung
0 lesenswert
nicht lesenswert
MichiB wrote:
> Nimm HTerm.

Das war in diesem Fall kontraproduktiv.
Was macht er denn, wenn er zb. mal errechnete Temperaturen oder von mir 
aus Drehzahlen oder sonst irgendeinen Zahlenwert ausgeben lassen will?
Das Verständnis, zwischen einer Zahl und seiner Anzeigen-Repräsentierung 
unterscheiden zu können und wie man von einem zum anderen kommt, ist 
fundamental für jegliche Art von User-Interface.
Er war am besten Weg diese Unterscheidung zu treffen und zu erforschen, 
weil er schon verstanden hat, dass es da einen Unterschied gibt und 
worin dieser Unterschied prinzipiell besteht.

Manchmal ist der kurze Weg nicht der Bessere auch wenn es auf den ersten 
Blick so aussehen mag.
Einem Mann das Fischen beizubringen dauert zwar länger als ihm einen 
Fisch zu schenken. Aber mit dem geschenkten Fisch hat nur morgen was zu 
Essen. Kann er fischen, hat er sein Leben lang zu Essen.

Autor: blub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manche sind so strunzdumm, die können keine Angel halten.

Autor: Stefan Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier ein kurzes Codefragment für die Ausgabe eines Zahlenwertes über ein 
normales Terminalprogramm :

    di++; // Durchlaufzähler erhöhen, Variablendeklaration mit "int 
di=0;"
    itoa(di,tmp_str,10);
    strcpy(uart_message,"TA1VEC "); //
    strcat(uart_message,tmp_str);   //
    strcat(uart_message,"\r\n");    //

Der String "uart_message" kann dann ganz normal über den UART 
zurückgesendet werden.

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Br@y's Terminal" geht auch, kann das gleiche wie HTerm, ist 
Geschmacksache...

EDIT: Vergessen, "Br@y's Terminal" kann auch Makros, kann manchmal 
nützlich sein.

@Karl heinz Buchegger:
Was ist so verkehrt daran jemandem genau die Frage so zu beantworten, 
wie er sie gestellt hat?! Du weist ja überhaupt nicht was er damit 
anfangen möchte...
Will er beispielsweise Steuerbefehle vom PC zum uC schicken oder 
umgekehrt, macht es nicht unbedingt sinn diese im Code mit 
ASCI-Buchstaben zu schreiben, sondern den tatsächlichen Integer-Wert.
Deine beschriebene Anwendung ist schon ziemlich speziell...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und ich möchte nicht das 'a' anzeigen lassen, sondern die
>dazugehörige 097. Geht das nicht???

Das macht man eben so, wie "kbuchegg" zu erklären versucht:

Wenn Du die Zahl 079 am Terminal anzeine willst, dann muss Dein Programm 
die Zahl in die entsprechende ASCII-Zeichenkette umwandeln und dann 
diese dann an die UART senden.

Aus 079 werden dann drei Bytes '0'+'7'+'9' plus für einen Zeilenumbruch 
noch [CR]+[LF]

Du sendest also: {'0','7','9','\r',\n'} = {48,55,57,13,10}

Autor: Stefan Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist doch überhaupt kein Problem,
Du kannst in C einer Integer-Variable den Wert des Char übergeben und 
den dann mit itoa in einen String umwandeln (siehe den vorigen Beitrag)

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So eine unsinnige Diskussion.

wenn er den wert direkt ausgeben will und nicht erst in einen String 
wandeln will ist das ok. Ich verstehe nicht warum sich hier irgendwelche 
Leute anmaßen, jemandem vorzuschreiben was er ausgeben soll. Ich denke 
den Unterschied zwischen der Umwandlung und der direkten Ausgabe hat er 
verstanden. Ich gebe mir manchmal auch einfach den Wert per RS232 aus 
ohne ihn vorher in einen String zu wandeln. Spart unter anderem auch 
resourcen. Für Debug zwecke reicht das völlig aus. Vielleicht soll das 
ja auch nicht jeder Lesen. Man kann auch sagen warum müssen alle 
Terminal Programme, außer ein paar wenigen, die Zeichen als ASCII 
darstellen ohne jemandem die Möglichkeit zu geben die werte direkt 
anzeigen zu lassen.

@Timo
mach einfach wie du es machen willst. Das ist schon in ordnung. Manche 
Leute spielen sich hier manchmal etwas auf.

Gruss

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

Bewertung
0 lesenswert
nicht lesenswert
Felix C. wrote:
> "Br@y's Terminal" geht auch, kann das gleiche wie HTerm, ist
> Geschmacksache...
>
> EDIT: Vergessen, "Br@y's Terminal" kann auch Makros, kann manchmal
> nützlich sein.
>
> @Karl heinz Buchegger:
> Was ist so verkehrt daran jemandem genau die Frage so zu beantworten,
> wie er sie gestellt hat?! Du weist ja überhaupt nicht was er damit
> anfangen möchte...
> Will er beispielsweise Steuerbefehle vom PC zum uC schicken oder
> umgekehrt, macht es nicht unbedingt sinn diese im Code mit
> ASCI-Buchstaben zu schreiben, sondern den tatsächlichen Integer-Wert.
> Deine beschriebene Anwendung ist schon ziemlich speziell...

Was ist daran so speziell, dass man in der Lage ist eine int Variable 
die den Wert 97 enthält so aufs Terminal zu schaufeln, dass am Terminal 
tatsächlich 97 steht? Sorry, aber das sind Grundlagen. Nächstens wird 
mir vorgeworfen dass for Schleifen was spezielles sind und man sich doch 
besser darauf konzentrieren sollte jemandem zu zeigen, wie er die selbe 
Anweisung 129 mal in seinem Programm duplizieren kann, nur weil 
Duplizieren bei einer 2-maligen Wiederholung einfacher ist.

Schau dir noch mal seine Aufgabenstellung genau an.

> Ich möchte, dass mir das Programm das empfangene Byte als Zahl
> zwischen 0 und 255 ausgibt... Idealerweise immer 8 Bytes in einer
> Zeile und dann ne neue Zeile.

und dann frag dich noch mal ob er wohl Steuerzeichen ausgeben will.

NB: Hast du schon mal was von einem Hex-Dump gehört?

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

Bewertung
0 lesenswert
nicht lesenswert
Nils wrote:

> Ich denke
> den Unterschied zwischen der Umwandlung und der direkten Ausgabe hat er
> verstanden.

Er hat verstanden dass da wohl so was notwendig wäre, weiß aber nicht 
wie.

> Ich gebe mir manchmal auch einfach den Wert per RS232 aus
> ohne ihn vorher in einen String zu wandeln.

Du weißt auch was du tun musst, wenn du es anders haben willst.
Er weiß es nicht. Und genau das ist der springende Punkt.
Man kann ihm sagen: Nimm dieses Tool, dann hast du keine Arbeit. Man 
kann ihm aber auch beibringen, wie man es ohne dieses spezielle Tool 
machen kann. Bei letzterem hat er dann den Vorteil, dass er was dabei 
gelernt hat und dieses Wissen bei geänderter Aufgabenstellung einsetzen 
kann, wenn ihm sein spezielles Tool, in dem Fall HTerm, nicht mehr 
weiter hilft.

Man kann in diesem Forum Fragen dem Buchstaben nach beantworten. Dann 
würden die meisten Threads als zweites Posting ein "Ja" oder "Nein" 
enthalten und der Thread könnte geschlossen werden.
Oder aber man kann sich auch überlegen, welches Wissen dem Fragesteller 
fehlt und ihn in die entsprechende Richtung unterrichten.

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.