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?
einfach das Byte als Zahl schicken? http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.