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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.