mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehler bei Umwandlung mit atoi?


Autor: Thorsten (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe hier ein (mir unverständliches) Problem mit der
atoi-Anweisung. Ich möchte auf einem LCD eine Uhr anzeigen. Dazu werden
per Interrups (jede sekunde) 3 globale Variablen wie folgt hochgezählt:
/* Globale Variablen definieren */

volatile uint8_t ValueS;
volatile uint8_t ValueM;
volatile uint8_t ValueH;
volatile uint8_t TimeChanged;

/* ISR für den Compare Match 1A Interrupt*/
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
  /* Uhrzeit weiterzählen */
  if (++ValueS == 60)
  {
    ValueS = 0;
    if (++ValueM == 60)
    {
      ValueM = 0;
      if (++ValueH == 24)
        ValueH = 0;
    }
  }

  /* Als Sekundenanzeige die LED's blinken lassen */
  PORTB = ~PORTB;

  /* Änderungsmarker für Zeitanzeige hochzählen */
  TimeChanged++;
}

Im Hauptprogramm wird das Änderungsflag überprüft (TimeChanged > 0) und
dann die aktuelle Uhrzeit angezeigt:
int main(void)
{
  char buffer[15];        /* Puffer für Stringumwandlung */
    
  init_io();              /* IO's initialisieren */
  init_timer();           /* Timer initialisieren */
  lcd_init(LCD_DISP_ON);  /* LCD-Display initialsieren */

  /* Grundbild auf LCD ausgeben */
  lcd_puts("  Thorstens BasUhr");
  lcd_gotoxy(6,2);
  lcd_puts("00:00:00");

  /* Endlose Hauptschleife */
  for (;;)
    if( TimeChanged > 0 )
    {
      lcd_gotoxy(6,2);
      itoa(ValueH, buffer, 2);
      lcd_puts(buffer);
      lcd_gotoxy(9,2);
      itoa(ValueM, buffer, 2);
      lcd_puts(buffer);
      lcd_gotoxy(12,2);
      itoa(ValueS, buffer, 2);
      lcd_puts(buffer);
      TimeChanged = 0;
    }
}

Auf dem Display erscheint aber statt meiner Uhrzeit z.B. bei den
Sekunden nicht etwa 1, 2, 3, 4, 5, 6, 7, usw., sondern
0, 1, 10, 11, 100, 101, 110, 111, 1000, usw.

Was mach ich da denn falsch? Wieso wandelt mit itoa das so merkwürdig
um?

Hat da einer eine Idee zu?

Vielen Dank

MfG Thorsten

Autor: Dieter Brüggemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Sollte das nicht so lauten

    itoa(ValueS, buffer, 10);

anstatt

    itoa(ValueS, buffer, 2);

http://www.goblack.de/desy/sc12chip/c/bibliothek/itoa.html

MFG
Dieter

Autor: Thorsten Bruns (bear8234)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für den Tip, das war's! Nu' rennt sie, die Uhr ;-)

Ich habe den Quelltext nu' schon 2 Stunden hoch und runter gelesen,
aber das hab' ich nicht gesehn.

MfG Thorsten

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.