Forum: Mikrocontroller und Digitale Elektronik Timer Pin T0 und T1


von Thomas F. (tfreal10)


Lesenswert?

Habe im AVR Tutorial gerade was über Timer gelesen!

und da gibt es den Pin T0 also da wird der zustand bzw die Flanke im 
register angegeben! Was kann ich damit anfangen? kann ich den Timer 
dadurch starten bzw. stoppen?

Und warum wird der Pin T1 nicht erwähnt?

Wie kann man diese Register sehen? Für was braucht man die? Also ich 
schreib ja in TCCR den Vorteiler rein! Also wie oft geteilt werden soll 
aber was hat der Pin T0 da drin zu suchen? Verändert der den 
Vorteiler????



 TCCR0
 +------+------+------+------+------+------+------+------+
 |      |      |      |      |      | CS02 | CS01 | CS00 |
 +------+------+------+------+------+------+------+------+
 CS02 - CS00   Clock Select
CS02 CS01 CS00 Bedeutung
0 0 0 keine (Der Timer ist angehalten)
0 0 1 Vorteiler: 1
0 1 0 Vorteiler: 8
0 1 1 Vorteiler: 64
1 0 0 Vorteiler: 256
1 0 1 Vorteiler: 1024
1 1 0 Externer Takt vom Pin T0, fallende Flanke
1 1 1 Externer Takt vom Pin T0, steigende Flanke

von Sven P. (Gast)


Lesenswert?

>0 0 0 keine (Der Timer ist angehalten)
Klar, der Timer pennt und der Wert im Zählregister (TCNT0) bleibt 
stehen.

>0 0 1 Vorteiler: 1
>0 1 0 Vorteiler: 8
>0 1 1 Vorteiler: 64
>1 0 0 Vorteiler: 256
>1 0 1 Vorteiler: 1024
Der Wert im Zählregister wird kontinuierlich um eins erhöht, und zwar 
mit dem Takt der CPU, nachdem dieser durch den Vorteiler geteilt wurde.
Beispiel: Vorteiler 010 (=Teiler durch 8) und einem Systemtakt von 8MHz 
(Quarz mit 8MHz zum Beispiel). Dann wird der Wert im Zählregister mit 
8MHz/8 erhöht, also mit 1MHz. D.h., er wird eine Million Mal pro Sekunde 
um eins erhöht.


>1 1 0 Externer Takt vom Pin T0, fallende Flanke
>1 1 1 Externer Takt vom Pin T0, steigende Flanke
Gleiches Spiel wie oben, nur diesmal wird nicht der Systemtakt vom Quarz 
genommen (und ggf. noch geteilt), sondern der Takt, der am T0-Pin 
aliegt. Kannst irgendein Rechtecksignal oder sowas dran anklemmen.

T1 funktioniert genauso, nur halt für den Timer#1.

von AVRFan (Gast)


Lesenswert?

>und da gibt es den Pin T0 also da wird der zustand bzw die Flanke im
>register angegeben! Was kann ich damit anfangen? kann ich den Timer
>dadurch starten bzw. stoppen?

Das Ding, das hier immer "Timer" genannt wird, heißt mit vollem Namen 
"Timer/Counter", abgekürzt "T/C0".  Über die Bits CS02, CS01, CS00 im 
TCCR0-Register kannst Du seine Betriebsart festlegen, d. h. ob das Ding 
als Timer oder als Counter funktionieren soll (solange es nicht 
angehalten ist).  Ist es ein Timer, wird es vom µC-internen Takt (nach 
wahlweiser Teilung durch den Prescaler) hochgezählt.  Ist es ein 
Counter, wird es vom Signal am Pin T0 hochgezählt (mit jeder Flanke eins 
rauf).

Analog für T/C1, T/C2 etc.

von Thomas F. (tfreal10)


Lesenswert?

Aha also für den Counter gibts dann aber auch keinen prescaler oder? den 
müsst ich mir dann selber schreiben

von AVRFan (Gast)


Lesenswert?

>für den Counter gibts dann aber auch keinen prescaler oder?

Nein, gibt es nicht.

>den müsst ich mir dann selber schreiben

Kommt darauf an, welches Problem Du konret lösen willst.  Das 
Timer/Counter-Feature eines AVR-Controllers kann man in der Betriebsart 
Counter z. B. dazu benutzen, periodische Signale zu erfassen, die so 
schnell sind, dass sie softwaremäßig nicht mehr bewältigt werden können. 
Man kann aber eine Routine schreiben, die den TCNT0 resettet, T/C0 in 
den Modus Counter versetzt, danach 100 mal "nop" abarbeitet, 
anschließend den T/C anhält und den Zählerstand TCNT0 in eine Variable 
speichert.  Während der durch die "nop"s erzeugten Wartezeit zählt der 
Counter autonom die Pulse des am Pin T0 anliegenden Signals. Für dessen 
Hardware ist die hohe Frequenz kein Problem (bis zu gewissen Grenzen). 
Mit dem Wissen, wie viele steigende Signalflanken während der 100 
µC-Taktzyklen reingekommen sind, kennst Du die Frequenz des Signals.

von Jadeclaw D. (jadeclaw)


Lesenswert?

Thomas Frosch wrote:
>für den Counter gibts dann aber auch keinen prescaler oder?
>den müsst ich mir dann selber schreiben
Prescaler kann man sich nicht schreiben, das ist Hardware.
Was du selber schreiben kannst, ist ein Postscaler,
also ein Teiler der nach dem Timer kommt,
z.B. ein Register, das bei jedem Timerüberlauf um 1 hochgezählt
wird. Einen Prescaler kann man vor den T0- oder T1-Eingang setzen,
wenn der Bereich des Controllers nicht reicht.
Ein AVR kann an T0/T1 maximal 50% des CPU-Taktes verarbeiten,
d.h. bei 8MHz Takt ist bei 4MHz Zählfrequenz schluß.
Setzt man z.B. einen 74LS90 davor, sind 25MHz drin,
da ist für den 74LS90 die Grenze.

Gruß
Jadeclaw.

PS: @AVRFan: Für genaue Verzögerungen wie Zählergates doch bitte
einen Timer benutzen, NOP-Sammlungen und Warteschleifen nehmen
unnötig Platz weg und machen das Ganze schlecht wartbar.

von Thomas F. (tfreal10)


Lesenswert?

gg

Ok Danke aber so schnell will ich erstmal noch nicht Zählen!! Ich meinte 
schon einen Postscaler kenn mich mit diesen fachbegriffen noch nicht aus 
gg aber gut ez hab ich wieder was gelernt!

Danke für die Antworten

bis bald

von AVRFan (Gast)


Lesenswert?

>Für genaue Verzögerungen wie Zählergates doch bitte
>einen Timer benutzen, NOP-Sammlungen und Warteschleifen nehmen
>unnötig Platz weg und machen das Ganze schlecht wartbar.

Kann ja sein, dass ein Timer gar nicht mehr zur Verfügung steht, weil er 
gerade als Counter verwendet wird... ;-)  Und zur Konfiguration eines 
Timers muss man ja auch Code schreiben.  Ich denk, in gewissen Fällen 
und wenn man weiß, was man tut, sind kurze 'nop'-Warteschleifen sowohl 
erlaubt als auch sinnvoll als auch (bei disableten Interrupts) präzise, 
aber - und darin stimme ich Dir zu - eben auch nur in diesen Fällen.

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.