Moin,
ich habe ein paar Probleme mit meinem Timer.
Ich möchte ca. 1 mal pro Sekunde einen Wert dekrementieren.
Dazu verwende ich auf meinem ATtiny 2313 den Timer0 (8-bit).
Systemtakt wird über die internen 8Mhz bereit gestellt.
Wenn mich nicht alles täuscht, berechnet sich die Frequenz mit der ein
Timer-Overflow-Interrupt ausgelöst wird wie folgt:
Das wären dann bei mir:
Ich habe jetzt also im Timer-Interrupt eine folgende Abfrage eingebaut:
1 | ISR(TIMER0_OVF_vect){
|
2 |
|
3 | static uint8_t step = 0;
|
4 |
|
5 | if( step >= 122 ){
|
6 | x--;
|
7 | step = 0;
|
8 | }
|
9 | else step++
|
10 |
|
11 | }
|
x ist eine globale Variable.
Der Interrupt wird auch ausgelöst und der Wert dekrementiert. Nur leider
dauert das läntger als eine Sekunde. Tausche ich 122 durch 15 aus, kommt
es ungefähr hin. Warum?