Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 01. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

Timer X Event Count

Postby Guest » Wed May 30, 2007 12:00 am

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?
Guest
 

Postby deadlock » Wed May 30, 2007 12:00 am

Hallo Tobias83,

klingt eigentlich plausibel. Funktioniert es denn nicht?

Meinst Du mit Entprellen den Zählereingang, also wenn ein Taster dran ist?
Das ist in der Tat ein Problem. Entweder über Hardware entprellen
(z.B. RC-Glied und notfalls noch Schmitt-Trigger) oder - wenn es wirklich nur ein
Taster ist - direkt im TimerY-Interrupt den Port einlesen und die Flanken
selbst zählen, denn die Prellzeit dürfte kleiner als 10 ms sein. Dann brauchst
Du TimerX gar nicht.

Gruß,
Deadlock
deadlock
 
Posts: 72
Joined: Fri Jan 03, 2014 1:50 pm

Postby Guest » Wed May 30, 2007 12:00 am

Danke erstmal für die Antwort, deadlock.

Habs gerade mal probiert, mit einem einfach Schalter am Zähleingang.
Funktioniert nur der Schalter prellt extrem.
Nachher soll da ein Anemometer dran, also kommt glaub ich nur Hardware zum Entprellen in Frage.
Gut das meine Überlegungen richtig waren, man will sich sicher sein!
Hab jetzt erstmal über Weihnachten nen bisschen Zeit, muss mich mal schlau machen.
Guest
 


Return to Das R8C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest