Hallo,
offensichtlich benutzt der ursprüngliche Poster einen AVR, der mit 8 MHz betrieben wird, während Deiner mit 4 MHz läuft. Da der interne Takt zum Zählen benutzt wird, läuft Deine Uhr nur halb so schnell. Die Lösung wäre: ersetze im Programm die Zeile
#define preValue 57724
durch
#define preValue 28862
Das sollte dann funktionieren.
Zu Deinem 2. Problem: Vielleicht hilft es, wenn Du den Teil des Programms, der in der Endlosschleife ausgeführt wird, etwas anders schreibst, etwa so:
Code:
while (1)
{
if (seconds != gSeconds)
{
seconds = gSeconds;
if (seconds >= 60)
{
seconds -= 60;
gSeconds = seconds;
minutes++;
}
if (minutes >= 60)
{
minutes -= 60;
hours++;
}
if (hours >= 24)
hours -= 24;
/* Uhrzeit formatieren */
sprintf (mytime, "%02d:%02d:%02d", hours, minutes, seconds);
/* und auf dem Display ausgeben */
lcd_gotoxy (6,0);
lcd_puts (mytime);
}
}
Sollte das Problem immer noch vorhanden sein, wäre es interessant zu wissen, welchen AVR Du einsetzt.
Gruß, M@nni
Lesezeichen