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


von Thorsten (Gast)


Angehängte Dateien:

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:
1
/* Globale Variablen definieren */
2
3
volatile uint8_t ValueS;
4
volatile uint8_t ValueM;
5
volatile uint8_t ValueH;
6
volatile uint8_t TimeChanged;
7
8
/* ISR für den Compare Match 1A Interrupt*/
9
SIGNAL(SIG_OUTPUT_COMPARE1A)
10
{
11
  /* Uhrzeit weiterzählen */
12
  if (++ValueS == 60)
13
  {
14
    ValueS = 0;
15
    if (++ValueM == 60)
16
    {
17
      ValueM = 0;
18
      if (++ValueH == 24)
19
        ValueH = 0;
20
    }
21
  }
22
23
  /* Als Sekundenanzeige die LED's blinken lassen */
24
  PORTB = ~PORTB;
25
26
  /* Änderungsmarker für Zeitanzeige hochzählen */
27
  TimeChanged++;
28
}

Im Hauptprogramm wird das Änderungsflag überprüft (TimeChanged > 0) und
dann die aktuelle Uhrzeit angezeigt:
1
int main(void)
2
{
3
  char buffer[15];        /* Puffer für Stringumwandlung */
4
    
5
  init_io();              /* IO's initialisieren */
6
  init_timer();           /* Timer initialisieren */
7
  lcd_init(LCD_DISP_ON);  /* LCD-Display initialsieren */
8
9
  /* Grundbild auf LCD ausgeben */
10
  lcd_puts("  Thorstens BasUhr");
11
  lcd_gotoxy(6,2);
12
  lcd_puts("00:00:00");
13
14
  /* Endlose Hauptschleife */
15
  for (;;)
16
    if( TimeChanged > 0 )
17
    {
18
      lcd_gotoxy(6,2);
19
      itoa(ValueH, buffer, 2);
20
      lcd_puts(buffer);
21
      lcd_gotoxy(9,2);
22
      itoa(ValueM, buffer, 2);
23
      lcd_puts(buffer);
24
      lcd_gotoxy(12,2);
25
      itoa(ValueS, buffer, 2);
26
      lcd_puts(buffer);
27
      TimeChanged = 0;
28
    }
29
}

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

von Dieter Brüggemann (Gast)


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

von Thorsten B. (bear8234)


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

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.