benötige Hilfe bei der Berechnung eines Timerüberlaufs

OP #3318380
Lesenswert?

Hallo,

ich habe einen timer eingerichtet welcher beim erreichen des überlaufs 
sein interrupt flag setzt. jetzt möchte ich prüfen wie lange der timer 
braucht um einmal durchzuzählen, also einen wie lange er für einen 
overflow benötigt. die zeit die ich ausgerechnet habe erscheint mir 
etwas zu klein zu sein,

daher wollte ich fragen ob mir jemand erklären kann wie man die overflow 
zeit eines timers berechnet, da ich die formeln irgendwie nicht so 
richtig verstehe anscheinend.

ich nutze den internen takt von 31kHz mit einem vorteiler von 1:256. der 
timer zählt 256 mal bis zum überlauf und der maschinenzyklus ist 1/4 des 
maschinentakts. ich nutze einen pic16f887


würde mich über hilfe freuen,

gruß tobi
#3318420
Lesenswert?

Ich hab den Pic als Kontroller bergaben, als ich das erste einfache 
Programm damit gelesen habe, aber:

Irgendeinen unbenutzten Pin wirds am Kontroller doch noch geben?

Mach den zum Ausgang.

schreibe in die int-Routine eine Befehlsfolge, die den pin toggeln 
lässt.

Dann kann man eine Diode anschließen, die hier wohl mit 1/2 Hz blinken 
wird. Das lässt sich anhand einer Uhr mit Sekundenzeiger dann recht 
genau messen.

Den Befehlsvorrat des pic hab ich gerade nicht zur Hand, aber das müsste 
doch zu schaffen sein.

Bei C-programmierung musst Du halt eine Zeile fürs toggeln selbst 
suchen.

Die Rechnung wäre: 31kHz / (256 * 256) wenn  der timer den 31-kHz Takt 
verwendet, also etwa 1/2 Hz.

Das mit dem 1/4 wird wohl für die Befehlsdauer eine Rolle spielen
#3318581
Lesenswert?

Hallo Tobias,

Gegeben: Fosc=31000Hz
         Prescaler=256
         8Bit-Timer 0-255 = 256 Takte

Das wolltest Du doch wissen:

fosc/4         = 31000/4 = 7750 Hz
clock timer    = 7750Hz/256
               =1937,5 Integer->1937clocks
timer overflow (TMR0IF)
               = 1937/256 = 7,566Hz
t overflow     = 1s/7,566Hz = 0,132..s
Der Timer-overflow tritt jede 0,132..s auf, das entspricht einer 
Frequenz von 7,566Hz.

mfG Ottmar
#3318640
Lesenswert?

Stefan schrieb:
> Die Rechnung ist verkehrt.

JA, stimmt! ... Korrektur:

fosc/4         = 31000/4 = 7750 Hz
clock timer    = 7750Hz/256
...ab hier war der Wurm drin:
               =30,27.. Integer->30 clocks
timer overflow (TMR0IF)
               = 30/256 = 0,1172Hz
t overflow     = 1s/0,1172Hz = 8,53..s
Der Timer-overflow tritt nach jeweils 8,53..s auf, das entspricht einer
Frequenz von 0,1172Hz.

mfG Ottmar

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren