Forum: Mikrocontroller und Digitale Elektronik Timerzeit ausrechnen ???


von Thomas (Gast)


Lesenswert?

Jo Hallo
Wie tut man den für die Timer bei einem Pic16f872 Prozessor die Zeit 
ausrechnen. Soviel ich weiß zählt er bei einm 8Bit Timer immer von 
X-255, X kann man selber vorgeben aber mit was für einer Zeit muss ich 
den Wert der zwischen X-255 rauskommt multiplizieren. Wenn es die 
Zykluszeit für einen Befehl ist hab ich keine Ahnung wie ich die 
ausrechne. Mein Quarz läuft mit 4 MHZ. Zykluszeit = ???????
Gruß Ram99

von Reiner (Gast)


Lesenswert?

Zykluszeit T = 1/f0
bei 4MHz sind das 100ns weil der PIC intern durch 4 teilt!

Du must den prescaler des PIC's auch einstellen

1:1, 1:2, 1:4 ... 1:256


Wenn Du eine Zeit t mit einem Timer realisieren willst, brauchst
Du nur die folgende Rechnung

Quarz/4 * t = n,  Anzahl der CPU-Zyklen

dann n so durch die möglichen Prescaler Einstellungen teilen damit Du 
einen Wert zwischen 0 und 255 bekommst

den ziehst Du dann von 256 ab

Example:

  Quarz = 4MHz
  t     = 1ms  = 1EE-3s

  4MHz/4 * 1EE-3s = 1000 Zyklen

  1000/8 = 125       prescaler=8

  256-125 = 131 Timerwert

  Initialisiere den Prescaler auf 1/8 und übergebe dem Timer der Wert 
131.

Denke daran, das Du bei einer zyklischen Interruptroutine den Timerwert 
130 in der Timerserviceroutine reloadest!

Reiner

von Thomas (Gast)


Lesenswert?

Jo vielen Dank, genau das hab ich gesucht. Nur eins hab ich nicht 
verstanden, was soll das mit dem 1EE-3s ?? Soll das 1EE eine Hexzahl 
sein 494 ?? Wenn ich keinen prescaler setzen möcht muss ich dann-> 
setup_timer_0 (RTCC_INTERNAL); setzen oder geht es nur mit prescaler.

Was macht denn bei AD-Wandler die Zeile->
setup_adc(ADC_CLOCK_DIV_X);   X= 2,8,32,off,Internal

Gruß
   Thomas

von Reiner (Gast)


Lesenswert?

>Nur eins hab ich nicht verstanden, was soll das mit dem 1EE-3s

1EE-3 = 1*10hochminus3= 0.001
reiner

>setup_adc(ADC_CLOCK_DIV_X); X= 2,8,32,off,Internal

Ein Unterprogrammaufruf in dem der ADC initialisiert wird.
Der hat auch einen prescaler und einen internen langsamen RC-Oszillator. 
Hier musst Du Deine gewünschte Konfiguration für den ADC angeben. 
Vermutlich ist das übergebene Byte exact
für für des CPU-Register ADCON0 bestimmt.

Reiner

von Thomas (Gast)


Lesenswert?

Jo vielen Dank für die Antwort.

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.