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
>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.
>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.
Aha also für den Counter gibts dann aber auch keinen prescaler oder? den müsst ich mir dann selber schreiben
>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.
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.
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.