Reihe Flaschen
1 Infos Timer
Stoppuhr auf LCD

Timer werden zum Zählen von Ereignissen und für die Zeitsteuerung eingesetzt.

Der dsPIC33-Mikrocontroller besitzt fünf unabhängige 16-bit, bzw. 32-bit Timer mit deren Hilfe sich bspw. Getränkeflaschen zählen lassen oder eine Stoppuhr realisiert werden kann.

Für die Zeitsteuerung zählt der Timer mit einer bestimmten Taktrate. Bei Erreichen eines Sollwertes gibt er ein Signal und beginnt wieder von vorne. Hat man nun den Sollwert auf eine Sekunde eingestellt, erhält man jede Sekunde ein Signal und kann so eine Uhr auf einfache Art und Weise programmieren.

Beim Zählen von Ereignissen wird der Takt durch einen Sensor vorgegeben. Jede Flasche gibt ein Taktsignal. Ist der Sollwert auf 24 eingestellt, hat man die Menge einer Getränkekiste erreicht.

2 noch exaktere Zeiten
Quarz

Für sehr exakte Zeiten kann ein externer Quarz eingesetzt werden.

Nimmt man wie hier einen Quarz mit 10 MHz lässt sich nicht nur der Sekundentakt genauer berechnen, sondern auch die Temperaturabhängigkeit eines solchen Taktgebers ist deutlich geringer.

Der dsPIC33-Mikrocontroller bietet aber auch ohne externen Quarz eine Möglichkeit zur Temperaturkompensation. Hierzu müssen entsprechende Anpassungen in den Steuerregistern der Timer programmiert werden.

Im folgenden wird am Beispiel des Timer 1 die Konfigurationsmöglichkeiten des Timers erklärt.

3 Konfiguration des Timers
Konfigurationsschema des Timers

Das Konfigurationsregister heißt T1CON. Mit Hilfe des TCS-Bits (timer clock source) stellt man ein, ob ein externer(1) oder interner (0) Takt verwendet wird. Mit dem TON-Bit (timer on) aktiviert (1) oder deaktiviert(0) man den Timer. Mit dem TCKS-Bits (timer clock prescale) kann man die Taktfrequenz skalieren und mit dem TGATE-Bit aktiviert (1) oder deaktiviert (0) man den Zählbetrieb.

Im TMR1-Register wird nun bei jedem Takt gezählt, d.h. der Wert um eins erhöht. Im PR1-Register steht der Sollwert. Erreicht der Wert im TMR1-Register den Sollwert wird das TMR1-Register auf Null gesetzt und somit von vorne begonnen.

Zudem wird ein Unterbrechungssignal ausgelöst.

4 Unterbrechungsflagge
Unterbrechungsflagge

Kommt es in der Formel 1 zu einem Unfall wird eine Unterbrechungsflagge gehisst.

Nach dem gleichen Prinzip arbeitet der Timer. Das Unterbrechungssignal wird im IFS0-Register im T1IF-Bit (timer 1 interrupt flag) durch eine logische 1 erkennbar. Dies bedeutet, dass wir durch Überprüfen dieses Bits erkennen können, ob der Timer den vorgegebenen Sollwert erreicht hat.

if(IFS0bits.T1IF == 1) //prüfen ob Sollwert erreicht
{  //...
   IFS0bits.T1IF = 0;
}

Man beachte, dass das T1IF-Bit wieder auf Null zurückgesetzt werden muss.

5 Bibliotheken für den dsPIC33-Mikrocontroller
Bibliothek

Zur Konfiguration des Timer 1 und Timer 2 werden in der entsprechenden Bibliothek die Funktionen void TIMER1init(void); und void TIMER2init(void); bereitgesetellt.

Durch den Aufruf TIMER1init();, bzw. TIMER2init(); werden Timer 1 und Timer 2 initialisiert. Timer 1 ist so vorkonfiguriert, dass er alle 100 ms den Sollwert erreicht, Timer 2 jede Sekunde und so das Unterbrechungssignal auslösen.



Aufgabe 1 Konfiguration des Timers

Steuerregister des Timer

Der Timer 1 des dsPIC33 Mikrocontroller soll konfiguriert werden. Gib die Werte aller Bits im T1CON- und PR1-Register an.

  1. Externer Takt mit fext = 500 Hz. Ziel: Jede Sekunde ein Unterbrechungssignal.
  2. Zähle 24 Getränkeflaschen. Ziel: Alle 24 Flaschen ein Unterbrechungssignal.
  3. Interner Takt mit fint = 3,685 MHz. Ziel: Jede Sekunde ein Unterbrechungssignal.
Steuerregister für Timer 1

Aufgabe 2 Programmieren

aktive LED

Zur Verwendung des Timer wird eine Bibliothek zur Verfügung gestellt. Binde dafür die Datei TIMERconfig.h und TIMERconfig.c in das Projekt ein.

  1. Erstelle das Projekt 09 Timer und schreiben die Datei 09-Timer-1.c, in der mit Hilfe des Timers eine LED im 100-Millisekundentakt blinken lassen.
  2. Variiere die Sollwerte für andere Zeiten im PR1-Register.
    Hinweis: Solltest du die Werte in der Konfiguartionsdatei TIMERconfig.c ändern, stelle sicher, dass am Ende wieder die Originalwerte eingestellt sind.


Aufgabe 3 Uhr mit LCD und Timer 1

LCD Uhr

Programmiere eine Uhr in der Datei 09-Timer-2.c. Verwende hierzu die Variablen sec, min und hour. Falls 60 Sekunden gezählt wurden, setze die Variable sec wieder auf Null und erhöhe min um 1. Erreicht die Variable min den Wert 60, setze diese auf Null und erhöhen hour u.s.w.

Hinweis: Für die Ausgabe der Zeichen am LCD musst du die Werte mit Hilfe des Modulooperators noch umkodieren. Wie das funktioniert hast du beim ADC-Modul bereits kennen gelernt.

Für Fortgeschrittene: Programmiere eine Stoppuhr


Entspann dich erst mal ...

Folgenden Text habe ich mal entdeckt.

Der Text soll als Beweis für die überragende Leistung unseres Gehirns stehen.

Lies nach, wenn du kannst und überzeuge dich selbst.

D1353 M17731LUNG D13N7
4L5 B3W315 D4FU3R,
W45 FU3R 3R574UNL1CH3 D1NG3
UN53R V3R574ND L31573N K4NN.

B331NDRUCK3ND.
4M 4NF4NG W4R'5 5CH0N 5CHW3R,
4B3R J37Z7 L1357 35 D31N G3H1RN
5CH0N 4U70M4715CH. N1CH7 W4HR?
FR3U D1CH DRU3B3R.

Aufgabe 4 Melodie "Bruder Jakob" mit Timer 1 und Timer 2

Programmiere das Lied in 09-Timer-3-Lied.c mit Hilfe der beiden Timer und gebe es am Signalgeber L8 aus.

Noten Burder Jakob

Timer 2 benötigen wir für die Notendauer. Berechne PR2:

Typ Dauer  in ms PR2=T/2
Viertel Note 450
Halbe Note 950
Ganze Note 1850
Pause 50

Timer 1 verwenden wir für die Frequenz der Note.

Berechne PR1:

Ton f in Hz T/2 in μs PR1
C 261,63 1911
D 293,66 1703
E 329,63 1517
F 349,23 1432
G 392,00 1276
A 440,00 1136
H 493,88 1012
C 523,25 956

Aufgabe 5 Steuerung des Timer mit dem ADC

Lauflicht LED

Lese in 09-Timer-4.c den Analogwert am Poti1 ein. Schreibe diesen Wert in das PR2-Register des Timer 2. Steuer so die Geschwindigkeit eines Lauflichts.


Aufgabe 6 Bewässerungssteuerung

Garten

Programmiere in 09-Timer-5.c eine Zeitschaltuhr für die Gartenbewässerung. Morgens und Abends um 06.00 Uhr soll jeweils für 15 Minuten die Gartenbewässerung an L1 aktiviert werden.


© mylime.info