Forum: Compiler & IDEs ds1307 Wochentag auf LCD


von pummel (Gast)


Lesenswert?

Hallo,

ich will von der Echtzeituhr Ds1307 den Wochentag auslesen und als Mo-So 
auf einem LCD darstellen.
Dazu benutze ich folgende Funktion:

void readTime(void){

   uint8_t wday;
   char weekday[8][2] = {"00","Mo","Di","Mi","Do","Fr","Sa","So"};

   i2c_start_wait(DS1307+I2C_WRITE);
   i2c_write(0x03);
   i2c_stop();
   i2c_rep_start(DS1307+I2C_READ);
   wday = i2c_readNak();
   i2c_stop();

   lcd_puts(weekday[wday]);
}

Auf dem LCD wir nun aber

MoDiMiDoFrSaSoX

ausgegeben (das X ist ein Feld Datenmüll)
Die i2c und LCD-Routinen sind die vom Fleury und tun problemlos.

Das Datenblatt von 1307 sagt, der Wochentag ist im Bereich von 01-07.
Kann ich diesen nicht direkt als Arrayindex verwenden?
Wie kommt die seltsame Ausgabe zustande?


von Stefan (Gast)


Lesenswert?

Du hast keinen Platz für das abschliessende Nullbyte gelassen.

   char weekday[8][3] = {"00","Mo","Di","Mi","Do","Fr","Sa","So"};
oder
   char *weekday[8] = {"00","Mo","Di","Mi","Do","Fr","Sa","So"};

von pummel (Gast)


Lesenswert?

Mist, dabei habe ich gerade soviel über das Nullbyte gelesen....
Als C-Anfänger hat man es eben nicht leicht ...


> char *weekday[8] = {"00","Mo","Di","Mi","Do","Fr","Sa","So"};

Ich glaube, hier meckerte der Compiler, kann es aber gerade nicht 
nachprüfen.

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.