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
Etwar 30Hz hast du dann. Die Interrupt Periode beträgt dann 33 µs
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.