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
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?
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???
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.
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.
"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...
>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}
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)
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
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?
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.