Forum: Mikrocontroller und Digitale Elektronik 16Bit Timerwert wird ab dem MSB negativ!


von Martin E. (meidler87)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich hoffe jemand kann mir weiterhelfen.

Angehängtes Programm soll den aktuellen Timer1 Wert am Display anzeigen. 
Wird der Timerwert zu groß sehe ich plötzlich eine negative Zahl am 
Display.

Dieser Vorzeichenwechsel geschieht genau dann, wenn das MSB des 
Timerwerts kippt. Ich vermute, dass irgendeine Funktion die 1 ganz links 
als Minus interpretiert (2er Komplement). Ich vewende als Variablentyp 
"unsigned short" 0-65535, liegt darin vielleicht das Problem (habe es 
auch mit anderen Typen versucht)?

Gibt es dazu eine elegante Lösung oder liege ich mit meiner Vermutung 
ganz falsch?

mfg martin

ps.: ich habe einen Atmega8 mit 8Mhz im Einsatz, das Display ist ein 
hd44780 display 2*16 zeichen im 4bit modus

von Benedikt K. (benedikt)


Lesenswert?

Das Problem liegt an itoa, dass einen signed int erwartet. Versuchs mal 
mit utoa.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Es leigt wohl an der Ausgaberoutine. Die du ds Dink definierst ist 
Wurscht. Wichtig es das Interface der Ausgabe, also welche Typed die 
will bzw. welchen %-Code du angibst (printf).

Johann

von Jean P. (fubu1000)


Lesenswert?

Hi,
ich tippe darauf das itoa deinen unsigned .. wert intern als int weiter 
verarbeitet. Die definition der Funktion lautet ja wie folgt :
char* itoa( int __val, char * __s, int __radix) !

Gruß

von Martin E. (meidler87)


Lesenswert?

Vielen, vielen Dank für eure schnelle Hilfe! Das ging ja fix!

itoa erwartet "signed" werte, da kann ich deklarieren was ich will, der 
Timerwert wird wohl nie "signed" :-)

mfg martin

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.