Forum: Mikrocontroller und Digitale Elektronik Timer0 berechnung


von Bastian S. (basti2s)


Lesenswert?

Hallo,

ich möchte einen kleinen Timer mit meinem PIC16F887 in C mit MPLAB 
Programmieren.

Dazu möchte ich einen Timer0 Verwenden, der bei einem Quarztakt von 8MHz 
jede ms einen Interrupt ausführen soll.
Durch den Interrupt soll eine Variable hochgezählt werden. Wenn die 
Wariable 6000 erreicht hat ist eine Sekunde Vergangen und eine LED soll 
aufleuchten.


Meine Frage: welchen Prescaler muss ich für den Timer 0 Verwenden, dass 
mir der Timer inerhalb einer Sekunde einmal überläuft?

von Dominic A. (neo123)


Lesenswert?

Die Frequenz mit der der Timer läuft berechnet man mit:

umgestellt nach Prescaler:
=

Doch leider kann man schlecht einen Prescaler von 7.8 einstellen.
Somit muss man den Preload anpassen. Mit einem Preload von 6 und einem 
Prescaler von 8 kommst du genau auf eine Timerfrequenz von 1000Hz.

Falls du es nicht selber berechnen willst, gibt es hier ein gutes Tool 
dafür:
http://eng-serve.com/pic/pic_timer.html

von Bastian S. (basti2s)


Lesenswert?

Hallo,

danke für deine Antwort, ich nehme an mit einem Preload meinst du, dass 
ich den Timer nicht auf 0 zurücksetze sondern immer nach einem Überlauf 
von 6 aus wieder starten lasse. Oder?

von Dominic A. (neo123)


Lesenswert?

Ja genau das meine ich.

von Bastian S. (basti2s)


Lesenswert?

Danke, aber irendwie läuft das ganze nicht rund.
Der Timer hat bei einer minute 2Sekunden Toleranz. Je weitere Minute 
kommt 1Sekunde dazu. Warum?

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.