Hi.. Ich habe folgendes Problem. Und zwar versuche ich einen einen Timer einzustellen, der alle 25ms einen Interrupt auslöst.Im Betrieb ist der Timer allerdings zu langsam und mir schenint nicht klar warum. Der Controller wird mit 14745600 Hz betrieben
1 | #include <avr\io.h> |
2 | #include <avr\interrupt.h> |
3 | |
4 | //Interrupt definieren
|
5 | #define system_tick() ISR(TIMER1_OVF_vect)
|
6 | |
7 | system_tick() { |
8 | |
9 | //LEDS invertieren
|
10 | PORTA ^= 0xFF; |
11 | }
|
12 | |
13 | int main(void){ |
14 | |
15 | DDRA = 0xFF; |
16 | PORTA = 0; |
17 | |
18 | //Timer Register auf 360 setzen
|
19 | TCNT1H = 0x01; |
20 | TCNT1L = 0x68; |
21 | |
22 | //Overflow Interrupt aktivieren
|
23 | TIMSK |= (1<<TOIE1); |
24 | |
25 | //TIMER1 Prescaler von 1024 einstellen und starten
|
26 | TCCR1B |= (1<<CS12) | (1<<CS10); |
27 | |
28 | //Interrupts Enable
|
29 | sei(); |
30 | |
31 | for(;;){ |
32 | }
|
33 | |
34 | //Interrupts Disable
|
35 | cli(); |
36 | |
37 | }
|
Wie man sieht ist der Prescaler auf 1024 eingestellt. 14745600 / 1024 = 14400 14400 / 360 = 40 1 / 40 = 0.025[s] also sollte das soweit stimmen. Jedoch ist die Dauer im Test ca. 1 Sekunde lang. Hat Jemand eine Ahnung woran das liegen könnte?