Folgende Fragen zum Timer X:
Wenn der Timer X im Event Count Modus ist, zählt er externe Impulse.
Prescaler X (prex) wird jedesmal runtergezählt, wenn die eingestelle Flanke anliegt (falling/rising).
Timer X (tx) zählt die Underflows von prex.
Heißt also wenn 2 Impulse eingehen und prex und tx initial auf 255 gesetzt worden sind, dann ist prex = 255-2 = 253 und tx = 255 (da ja kein underflow).
Bei 256 eingegangenen Impulsen ist prex = 255 und tx=254 (da ein underflow).
Zum Berechnung der Impulse müsste ich dann doch schreiben:
counter = (255-prescalerX) + ((255-timerX)*256);
counter ist unsigned int deklariert.
Habe ich alles richtig verstanden?
Ich will die Frequenz messen, deshalb habe ich Timer Y so eingestellt das der Interrupt 100 mal in der Sekunde aufgerufen wird.Dann soll das Ergebniss von counter gespeichert werden.Interrupt wird ausgeschaltet,
die Inhalte von prex/tx werden kopiert und auf FF gesetzt.
Danach Interrupt wieder angeknipst.
void INT_Timer_Y(void)
{
timerY_count_10++;
if ( timerY_count_10 == 100 )
{
timerY_count_10 = 0;
asm("FCLR I"); /* Interrupt disable */
prescalerX = prex;
timerX = tx;
prex = 256-1;
tx = 256-1;
asm("FSET I"); /* Interrupt enable */
counter= (255-prescalerX)+((255-timerX)*256);
// counter wird verarbeitet
counter = 0;
}
}
Gibt es ne bessere Lösung??
Wie Entprellen, da es ja auf die Zeit ankommt?
