Forum: Compiler & IDEs uart flushing and signed Zahl anzeigen


von aaroon (Gast)


Lesenswert?

Hi Zusammen,

bin jetzt dabei mich in die Welt der Microcontroller einzuarbeiten. Habe 
bis jetzt auch alles soweit.

Aber jetzt ist es doch so weit.

1.Also ich habe ein kleine Programm geschrieben welches mir nur 
Testweise
ein 16-Bit Wert (-65535...65535)senden soll.

Beim druck taste.1 dekrementiert mein Wert
Beim druck taste.2 Inkrementiert mein Wert

Nur merkt ich das mein wert sich zwischen (0...65535) ändert obwohl dass 
ich Es als signed deklariert habe.

Frage:
Wie kann ich auch die negative Zahlen im ASCII gut darstellen?


2. Meine Anzeige im Hterm funktioniert super, nur das ich immer auf den 
selbe stelle die neue Werte schreiben will. Also den alte angezeigt Wert 
muss gewichen werden und der neue angezeigt
dafur habe ich mir diese code gedacht:
1
while(1) 
2
{ 
3
  utoa( wert, s, 10 ); 
4
  Puts( s );
5
  unsigned char dummy;
6
  while ( UCSRA & (1<<RXC) ) dummy = UDR; //flushing the receiver
7
}

Frage:
wie kann ich meine Werte immer auf den selbe stelle schreiben?
das heisst:
anstatt:                  sonst
65535                     65531
65534
65533
65532
65531
....

uart flushing

Danke im voraus
Gruß
Aaroon

von Karl H. (kbuchegg)


Lesenswert?

aaroon schrieb:

> Nur merkt ich das mein wert sich zwischen (0...65535) ändert obwohl dass
> ich Es als signed deklariert habe.

Die Variable


>   utoa( wert, s, 10 );

Und hier lügst du und behauptest wert wäre ein unsigned.
itoa != utoa

von Karl H. (kbuchegg)


Lesenswert?

> Also den alte angezeigt Wert
> muss gewichen werden und der neue angezeigt
> dafur habe ich mir diese code gedacht:
> while(1)
> {
>   utoa( wert, s, 10 );
>   Puts( s );
>   unsigned char dummy;
>   while ( UCSRA & (1<<RXC) ) dummy = UDR; //flushing the receiver
> }

Um Text zu positionieren könntest du:
Kein Line-Feed schicken, sondern nur einen Carriage Return. Je nachdem, 
wenn das Terminal richtig eingestellt ist, macht es dann keinen 
Zeilenvorschub, sondern der Cursor wird nur an den Anfang der Zeile 
gestellt.
Du könntest auch die Ausgabe insofern 'rückgängig' machen, indem du mit 
entsprechend vielen Backspace (ASCII Code 0x08) den Cursor um die 
gewünschte Anzahl an Zeichen nach links schiebst.
Du könntest aber auch die VT100 Escape Sequenzen nehmen um den Cursor 
direkt an bestimmte Positionen am Schirm zu schicken. Natürlich nur, 
wenn im HTerm die VT100-Emulation auch eingeschaltet ist.

Aber was auch immer du tust, bedenke dabei immer, dass du einmal 
ausgegebenen Text nur überschreibst. Wenn du einzelne Zeichen nicht 
überschreibst (weil zb der neue Text kürzer ist), dann bleibt vom 
vorhergehenden Text etwas sichtbar.

von Karl H. (kbuchegg)


Lesenswert?

Oh und BTW

> ein 16-Bit Wert (-65535...65535)senden soll.

Der Wertebereich für einen signed 16-Bit Wert geht von -32768 bis +32767

von aaroon (Gast)


Lesenswert?

>Und hier lügst du und behauptest wert wäre ein unsigned.
>itoa != utoa

oh!!!
so dumm bin ich
ich habe es übersehen

Danke

von Simon K. (simon) Benutzerseite


Lesenswert?

Soweit ich weiß geht das Gewünschte nicht mit dem HTerm. Musste 
Hyperterminal oder was brauchbareres VT100 kompatibles nehmen.

von aaroon (Gast)


Lesenswert?

>2. Meine Anzeige im Hterm funktioniert super, nur das ich immer auf den
>selbe stelle die neue Werte schreiben will. Also den alte angezeigt Wert
>muss gewichen werden und der neue angezeigt
>dafur habe ich mir diese code gedacht:

einfach:
1
while(1) 
2
{ 
3
  utoa( wert, s, 10 ); 
4
  Puts( s );
5
  USART_Puts("\r");
6
}

und ist gelöst

danke an alle
viele grüsse

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.