www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitberechnung für einen Timer


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Bin neu auf diesem Gebiet. Daher stelle ich folgende Frage.
Wie berechne ich die Zeit für einen Timer.
Der Pic wird mit 4 MHz getaktet.
Der Pic soll alle 50 ms einen Interrupt auslösen.
Gruß Siegfried

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuerst, Wieviele Häppchen zu 250ns sind in 50ms ? So hoch muss ein 
Zaehlen nun zaehlen, allenfalls gibt's noch einen selektierbaren 
Vorteiler.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dreisatz und etwas gesunder Menschenverstand reicht dazu völlig aus.

...

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Siegfried,

also im Grunde hat jeder Timer ein Kontrollregister, in welchem du einen 
sogenannten Prescaler setzen kannst.
Dies ist ein Vorteiler, welcher dir deine Oszillatorfrequenz teilt.

Dann kommts drauf an, was du für einen Timer hast. 8 oder 16 bit.

Ein 8-Bit Timer zählt, je nach eingestelltem Prescaler, von 0-255.

Aber Vorsicht! Bei PICs bedeutet die Grundfrequenz für den Timer 
Quarzfrequenz / 4.
Es sei denn, dein µC hat ne interne *4-PLL eingestellt.

Die Vorgehensweise ist folgende:

1. Periodendauer der Frequenz/4 ausrechnen
   1000ms / 1000000Hz => 0,001ms
2. deine benötigte Zeitdauer (50ms) durch die Periodendauer teilen.
   Falls du einen PreScaler zur Verfügung hast, kannst du den auch 
verwenden, indem du die Periodendauer damit multiplizierst.
   Somit hast du einen Wert, mit mit dessen Differenz zum Max-Wert, du 
das Timer-Register bei jeden    Überlauf beladen musst.

Autor: DSausW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Siegfried,

DER PIC - gut, das es nur einen Typ gibt ; )
sonst ergänzend:
http://www.sprut.de/electronic/pic/grund/inout.htm#timer

Viel Spass dabei
Dietmar

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

übrigens, PIC = 18F252

Habe dieses Beispiel gefunden.
/*    Timer 2 Init      */
PIR1bits.TMR1IF = 0;    //  BIT 0  TMR1 Overflow Interrupt Flag bit
T1CONbits.T1OSCEN = 0;  //  BIT 3  Timer1 Oscillator Enable bit
T1CONbits.TMR1CS = 0;   //  BIT 1  Timer1 Clock Source Select bit
TMR1H = Timer1High;     //  => 238
TMR1L = Timer1Low;        //  => 120
T1CONbits.TMR1ON = 1;   //  BIT 0  Enable Timer1
INTCONbits.GIE = 1;     //  BIT 7  Global Interrupt Enable bit
INTCONbits.PEIE = 1;    //  BIT 6  Peripheral Interrupt Enable bit
PIE1bits.TMR1IE = 1;    //  BIT 0  TMR1 Overflow Interrupt Enable bit
PIR1bits.TMR1IF = 0;    //  BIT 0  TMR1 Overflow Interrupt Flag bit
    //**hier 50ms => 20Hz EREIGNIS**//

Wie kommt er auf die Werte 238 bzw 120 ?

Gruß Siegfried

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist die Frage.

Also bei diesen beiden Werten komme ich auf eine Taktfrequenz von 
1.220.980, wenn ich mich nicht verrechnet habe.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Weicht etwas von der Fragestellung ab.
In der Interrupt Routine unterbinde ich mit
"T1CONbits.TMR1ON = 0;   // Timer ausschalten"
einen weiteren Interrupt.
dann die Code abarbeiten und am Schluß
"T1CONbits.TMR1ON = 1;   // Enable Timer1"
zur erneuten freigabe.
reicht dieses ""T1CONbits.TMR1ON = 1;" aus oder muß ich auch die Zeit 
erneut in die Register laden?
Gruß Siegfried

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siegfried Saueressig wrote:
> Hallo,
> Weicht etwas von der Fragestellung ab.
> In der Interrupt Routine unterbinde ich mit
> "T1CONbits.TMR1ON = 0;   // Timer ausschalten"
> einen weiteren Interrupt.
> dann die Code abarbeiten und am Schluß
> "T1CONbits.TMR1ON = 1;   // Enable Timer1"
> zur erneuten freigabe.
> reicht dieses ""T1CONbits.TMR1ON = 1;" aus oder muß ich auch die Zeit
> erneut in die Register laden?
> Gruß Siegfried

Das sollte im Datenblatt stehen.
Falls du Probleme hast, ein englisches Datenblatt zu lesen, musst du das 
hier einfach mal mit sagen. Es gibt genug, die damit umgehen können.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo guten morgen,

Wie anfangs geschriebe, bin ich neu auf diesem Gebiet. Datenblätter kann 
ich teilweise lesen/verstehen. Hauptgrund ist aber, das ich kein 
englisch in der Schule (1957-1965) gelernt habe. Versuch aber immer, das 
beste daraus zu machen. Ein gutes Buch habe ich noch nicht gefunden. 
Eins habe ich gekauft, hätte mir aber die 40 Euro sparen können.
mit dem Timer bin ich weiter gekommen. Anhand dem Link von Dietmar habe 
ich gesehen, das der Timer vom übergebene Wert bis zum maximalem 
Zählerwert 0xFF bzw 0xFFFF läuft und dann bei Überlauf einen Interrupt 
auslößt. Also muß ich zum erneutem starten des Timers nicht nur das Bit 
"T1CONbits.TMR1ON" setzen, sonder auch davor die Werte für TMR1H & TMR1L 
Register übergeben.
Habe aber noch eine Frage zum TMR1H & TMR1HL Register.
z.B. Habe den Wert 1200. Dann ist 1200 : 256 = 4 Rest 176
das müsste doch falsch sein. Übergebe 4 dem TMR1H und 176 dem TMR1L.
Ist dieses so richtig? 256-4=252  ->  TMR1H und 256-176=80  ->  TMR1L.
Gruß Siegfried

Autor: Alex Bürgel (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach es doch andersrum:

2^16 sind 65.535, das ist der maximale Wert den der Timer annehmen kann.
Du möchtest das er 1200 mal hochzählt, also 65.535-1200=64335. Und 64335 
wiederum sind 1111.1011.0100.1111 in binärer Darstellung.

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,
Danke für die Info. Das mit der binärer Darstellung ist klasse. Hast du 
dazu einen Rechner, der Dezimal nach Binärer arbeitet.
Gruß an alle
Siegfried

Autor: DSausW (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Siegfried,

ein paar Tips, da Du scheinbar Herrn und Frau Google
nicht kennst ; )
http://books.google.de/books?hl=de&id=Elui6MrASecC...
Anne und Manfred König sind Urgesteine der PIC-Welt in Deutschland.
Auch von Elektor gibt es PIC-Bücher.
Die kenne ich aber nicht. Das heisst allerdings auch nichts.
Dann http://www.fernando-heitor.de/ in Deutsch.

Dann: Wie wäre es mit dem Windows-Rechner (Unter Zubehör) ??
Der kann unter "Wissenschaftlich" HEX DEC, etc.

Gruss
Dietmar

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.