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
Das Problem liegt an itoa, dass einen signed int erwartet. Versuchs mal mit utoa.
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
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.