Nimm den 16bit Timer und stell den Prescaler auf 1024. Dann zählt er in 1 Sekunde bis 15625. Nun lädst du den Timer mit 49910 vor. Nun hast du jede Sekunde einen Timerinterrupt.
Nimm den 16bit Timer und stell den Prescaler auf 1024. Dann zählt er in 1 Sekunde bis 15625. Nun lädst du den Timer mit 49910 vor. Nun hast du jede Sekunde einen Timerinterrupt.
Danke für Eure Hilfe. Ich habe es mit dem 32kHZ Quarz auf der Platine gelöst (danke an Kampi für den Tip nochmal in die Doku zu schaun). Mit:
TCCR2B |= (1<<CS22)|(1<<CS20); //(1<<CS21)|
TIMSK2 |= (1<<TOIE2);
ASSR |= (1<<AS2);
ASSR &= ~(1<<EXCLK);
macht es jetzt jede Sekunde einmal Klick (der Interrupt wird ausgelöst). Mit 60x komme ich genau auf 1 min.
Dank Euch.
Mit dem Uhrenquarz kommst du auch genauer auf 1sec als mit 16MHz, weil sich die 32kHz besser auf 1 runter teilen lassen.
Siehst du hier:
Frequenz Uhrenquarz: 32768 Hz
Frequenz Quarz: 16MHz
32767 : 1024 = 32
16000000 : 1024 = 15625
Wenn du jetzt den Vorteiler noch größer wählen könntest, könntest du die 32kHz noch auf genau auf 1 runter teilen (2^15 = 32768 ). Wenn du den dann mal mit 16MHz rumrechnest wirst du feststellen das du 16MHz nie auf genau 1 runterrennen kannst. Die musst du dann z.B. auf 15625 runter teilen und den Zähler dann noch zählen lassen um 1sec zu erreichen.
Geändert von Kampi (01.09.2011 um 09:30 Uhr)
Lesezeichen