Hallo zusammen,
ich arbeite gerade im Datenblatt zum ATtiny13 das Kapitel
" 8-bit Timer/Counter0 with PWM " durch.
Dort taucht folgender Text auf Seite 72 zu den Clock Select Bits auf (
unterhalb der Tabelle 33 ).
If external pin modes are used for the Timer/Counter0, transitions on
the T0 pin will clock the counter even if the pin is configured as an
output. This feature allows software control of the counting.
Die Schaltbilder bzw. Blockschaltbilder im Datenblatt machen mir es
nicht verständlich was damit gemeint sein könnte.
Wie kann das Programm bzw. Software das takten kontrollieren, wenn das
Programm nur abgearbeitet werden kann, wenn es erst durch eine
Taktschaltung zu Leben gebracht wird ?
Und wie kann ich eine externe Taktquelle benutzen, wenn der PIN als
Ausgang konfiguriert ist ?
Gibt es dazu irgendwelche Detailbilder ?
Kann leider den Dataianhang nicht mehr löschen. Hätte wahrscheinlich das
Datenblatt als Link hingerlegen sollen.
Bernd_Stein
Bernd Stein schrieb:> Wie kann das Programm bzw. Software das takten kontrollieren, wenn das> Programm nur abgearbeitet werden kann, wenn es erst durch eine> Taktschaltung zu Leben gebracht wird ?
Der Takt an T0 taktet nicht die CPU des Controllers, sondern wird vom
Timer0 "gezählt". T0 ist also ein Zähleingang zur Nutzung des Timers als
Zähler.
...
Hannes Lux schrieb:>> Der Takt an T0 taktet nicht die CPU des Controllers, sondern wird vom> Timer0 "gezählt". T0 ist also ein Zähleingang zur Nutzung des Timers als> Zähler.>
Oh, ja, klar, Danke. Da hab ich es wieder T0 ist ein Zähleingang, das
macht ja auch Sinn.
If external pin modes are used for the Timer/Counter0, transitions on
the T0 pin will clock the counter even if the pin is configured as an
output.
" This feature allows software control of the counting. "
Der letzte Satz macht mich jedoch kirre.
Softwaremäßig kann ich doch immer darauf zugreifen. Es wird doch nur ein
internes Register hochgezählt das man unter anderem auch auslesen kann.
Das man mit dem als Augang geschalteten Pin immernoch die
Eingangsimpulse zählt, geht irgendwie nicht in meinem Kopf.
Und schon gar nicht wozu das Gut sein soll.
Was fange ich mit solch einem " Feature " an ?
Bernd_Stein
Bernd Stein schrieb:> T0 ist ein Zähleingang, das> macht ja auch Sinn.
Richtig, man kann Dinge zählen, ohne das laufende Programm unterbrechen
zu müssen. Und man kann Interrupts nutzen, um auf bestimmte Zählerstände
zu reagieren.
>> If external pin modes are used for the Timer/Counter0, transitions on> the T0 pin will clock the counter even if the pin is configured as an> output.
Man kann nicht nur externe Impulse zählen, sondern auch die Impulse, die
das Programm an diesem (als Ausgang geschalteten) Portpin ausgibt.
>> " This feature allows software control of the counting. "
Dies erlaubt das Zählen von per (im AVR laufender) Software erzeugten
Ereignissen.
>> Der letzte Satz macht mich jedoch kirre.> Softwaremäßig kann ich doch immer darauf zugreifen. Es wird doch nur ein> internes Register hochgezählt das man unter anderem auch auslesen kann.
Und das Interrupts auslösen kann, das damit allerhand Unsinn im
Hintergrund erledigen kann, ohne dass das Programm da ständig nachschaun
muss.
>> Das man mit dem als Augang geschalteten Pin immernoch die> Eingangsimpulse zählt, geht irgendwie nicht in meinem Kopf.
Es zählt dann halt die selbst erzeugten Ausgangsimpulse...
> Und schon gar nicht wozu das Gut sein soll.
Es kann ja auch sein, dass man hier eine Gegebenheit als "Feature"
verkauft. Man informiert uns darüber, dass der Timer nicht nur externe
Impulse zählt, sondern auch intern erzeugte Impulse, also dass man den
Zähleingang vom Timer nicht vom I/O-Pin T0 trennt, wenn der I/O-Pin als
Ausgang konfiguriert wird.
>> Was fange ich mit solch einem " Feature " an ?
Sieh es nicht als "Feature", für das Du Aufpreis bezahlt hast, sondern
einfach nur als die Erklärung einer Eigenschaft. Das Ding zählt die
Flanken am Portpin, egal woher sie kommen.
...
Hannes Lux schrieb:>>>> If external pin modes are used for the Timer/Counter0, transitions on>> the T0 pin will clock the counter even if the pin is configured as an>> output.>> Man kann nicht nur externe Impulse zählen, sondern auch die Impulse, die> das Programm an diesem (als Ausgang geschalteten) Portpin ausgibt.>>>>> " This feature allows software control of the counting. ">> Dies erlaubt das Zählen von per (im AVR laufender) Software erzeugten> Ereignissen.>
....
>> Es zählt dann halt die selbst erzeugten Ausgangsimpulse...>
....
>>>> Was fange ich mit solch einem " Feature " an ?>> Sieh es nicht als "Feature", für das Du Aufpreis bezahlt hast, sondern> einfach nur als die Erklärung einer Eigenschaft. Das Ding zählt die> Flanken am Portpin, egal woher sie kommen.>> ...>
Vielen Dank für Deine umfassende Erklärung Hannes Lux.
Was ich jetzt frage könnte ich auch praktisch erproben, aber habt bitte
Nachsicht, denn wenn man nicht so die Ahnung hat, kann man im
praktischen Teil - nur weil irgendein Bit falsch gesetzt ist - ziemlich
lange einen Fehler suchen den man eingebaut hat ohne dies zu bemerken.
Deshalb frage ich um die Zeit effektiver zu nutzen.
Wenn der T0-Pin als Ausgang konfiguriert ist, dann kann ich doch
bestimmt keine externen Impulse zählen oder ?
Ich mein die Erklärung vom Hannes weisst ja schon darauf hin das die das
mit dem
"...even if the pin is configured as an output. "
nicht so wörtlich meinen, aber wenn man keine Ahnung hat, weiß man ja
nie.
Bernd_Stein
Bernd Stein schrieb:> Wenn der T0-Pin als Ausgang konfiguriert ist, dann kann ich doch> bestimmt keine externen Impulse zählen oder ?
Wenn Du an einen als Ausgang geschalteten Portpin externe Signale
anlegst, dann baust Du einen Kurzschluss, der über kurz oder lang den
Ausgangstreiber Deiner Signalquelle oder Deines AVRs beschädigen kann.
Diese "Betriebsart" ist also tunlichst zu vermeiden, unabhängig vom
Einsatz des Timers.
Fast alle meiner Programme nutzen einen Timer. Meist wird er benutzt, um
mittels Compare-Interrupt einen AVR-internen Takt zu generieren, der von
den Jobs des Hauptprogramms als Zeitscheibe bzw. zum Abzählen von
Verzögerungen genutzt wird. Gelegentlich nutze ich einen Timer auch zur
Impulsmessung, also für ICP in Hardware oder Software. In all diesen
Fällen zählt der Timer (über Vorteiler) CPU-Takte. Externe Takte musste
ich noch nie zählen, für dessen Notwendigkeit fällt mir erstmal nur der
Frequenzzähler ein, den ich aber mangels Bedarf (noch) nicht mit einem
AVR gebaut habe.
Der Tiny13 hat nur den einen Timer. Den braucht man meist für einen oder
beide Compare-Interrupts und/oder Impulsmessung per (Software-) ICP.
Sind beide Compare-Interrupts variabel, dann kann noch mittels
Überlauf-Interrupt (ohne Reload!) ein fester Takt zum Abzählen von
Verzögerungen realisiert werden. Dabei zählt der Timer CPU-Takte und
steht nicht mehr zum Zählen von externen Ereignissen zur Verfügung. Also
gibt es eigentlich kaum einen Grund, über die Features beim Zählen
externer Ereignisse nachzudenken.
...
Hannes Lux schrieb:> Bernd Stein schrieb:>> Wenn der T0-Pin als Ausgang konfiguriert ist, dann kann ich doch>> bestimmt keine externen Impulse zählen oder ?>> Wenn Du an einen als Ausgang geschalteten Portpin externe Signale> anlegst, dann baust Du einen Kurzschluss, der über kurz oder lang den> Ausgangstreiber Deiner Signalquelle oder Deines AVRs beschädigen kann.> Diese "Betriebsart" ist also tunlichst zu vermeiden, unabhängig vom> Einsatz des Timers.> ...
Nochmals Danke Hannes Lux.
Damit wären erstmal die Fragen zum Input-Capture-Mode diesbezüglich
geklärt.
Bernd_Stein
Bernd Stein schrieb:> Damit wären erstmal die Fragen zum Input-Capture-Mode diesbezüglich> geklärt.
Was hat der ICP-Mode (den der Timer des Tiny13 übrigens gar nicht
unterstützt) mit dem T0-Pin zu tun?
...
Hannes Lux schrieb:> Bernd Stein schrieb:>> Damit wären erstmal die Fragen zum Input-Capture-Mode diesbezüglich>> geklärt.>> Was hat der ICP-Mode (den der Timer des Tiny13 übrigens gar nicht> unterstützt) mit dem T0-Pin zu tun?>> ...>
Ich lese parallel zu dem Datenblatt auch in Büchern und so.
Habe wahrscheinlich etwas durcheinander gebracht.
Trotzdem sollte ich wahrscheinlich in der Lage sein zu wissen,
was der Input Capture Mode bedeutet.
Danke für den Anstoß, so weiß ich wenigstens das der ICP-Mode noch nicht
ganz richtig von mit verstanden worden ist.
Bernd_Stein
Bernd Stein schrieb:> so weiß ich wenigstens das der ICP-Mode noch nicht> ganz richtig von mit verstanden worden ist.
Sieh's ganz locker:
Der ICP-Interrupt ist erstmal ein stinknormaler externer Interrupt, der
von einer Flanke eines extern anliegenden Impulses am ICP-Pin ausgelöst
wird.
Im Gegensatz zum Int0 oder Int1 wird dabei der "Zeitstempel genommen",
also der Zählerstand des Timer1 in das ICP-Register (ICR1H:ICR1L)
kopiert. Und das bereits in dem Takt, in dem die Flanke erkannt wurde
und nicht erst beim Aufruf der ISR. Dies ermöglicht extrem genaue
Zeitmessungen, da die Interrupt-Aufrufzeit nicht mit in die Rechnung
eingeht.
Dieses Feature hat der Tiny13 allerdings nicht. Die 16-Bit-Timer der
meisten aktuellen AVRs können das aber.
Interessant dabei ist auch, dass man den Input-Capture auch vom
Analog-Comparator auslösen kann. Wenn man dem Analog-Comparator nun noch
die interne Bandgap-Spannung als Referenz gibt, dann reagiert ICP
bereits bei kleineren Pegeln am AIN1-Pin. Auf diese Art gelang es mir,
mit dem Tiny2313 die per Dioden zusammengefassten Servokanäle einer
Funkfernsteuerung zu detektieren. Es wurden Kanal 1, 3 und 5 mit Dioden
zusammengefasst (OR-verknüpft) und ein Pull-Down-Widerstand für den
L-Pegel eingesetzt. Der H-Pegel war dann für den ICP-Eingang zu schwach.
Über den AIN1-Eingang konnte ich ihn aber sauber detektieren. So kann
der Tiny2313 über nur einen Eingangspin alle 5 Kanäle der
2,4GHz-Funkfernsteuerung empfangen. (http://www.hanneslux.de/planet5b/)
...
Hannes Lux schrieb:> Bernd Stein schrieb:>> so weiß ich wenigstens das der ICP-Mode noch nicht>> ganz richtig von mit verstanden worden ist.> ...>
Hallo und Danke Hannes Lux,
wenn Du mir öfters so schöne Antworten presentierst, dann guck ich bald
in kein Buch mehr sondern stelle die Fragen Dir.
Nein im Ernst, danke für deine ausführlichen Antworten und den Bezug zur
Praxis.
Bernd_Stein