www.mikrocontroller.net

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


Autor: Martin Ed (meidler87)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Martin Ed (meidler87)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.