Forum: Mikrocontroller und Digitale Elektronik Timerzeit ausrechnen ???


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.