Servus ihr lieben,
betreibe nen Atmega 8 mit nem externen Quartz und hab da ein Timing
Problem mit dem Timer 2 er soll im Grunde genommen jede Sekunde einen
Wert ausgeben aber irgendwie brauch er knapp 2 Sekunden dafür.
Hab schon alles kontrolliert aber komm irgendwie nicht dahinter.
Vielleicht hat ja einer von euch nen Ratschlag.
Hier mal das Stück Code in welchem der Timer 2 initalisiert wird:
1 | //4***Interrupt TIMER2 init*********************************************************************
|
2 | TCNT2 = 0; //Anfangszählerstand = 0
|
3 |
|
4 | TCCR2 = (1<<CS22) | (1<<CS21) | (1<<CS20); //Prescaler von 1024 auswählen
|
5 | /* CPU-Takt = 12.000.000Hz Prescaler = 1024
|
6 | Zeit bis overflow = CPU-Takt/Prescaler = 12.000.000HZ / 1024 = 11.718Hz
|
7 | */
|
8 |
|
9 | OCR2 = 117; //Zähler zählt bis 117
|
10 | /* Zeit bis overflow = 11718Hz Zählwert = 117
|
11 | Zeit bis Interrupt = 11718Hz / 117 = 100,16Hz ~ 100Hz
|
12 | 1s / 100 = 0,01s = 10ms
|
13 | */
|
14 |
|
15 | TIMSK |= (1<<OCIE2); //Interrupt aktivieren
|
und hier die ISR:
1 | ISR (TIMER2_COMP_vect)
|
2 | {
|
3 |
|
4 | counter_T2 ++;
|
5 |
|
6 | if (counter_T2 == 10) //Jede Sekunde
|
7 |
|
8 | {
|
9 |
|
10 | lcd();
|
11 |
|
12 | counter_T2 = 0;
|
13 |
|
14 | }
|
15 |
|
16 | }
|
die Fuses sehen wie folgt aus:
High = 0xDF
Low = 0xDD
Lock = 0xFF
Die Fuses bereiten mir noch ziehmlich Kopfzerbrechen, gibt ja tausend
mögliche Einstellungen ;)
Bin über jede Hilfe sehr dankbar
Gruß Andi