Hi zusammen,
Ich wollte ne kleine Uhr programmieren, da ich mich mit den Strings in C nich wirklich auskenne und die nun bissel beherrschen lernen wollte...
Ich hab jetzt folgenden Code:
Naja, das Problem ist, dass zwar der itoa der Seconds klappt, aber wenn ich die itoa's der Stunden und Minuten nicht auskommentiere, resetet der µC konstant :-sCode:#define preValue 57724
int volatile gSeconds = 0;
SIGNAL (SIG_OVERFLOW1)
{
gSeconds++;
TCNT1 = preValue;
}
int main (void)
{
lcd_init(LCD_DISP_ON);
TCCR1B = (1<<CS12) | (1<<CS10);
TIMSK |= (1<<TOIE1);
TCNT1 = preValue;
sei ();
int seconds = 0;
int minutes = 0;
int hours = 0;
char *sec = "00";
char *min = "00";
char *h = "00";
char *time = "00:00:00";
lcd_puts("Time: ");
lcd_puts(time);
while (1)
{
if (seconds != gSeconds)
{
seconds = gSeconds;
if (seconds == 60)
{
seconds = 0;
gSeconds = 0;
minutes++;
}
if (minutes == 60)
{
minutes = 0;
hours++;
}
if (hours == 24) hours = 0;
time = "00:00:00"; // Problem hier s.u.
// 01234567
itoa(seconds, sec, 10);
// itoa(minutes, min, 10);
//itoa(hours, h, 10);
if (seconds < 10)
{
time[6] = "0"; // zweites Problem hier s.u.
time[7] = sec[0];
}
else
{
time[6] = sec[0];
time[7] = sec[1];
}
/* if (minutes < 10)
{
time[4] = min[0];
}
else
{
time[3] = min[0];
time[4] = min[1];
}
if (hours < 10)
{
time[1] = h[0];
}
else
{
time[0] = h[0];
time[1] = h[1];
}*/
lcd_gotoxy(6,0);
lcd_puts(time);
lcd_gotoxy(0,1);
lcd_puts(sec);
}
}
}
Außerdem bringt folgende Zeile hier gar nix:
Eigentlich sollte wenn die Seconds wieder bei 0 sind dadurch garantiert werden, dass in der Uhrzeit auch :00 anstatt :50 steht (Die 5 wäre noch aus den 50'er Sekunden geblieben). Ich hoffe ihr versteht was ich meine :)Code:time = "00:00:00"; // Problem hier s.u.
Trotz dieser Zeile, bleibt in den ersten 10 Sekunden jeder neuen Minute die 5 aus den 50'er Sekunden der vorherigen Minute stehen. So als ob die Variable gar nicht refresht wird...
Zitat:
Time: 00:00:58
Time: 00:00:59
Time: 00:00:50
Time: 00:00:51
Time: 00:00:...
Time: 00:00:59
Time: 00:00:10
Ich dachte mir daher: Ach egal, packste halt die Null selber dahin.Code:time[6] = "0"; // zweites Problem hier s.u.
Seltsamerweise sieh die ausgabe dann so aus:
Ich hoffe, jmd hat ne Idee für mich...Zitat:
Time: 00:00:s0
Time: 00:00:s1
Time: 00:00:...
Time: 00:00:s9
ThxInAdv
Alex