benötige Hilfe bei der Berechnung eines Timerüberlaufs

OP #3318380
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.