Hallo,
ich möchte für mein Projekt eine Uhr mit meinem Atmega32 realisieren.
Der uC läuft mit 16MHz. Für meine Uhr und andere "Systemanwendungen"
nutze ich einen Grundtakt von 10ms. Lasse ich die Uhr laufen,
verstreichen die Sekunden jedoch zu schnell. Ungefähr 1/3 schneller, als
eine Sekunde auf meiner normalen Uhr verstreicht. Woran könnte das
liegen?
1 | #define TICKS 10 //in ms, max. 1000
|
2 | #define PRESCALER 64
|
3 | #define COUNTER 65536
|
4 |
|
5 | #if(TICKS>1000)
|
6 | #error "TICKS IS TOO BIG!!!";
|
7 | #endif
|
8 |
|
9 | #define F_TIMER (1000/TICKS)
|
10 | #define LOADER (COUNTER-(F_CPU/(PRESCALER*F_TIMER)))
|
11 |
|
12 | ISR(TIMER1_OVF_vect)
|
13 | {
|
14 | /*
|
15 | ...
|
16 | */
|
17 | TCNT1=(uint16_t)LOADER; //63036
|
18 | }
|
19 |
|
20 | int main()
|
21 | {
|
22 |
|
23 | /*...*/
|
24 |
|
25 | /*using the 16-bit timer 1*/
|
26 | TCCR1B|=(1<<CS11)|(1<<CS10); //prescaler=64
|
27 | TCNT1=(uint16_t)LOADER; //63036->100ms
|
28 | TIMSK|=(1<<TOIE1); //overflow interrupt
|
29 |
|
30 |
|
31 | sei();
|
32 |
|
33 | while(1)
|
34 | {
|
35 | }
|
36 | return 0;
|
37 | }
|
Gruß
Paul