Forum: Mikrocontroller und Digitale Elektronik benötige Hilfe bei der Berechnung eines Timerüberlaufs


von Tobias W. (towa)


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

von Peter R. (pnu)


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

von Karl H. (kbuchegg)


Lesenswert?

FAQ
Der Abschnitt über Timer beschäftigt sich als 'Einführung' genau mit 
diesem Thema.

von Stefan (Gast)


Lesenswert?

Etwar 30Hz hast du dann.
Die Interrupt Periode beträgt
dann 33 µs

von Ottmar K. (wil1)


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

von Stefan (Gast)


Lesenswert?

Die Rechnung ist verkehrt.

von Ottmar K. (wil1)


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

von Stefan (Gast)


Lesenswert?

Stimmt immer noch nicht.
Zum Schluß nicht mehr durch
255 teilen. Denn sonst hast du
ein TMR0 Preload von 0.
Das korrekte Ergebniss steht oben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.