Hallo,
ich habe ein Arduino Mega 2560 Board, ich programmiere aber mit dem
Atmel Studio ganz normal, also einen AtMega2560.
Ich habe einen Timer, der jede ms abläuft im CTC Modus, sich also selbst
bei Vergleichswert zurücksetzt.
In der ISR Routine passiert folgendes:
1 | ISR(TIMER1_COMPA_vect){
|
2 | xx++;
|
3 | if(xx>=1000)
|
4 | { xx=0;
|
5 | second++;
|
6 | if(second>=60)
|
7 | { minute++;
|
8 | second=0;
|
9 | if(minute>=60)
|
10 | { hour++;
|
11 | minute=0;
|
12 | }
|
13 | }
|
14 | }
|
15 | }
|
Ich habe eine Abweichung von ca. 60 Sekunden Pro Tag. Macht also ~
800ppm.
Der Timer läuft mit 1/64 CPU Takt ( 16MHz ) und der Vergleichswert ist
249, also jede ms ein Compare Interrupt.
Auf dem Board ist ein Quarzoszillator drauf.
Habe ich einen Programmfehler, oder ist der Quarzoszillator so mies?
Es laufen übrigens keine anderen Interrupts, das heißt ein "auslassen"
ist eigentlich nicht möglich.
Danke für Eure Unterstützung
Erich