Timer/Counter - Hochschule Mannheim
Timer/Counter - Hochschule Mannheim Timer/Counter - Hochschule Mannheim
Microcomputing (MCP) 06 Timer/Counter PROF. DR. M. FÖLLER‐NORD INSTITUT EMBEDDED AND MOBILE COMPUTING
- Seite 2 und 3: Timer/Counter • Zeitgeberbasierte
- Seite 4 und 5: Zählen von Ereignissen • Bei jed
- Seite 6 und 7: Erzeugen einmaliger Pulse ‐ Wecke
- Seite 8 und 9: Capture‐ and Compare‐Einheiten
- Seite 10 und 11: General Purpose Timer 1 (GPT1) Prof
- Seite 12 und 13: Eigenschaften des Core‐Timers T3
- Seite 14 und 15: Aufgabenstellung 1 • Verwendung d
- Seite 16 und 17: Das Konfigurationsregister des Time
- Seite 18 und 19: Zählrichtung von T3 Kein externes
- Seite 20 und 21: Aufgabenstellung 2 • An den Mikro
- Seite 22 und 23: Timer T3 als Gated Timer /* Bestimm
- Seite 24 und 25: T3 in Counter‐Mode Prof. Dr. M. F
- Seite 26 und 27: Timer T3 als Counter /* Timer T3 al
- Seite 28 und 29: Aufbau von GPT1 Auxiliary- Timer Co
- Seite 30 und 31: Auxiliary‐Timer T2 und T4 Prof. D
- Seite 32 und 33: T2/T4 in Counter Mode T3OTL Prof. D
- Seite 34 und 35: Timer‐Kaskadierung Prof. Dr. M. F
- Seite 36 und 37: Aufgabenstellung 5 • Mit dem Mikr
- Seite 38 und 39: Reload Mode • T3 kann aufgrund ei
- Seite 40: Aufgabenstellung 6: Übungsaufgabe
Microcomputing (MCP)<br />
06 <strong>Timer</strong>/<strong>Counter</strong><br />
PROF. DR. M. FÖLLER‐NORD<br />
INSTITUT EMBEDDED AND MOBILE COMPUTING
<strong>Timer</strong>/<strong>Counter</strong><br />
• Zeitgeberbasierte Einheiten<br />
◦ Wichtig für Echtzeitanwendungen Basis für viele<br />
Mikrocontroller‐Komponenten<br />
• Grundaufgaben von Zählern und Zeitgebern<br />
(<strong>Counter</strong> and <strong>Timer</strong>)<br />
◦ Zählen von Ereignissen<br />
◦ Messen von Zeiten<br />
◦ Wecken<br />
◦ Erzeugung von Impulsfolgen<br />
l<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong><br />
2
Prinzipieller Aufbau <strong>Timer</strong>/<strong>Counter</strong><br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 3
Zählen von Ereignissen<br />
• Bei jeder steigenden Flanke des externen Taktes<br />
wird der Zählerstand um 1 erhöht.<br />
• Bsp: Zählen von Gegenständen, die in einer<br />
Produktionsanlage eine Lichtschranke passieren<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 4
Messen von Zeiten<br />
• Zählen der steigenden Flanken des internen (oder externen) Taktes.<br />
• Multiplikation mit Taktzykluszeit<br />
• Maximaler Fehler: 2 Taktzyklen<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 5
Erzeugen einmaliger Pulse ‐ Wecken<br />
Underflow<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 6
Erzeugen mehrmaliger Impulse<br />
Underflow<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 8
Capture‐ and Compare‐Einheiten<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 9
<strong>Timer</strong>/<strong>Counter</strong><br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 11
General Purpose <strong>Timer</strong> 1 (GPT1)<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 12
Der Core‐<strong>Timer</strong><br />
T3<br />
<strong>Timer</strong>‐Funktion<br />
f CPU<br />
T3IN<br />
T3EUD<br />
2 n :1<br />
T3<br />
Mode<br />
Control<br />
U/D<br />
GPT1 <strong>Timer</strong> T3<br />
Toggle<br />
T3OTL<br />
Interrupt<br />
Request<br />
T3OUT<br />
<strong>Counter</strong>‐Funktion<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 13
Eigenschaften des Core‐<strong>Timer</strong>s<br />
T3<br />
• Steuerung über das Register T3CON<br />
• Eingangssignale<br />
◦ <strong>Timer</strong> 3 Input (T3IN)<br />
◦ <strong>Timer</strong> 3 External Up/Down Control (T3EUD)<br />
• 16 Bit‐Zähler<br />
• Als Aufwärts‐ oder Abwärtszähler programmierbar<br />
• Umschaltung der Zählrichtung<br />
◦ per Software<br />
◦ über Signal an T3EUD<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 14
Betriebsarten des <strong>Timer</strong> T3<br />
• <strong>Timer</strong><br />
◦ Tk Takt des <strong>Timer</strong>s wird idvom Systemtakt abgeleitet<br />
• Gated <strong>Timer</strong><br />
◦ negatives Gate<br />
• Starten des <strong>Timer</strong>s über ein negativen Gate‐Signal<br />
• Stoppen des <strong>Timer</strong>s mit einem positiven Gate‐Signal<br />
◦ positives Gate<br />
• Starten des <strong>Timer</strong>s über ein positives Gate‐Signal<br />
• Stoppen des <strong>Timer</strong>s mit einem negativen Gate‐Signal<br />
• <strong>Counter</strong><br />
◦ Taktsignal wird über T3IN angelegt.<br />
◦ Auslösen eines Taktimpulses bei positiver, negativer Flanke<br />
• Incremental Interface<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 15
Aufgabenstellung 1<br />
• Verwendung des Microcontrollers als Alarmgeber:<br />
• Der Microcontroller soll nach einer festgelegten<br />
Zeitspanne ein einziges Mal einen Alarm auslösen<br />
◦ Beispiel: ein Alarm soll 3 Sekunden nach einem Reset<br />
ausglöst werden<br />
◦ Das Alarmsignal wird dadurch erzeugt, das man alle Pins<br />
des Port 2 auf High‐Pegel setzt.<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 16
T3 in <strong>Timer</strong> Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 17
Das Konfigurationsregister des <strong>Timer</strong>s T3<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 18
<strong>Timer</strong> Frequenzen und Auflösungen<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 19
Zählrichtung von T3<br />
Kein externes<br />
Umschalten der<br />
Zählrichtung<br />
Umschalten der<br />
Zählrichtung<br />
durch externes<br />
Signal möglich<br />
Bit<br />
T3UDE<br />
Pin<br />
T3EUD<br />
Bit T3UD<br />
XOR<br />
(T3EUD, T3UD)<br />
0 ‐ 0 ‐ Up<br />
0 ‐ 1 ‐ Down<br />
1 0 (o (Low) 0 0 Up<br />
1 1(High) 0 1 Down<br />
1 0 (Low) 1 1 Down<br />
1 1(High) 1 0 Up<br />
Zählrichtung<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 20
<strong>Timer</strong> T3 als <strong>Timer</strong> – Einmalauslösung<br />
/* <strong>Timer</strong> T3 Einmalauslösung nach ca. 3 s */<br />
#include <br />
void main()<br />
{<br />
DP2 = 0xFFFF; // Port P2 als Ausgabe<br />
P2=0;<br />
// Ausgabe löschen<br />
IEN=1;<br />
// alle Interrupts enabled<br />
T3=58593;<br />
// Startwert des <strong>Timer</strong>s<br />
T3CON= 0x287; // 00000 1 0 1 0 000 111<br />
T3IC= 0x44; // 01 0001 00<br />
T3R=1;<br />
// Starte <strong>Timer</strong><br />
while(1);<br />
// Programm läuft in Endlosschleife<br />
}<br />
void zahl (void) interrupt 0x23<br />
{<br />
P2=0xFFFF;<br />
//Ausgabe auf highh<br />
IEN=0;<br />
//Interrupts sperren<br />
T3R=0;<br />
//<strong>Timer</strong> sperren<br />
}<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 21
Aufgabenstellung 2<br />
• An den Mikrocontroller ist ein Taster angeschlossen<br />
• Es soll ausgemessen werden, wie lange dieser Taster<br />
gedrückt wird.<br />
• Man kann davon ausgehen dass der Taster maximal 3<br />
Sekunden gedrückt wird<br />
+5V<br />
10k<br />
C167CR-LM<br />
Ta<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 22
T3 in Gated <strong>Timer</strong> Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 23
<strong>Timer</strong> T3 als Gated <strong>Timer</strong><br />
/* Bestimme Länge eines Tastendrucks */<br />
#include <br />
void main()<br />
{<br />
T3=0;<br />
// Startwert des <strong>Timer</strong>s<br />
T3CON= 0x57; // 00000 0 0 0 1 010 111<br />
while(1)<br />
{<br />
while (T3IN==1){} // warten, solange HIGH-Pegel<br />
while (T3IN==0){} // warten, solange LOW-Pegel<br />
calc_time();<br />
// Zeit berechnen<br />
print_time(); // Zeit ausgeben<br />
}<br />
}<br />
void calc_time()<br />
{<br />
unsigned long TIME;<br />
TIME=T3*51.2E-6;<br />
T3=0;<br />
}<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 24
Aufgabenstellung 3<br />
• An den Mikrocontroller ist ein Taster angeschlossen<br />
• Es soll mitgezählt werden, wie oft der Taster<br />
gedrückt wird.<br />
+5V<br />
10k<br />
C167CR-LM<br />
Ta<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 25
T3 in <strong>Counter</strong>‐Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 26
T3 als <strong>Counter</strong>: Selektion der Flanke<br />
• T3IN an P3.6<br />
• => P3.6 muss als Input konfiguriert sein<br />
• Maximale Zählfrequenz ist f CPU /16.<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 27
<strong>Timer</strong> T3 als <strong>Counter</strong><br />
/* <strong>Timer</strong> T3 als <strong>Counter</strong>: Zählt fallende Flanken an P3.6<br />
und gibt T3 an P2 aus */<br />
#include <br />
sbit DP3_6=DP3^6;<br />
void main()<br />
{<br />
DP2 = 0xFFFF; // Port P2 als Ausgabe<br />
DP3_6=0;<br />
// Pin P3^6 als Input<br />
P2=0;<br />
// Ausgabe löschen<br />
T3=0;<br />
// Startwert des <strong>Counter</strong>s<br />
T3CON= 0x24a; // 00000 0 1 0 0 1 001 010<br />
while(1)<br />
// Programm läuft in Endlosschleife<br />
{<br />
P2=T3;<br />
}<br />
}<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 28
Aufgabenstellung 4<br />
• An den Mikrocontroller ist ein Taster angeschlossen<br />
• Es soll ausgemessen werden, wie lange dieser Taster<br />
gedrückt wird.<br />
• Man muss davon ausgehen dass der Taster länger als<br />
3 Sekunden gedrückt werden kann<br />
+5V<br />
10k<br />
C167CR-LM<br />
Ta<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 29
Aufbau von GPT1<br />
Auxiliary-<br />
<strong>Timer</strong><br />
Core-<br />
<strong>Timer</strong><br />
Auxiliary-<br />
<strong>Timer</strong><br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 30
Auxiliary‐<strong>Timer</strong> T2 und T4<br />
• T2 und T4 sind „Hilfszähler“ für T3<br />
• Sie besitzen kein Ausgangssignal TxOUT<br />
• Steuerung über T2CON bzw. T4CON<br />
• Eingangssignale T2IN, T4IN<br />
• External Up/Down Control T2EUD, T4EUD<br />
• Betriebsarten:<br />
◦ <strong>Timer</strong><br />
◦ <strong>Counter</strong><br />
◦ Gated <strong>Timer</strong><br />
◦ Reload Mode<br />
◦ Capture Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 31
Auxiliary‐<strong>Timer</strong> T2 und T4<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 32
Auxiliary‐<strong>Timer</strong> T2 und T4<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 33
T2/T4 in <strong>Counter</strong> Mode<br />
T3OTL<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 34
T2/T4 in <strong>Counter</strong> Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 35
<strong>Timer</strong>‐Kaskadierung<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 36
<strong>Timer</strong>‐Kaskadierung<br />
/* Bestimme Länge eines Tastendrucks */<br />
#include <br />
void main()<br />
{<br />
T3=0;<br />
// Startwert des <strong>Timer</strong>s<br />
T3CON= 0x57; // 000000 0 0 0 1 010 111<br />
T2=0;<br />
T2CON=0x000f; // 000000 0 0 0 0 001 111<br />
T2R=1;<br />
while(1)<br />
{<br />
while (T3IN==1){} // warten, solange HIGH-Pegel<br />
while (T3IN==0){} // warten, solange LOW-Pegel<br />
calc_time();<br />
// Zeit berechnen<br />
print_time(); // Zeit ausgeben<br />
}<br />
}<br />
void calc_time()<br />
{<br />
unsigned long TIME;<br />
TIME=(T3+T2*65536)*51.2e-6;<br />
T3=0;<br />
T2=0;<br />
}<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 37
Aufgabenstellung 5<br />
• Mit dem Mikrocontroller soll ein Rechtecksignal mit<br />
der Frequenz von 50 Hz erzeugt werden<br />
U<br />
T/2<br />
T<br />
t<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 38
Auxiliary‐<strong>Timer</strong> in Reload Mode<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 40
Reload Mode<br />
• T3 kann aufgrund eines Reload‐Taktimpulses<br />
nachgeladen werden und zwar<br />
◦ mit einem Reload‐Register‐Wert des <strong>Timer</strong>s T2 oder<br />
◦ mit einem Reload‐Register‐Wert des <strong>Timer</strong>s T4<br />
• Reload‐Taktimpuls wird ausgelöst von:<br />
◦ positiver und/oder negativer Flanke von Pin TxIN<br />
◦ positiver/negativer Flanke von T3OTL<br />
• <strong>Timer</strong> T2 und T4 sind hierbei von einer Taktquelle<br />
abgeschaltet –zählen selber also nicht – sondern<br />
dienen nur als Register zum Nachladen eines<br />
Wertes.<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 41
<strong>Timer</strong> T3 im Reload‐Modus<br />
/* <strong>Timer</strong> T3 nachgeladen von T2 */<br />
/* Realisiert einen Frequenzgenarator mit f=50 Hz */<br />
#include <br />
sbit DP3_3=DP3^3;<br />
sbit P3_3=P3^3;<br />
void main()<br />
{<br />
DP3_3=1;<br />
// Pin P3^36 als Output<br />
P3_3=1;<br />
// P3^3 auf high<br />
T2CON=0x27; // 00000 0 0 0 0 0 100 111<br />
T2=25000;<br />
// Nachladewert<br />
T3=0;<br />
// Startwert des <strong>Counter</strong>s<br />
T3CON= 0x2c0; // 00000 0 1 0 1 1 000 000<br />
while(1);<br />
// Programm läuft in Endlosschleife<br />
}<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 42
Aufgabenstellung 6: Übungsaufgabe<br />
• Mit dem Mikrocontroller soll ein PWM‐Signal mit<br />
unten dargestellten Tastverhältnis erzeugt werden.<br />
U<br />
200 s<br />
800 s<br />
T<br />
t<br />
Prof. Dr. M. Föller-Nord, Institut EMC, <strong>Hochschule</strong> <strong>Mannheim</strong> 43