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


von Timo (Gast)


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

von Karl H. (kbuchegg)


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?

von Justus S. (jussa)


Lesenswert?


von Timo (Gast)


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???

von MichiB (Gast)


Lesenswert?

Nimm HTerm.

von Timo (Gast)


Lesenswert?

Perfekt. Genau sowas hab ich gesucht!!!

Tausend Dank

von Karl H. (kbuchegg)


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.

von blub (Gast)


Lesenswert?

Manche sind so strunzdumm, die können keine Angel halten.

von Stefan Maier (Gast)


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.

von Felix N. (time2ride)


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...

von Peter (Gast)


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}

von Stefan Maier (Gast)


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)

von Nils (Gast)


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

von Karl H. (kbuchegg)


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?

von Karl H. (kbuchegg)


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.

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.