Gast
#1053668
Hallo,
ich haette gerne eine LCD Uhr die einigermaßen genau läuft.
Hab mir die zwei Tutorial's durchgelesen (AVR ASM, GCC).
Und mir daraus was gebastelt.
0.01 sekunden * 11059200 MHz = 110592.
daher -> OCR1A = 110591;
und beim Interrupt zaehle ich auf 100 hoch.
Denoch funktioniert die Uhr ungenau, wo ist da mein Problem?
TCCR1B = (1<<CS10 | 1<<WGM12);
OCR1A = 110591;
TIMSK |=(1<<OCIE1A);
TIFR = 1<<TOV1;
DDRB = 0xFF;
PORTB = 0xFF;
sei();
lcd_init();
lcd_clear();
set_cursor(0,1);
lcd_string("Uhrzeit");
while(1)
{
}
return 0;
}
void uhrzeit(void)
{
lcd_clear;
set_cursor(0,2);
lcd_string(itoa(stunden, str, 10));
set_cursor(2,2);
lcd_string(":");
set_cursor(3,2);
lcd_string(itoa(minuten, str, 10));
//lcd_string(":");
set_cursor(7,2);
//lcd_string(dtostrf(sekunden,1,2,str));
lcd_string(itoa(sekunden, str, 10));
}
ISR(TIMER1_COMPA_vect)
//ISR (TIMER1_OVF_vect)
{
tmp1++;
if (tmp1 == 100) {
sekunden++;
if (sekunden > 59 ) {
sekunden = 0;
minuten++;
uhrzeit();
}
if (minuten > 59 ) {
sekunden = 0;
stunden++;
minuten = 0;
}
if (stunden > 23 ) {
sekunden = 0;
stunden = 0;
minuten = 0;
}
}
}