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


von Siegfried S. (dieleena)


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

von ... (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

Dreisatz und etwas gesunder Menschenverstand reicht dazu völlig aus.

...

von Der M. (steinadler)


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.

von DSausW (Gast)


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

von Siegfried S. (dieleena)


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

von Der M. (steinadler)


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.

von Siegfried S. (dieleena)


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

von Der M. (steinadler)


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.

von Siegfried S. (dieleena)


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

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


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.

von Siegfried S. (dieleena)


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

von DSausW (Gast)


Lesenswert?

Hallo Siegfried,

ein paar Tips, da Du scheinbar Herrn und Frau Google
nicht kennst ; )
http://books.google.de/books?hl=de&id=Elui6MrASecC&dq=pic+k%C3%B6nig&printsec=frontcover&source=web&ots=oMEBeUExLT&sig=8ytIqLFxDq1SQWdirBvKm3eNdIk&sa=X&oi=book_result&resnum=5&ct=result
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

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.