Forum: Mikrocontroller und Digitale Elektronik ATtiny13 Datenblatt External Clock Source on T0-Pin


von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Angehängte Dateien:

Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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?

...

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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/)

...

von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

Bernd Stein schrieb:
> dann guck ich bald
> in kein Buch mehr

Das ist keine gute Idee...

...

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.