Hallo
Ich habe vor etwa einem Halben jahr mal eine Uhr gebaut...
Damals hatte ich vor einen DS1302 als Sekundengeber zu verwenden.
Da dieses vorhaben jedoch unter mangelnder I2C Kommunikation scheiterte,
habe ich mir heute ein halbes jahr später etwas anderes überlegt.
Es muss doch möglich sein, von einem Standard 4MHz Quarz einen genauen
1Sekunden Interrupt zu erzeugen oder?
Mein Bisheriger Code:
1 | void init_timer(void)
|
2 | {
|
3 | TCCR1A = 0;
|
4 | TCCR1B = 0;
|
5 | TCCR1B |= (1<<CS10) + (1<<CS11)+ (1<<WGM12); // Prescaler 64, IC an,Noice Cancel an
|
6 |
|
7 | TIMSK |= (1<<OCIE1A); // Compare Interrupt, IC interrupt
|
8 | OCR1A = 62500-1; // Compare grenzwert setzten
|
9 | //sei(); // Interrupts aktivieren erst nach stellen der uhr
|
10 | }
|
11 |
|
12 | ISR(TIMER1_COMPA_vect)
|
13 | {
|
14 | if(ucSecond_state == 0)
|
15 | {
|
16 | ucSecond_state = 1;
|
17 | SEKUNDE_ON;
|
18 | }
|
19 | else
|
20 | {
|
21 | ucSecond_state = 0;
|
22 | SEKUNDE_OFF;
|
23 | }
|
24 | update_time();
|
25 | }
|
Ist dieser Code genau genug?
Ich habe nach 5 Stunden bereits verzögerungen vo ca 200ms Festgestellt.
Also das glaube ich zumindest... :)
Grüsse