Forum: Mikrocontroller und Digitale Elektronik Hyperterminal


von Eder (Gast)


Lesenswert?

Hallo nochmals,

ich hätte noch eine Frage und zwar möchte ich von einem µC (einer SPS)
alle 1s (Zykluszeit der SPS) die Uhrzeit an das Hyperterminal senden.
Im Hyperterminal wird diese aber immer nacheinander gereiht. Weiß
jemand wie ich das machen kann, damit dieUhrzeit nur einmal im
Hyperterminal steht?
Vielen Dank.

lg
Eder

von Michael (Gast)


Lesenswert?

häng mal \r an

von jojansen (Gast)


Lesenswert?

Zumindest im Teraterm (wärmstens zu empfehlen) kann man beim Empfang
entweder 'CR' (Carriage return) oder 'CR+LF' (Line Feed)
einstellen.
Schau mal unter 'Eigenschaften von ??? -> Einstellungen -> ASCII
Konfiguration -> Einstellungen für den ASCII Empfang' Bestimmt ist bei
'Beim Empfang Zeilenvorschub am Zeilenende anhängen' ein Haken
gesetzt. Das wäre so was wie 'CR+LF'.
Vielleicht hilft das ja.
:-) Johannes

von Eder (Gast)


Lesenswert?

Ich möchte einfach nur, dass deie SPS die Uhrzeit zum Hyperterminal
schickt und diese dort aktuell hält, auf dem gleichen platz. Ich gebe
die Uhrzeit mit strcpy in ein Array, dieses in den Sendepuffer und dann
soll das ganze zum Hyperterminal versendet werden und dort richtig
ankommen und keine hyrakliven.
Mein Problem ist, dass die Uhrzeit immer hinereinandergereiht wird, da
hilft auch kein \r nicht.
Hat jemand eine Idee?
vielen dank
lg
Eder

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Wie ist dein Hyperterminal eingestellt?
Kann sein, dass die VT100-Emulation eingestellt werden muß...
Dann sollte es mit \r funktionieren.

von Carlos (Gast)


Lesenswert?

Hallo,
versuchs mal mit der nachfolgenden Funktion zum Setzen des Cursors
unter HyperTerm.
Damit kannst Du immer an der gleichen Stelle die Uhrzeit ausgeben.
HyperTerm muß dann allerdings in der VT52er-Terminal-Emulation
betrieben werden.

Gruß Carlos


*** Setzen des Cursors ***/

void cursor_set(unsigned char z, unsigned char s)
{
    printf("\x1b\x59%c%c",(32+z),(32+s));
}

von Hugo Häberle (Gast)


Lesenswert?

Vor der Ausgabe der Uhrzeit den Bildschirm löschen.

von Eder (Gast)


Lesenswert?

und wie geht das Bildschirm löschen?

von Karl heinz B. (kbucheg)


Lesenswert?

Dafür gibst genauso wieder eine Escape Sequenz.

Google doch mal nach VT52 Escape Sequenzen.

Das hier
printf("\x1b\x59%c%c",(32+z),(32+s));

War zb. die Escape Sequenz

   ESC Y z s

ESC    ist das Zeichen das mit \x1b ausgegeben wird (eben Escape)
Y      ist das Zeichen mit dem ASCII Code 0x59 (keine Ahnung
       warum mein Vorgänger das so geschrieben hat, er hätte auch
       einfach ein Y nehmen können.
z      ist die Zeilennummer als ASCII Code. Also '0' für Zeile 0,
       '1' für Zeile 1, usw
s      ist die Spaltennummer als ASCII Code.

Viele andere Escape Codes, die du verwenden kannst, findest du zb hier
http://www.termsys.demon.co.uk/vtansi.htm

Aber nicht vergessen: Hyperterm auf ANSI oder VT100 umstellen!

von Karl heinz B. (kbucheg)


Lesenswert?

> Google doch mal nach VT52 Escape Sequenzen.

Natürlich nach VT100, nicht VT52

von Eder (Gast)


Lesenswert?

und wo häng ich die Escape Sequenzen an und wie -> einfach nach dem
String?
Uhrzeit \x1b 0x59 0 0 ?
Vielen Dank.
Bin neu in der VT100Escape Materie!
Eder

von Karl heinz B. (kbucheg)


Lesenswert?

Das ist ein ganz normaler Text, den du dann einschmuggelst
wenn du ihn brauchst. Da ist nichts geheimnisvolles
daran.

> Uhrzeit \x1b 0x59 0 0 ?

Das gibt zuerst die Uhrzeit aus und schiebt dann den Cursor
an Position 0/0.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Einheitlichkeit halber:

   12:34:56 \x1b Y 0 0

also (in hexadezimaler Notation)

   31  32  3A  33  34  3A  35  36  1B  59  30  30
   1   2   :   3   4   :   5   6   ESC Y   0   0

Wobei die übliche VT100-Sequenz zur Cursorpositionierung

   ESC [ x ; y H

lautet, hier also

   31  32  3A  33  34  3A  35  36  1B  5B  30  3B  30
   1   2   :   3   4   :   5   6   ESC [   0   ;   0

von Eder (Gast)


Lesenswert?

Ganz kapier ichs noch immer nicht: ich muss die Hex Zahlen über die
serielle Schnittstelle schicken damit diese korrekt dargestellt
werden?
Ich bekomm die Uhrzeit ja in Integer- Werten und den ganzen Text muss
ich den kodieren?
Vielen Dank
lg
Eder

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein, Du musst das natürlich nicht als Hex-Zahlen übertragen, sondern
die entsprechenden Zeichen senden. Also bis auf ESC die von mir in der
jeweils zweiten Zeile angegebenen Zeichen.

Jede zweistellige Hexzahl repräsentiert den ASCII-Code des zugehörigen
Zeichens. Da ESC (1B) nicht als lesbares Zeichen codiert werden kann,
werden verschiedene Notationen verwendet, um das anzugeben. Wer in
C/C++ unterwegs ist, der kann mit \x1b etwas anfangen, aber wem das
nichts sagt, der macht daraus vier einzelne Zeichen - was falsch wäre,
denn es ist ja nur eines damit gemeint.

Beginnt es jetzt allmählich klarer zu werden?

von Christian S. (kriki)


Lesenswert?

Bisschen kompliziert ...

Schreib die Uhrzeit raus und häng davor noch ein CR (ASCII 0x0D oder
dez 13... dann bist du wieder am Anfang, und schreibst über das alte
drüber.

Wie schon oben ... LF anhängen muss ausgeschaltet sein.

Bez. Terminalerkennung: Dürfte eigentlich egal sein.

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.