Forum: Mikrocontroller und Digitale Elektronik ATtiny13 Timer/Counter Prescaler frage zum Register GTCCR


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernd S. (Firma: Anscheinend Corner-Cases ;-)) (bernd_stein)


Lesenswert?

Hallo zusammen,

ich befasse mich gerade mit dem Timer/Counter Prescaler vom ATtiny13.
Habe bisher soviel verstanden, das dieser vom Systemtakt ( clk_I/O )
getaktet wird und mit dem Bit PSR10 im Register GTCCR zurückgesetzt
werden kann, so das dieser mit dem nächsten Systemtakt auch wieder von
vorn beginnt.
Mit dem Bit TSM im gleichen Register kann der Prescaler ( Vorteiler ) in
seinem Reset-Zustand festgehalten werden.

Nun habe ich folgendes Programm geschrieben und im AVR-Studio simuliert.

;
;Prgrammspeicher initialisieren
;

.CSEG         ;Code Segment
.ORG  $0000   ;Programm beginnt bei Adresse 0

;
;Programmstart mit Interrupt Vektoren
;

    rjmp Anfang    ;(RESET) External Pin, Power-on Reset, Brown-out

    reti           ;Watchdog Reset
    reti           ;(INT0)External Interrupt Request 0
    reti           ;(PCINT0) Pin Change Interrupt Request 0
    reti           ;(TIM0_OVF) Timer/Counter Overflow
    reti           ;(EE_RDY) EEPROM Ready
    reti           ;(ANA_COMP) Analog Comparator
    reti           ;(TIM0_COMPA) Timer/Counter Compare Match A
    reti           ;(TIM0_COMPB) Timer/Counter Compare Match B
    reti           ;(WDT) Watchdog Time-out
    reti           ;(ADC) ADC Conversion Complete
;
; Hier Startet das Programm bei einem Reset
;
Anfang:  ldi   r16,$FF      ;Zählerwert laden...
         out   TCNT0,r16    ;...und Zähler damit initialisieren
         in    r16,TCCR0B   ;Teiler...
         ori   r16,1<<CS01  ;...durch 8...
         out   TCCR0B,A     ;...im Prescaler (Vorteiler) einstellen.
Endless: rjmp  Endless      ;Endlosschleife

Ich erwartete das der Zähler ( TCNT0 ) bereits nach 8 Takten
(Processor => Cycle Counter ) auf $00 springt, da ja schließlich
nach 6 Takten der Prescaler auf den Teiler durch 8 eingestellt war.
Ich erwartete dieses, da der Prescaler ja vom Systemtakt bereits
mitgetaktet wurde und ich weder das Bit PSR10 noch TSM genutzt habe.
Der Zähler bzw. das TCNT0-Register wird aber nach
14 Takten auf $00 gesetzt.

Hier stimmt doch etwas mit dem Simulator nicht oder ?
Ich benutze den Simulator2 in der Version 4.18 Build 700

Ich suche schon seit einiger Zeit etwas wo die Datenblattseiten
74 und 75 vom Timer/Counter Prescaler mal in deutsche übersetzt wurden
oder wenigstens erklärt werden.

Bernd_Stein

von spess53 (Gast)


Lesenswert?

Hi

>Habe bisher soviel verstanden, das dieser vom Systemtakt ( clk_I/O )
>getaktet wird und mit dem Bit PSR10 im Register GTCCR zurückgesetzt
>werden kann, so das dieser mit dem nächsten Systemtakt auch wieder von
>vorn beginnt.
>Mit dem Bit TSM im gleichen Register kann der Prescaler ( Vorteiler ) in
>seinem Reset-Zustand festgehalten werden.

Ist soweit richtig. Allerdings ist in der Praxis der Stand des 
Prescalers
in 99,9% aller Fälle uninteressant. Die ersten AVRs kannten keinen 
Prescaler-Reset und ich kann mich auch nicht erinnern, einen 
Prescaler-Reset schon mal gebraucht zu haben.
Bei größeren AVRs teilen sich oft mehrere Timer einen Prescaler. Da kann 
eine Manipulation auch unerwünschte Nebenwirkungen haben.

>Hier stimmt doch etwas mit dem Simulator nicht oder ?
>Ich benutze den Simulator2 in der Version 4.18 Build 700

Der Simulator ist kein 100%-igs Abbild des Controllers. Da sind solche 
Experimente mit Vorsicht zu genießen.

>Ich suche schon seit einiger Zeit etwas wo die Datenblattseiten
>74 und 75 vom Timer/Counter Prescaler mal in deutsche übersetzt wurden
>oder wenigstens erklärt werden.

Beiß dich da nicht fest. Eigentlich interessieren nur die 
Teilerfaktoren.

MfG Spess

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


Lesenswert?

spess53 schrieb:
>
> Ist soweit richtig. Allerdings ist in der Praxis der Stand des
> Prescalers
> in 99,9% aller Fälle uninteressant. Die ersten AVRs kannten keinen
> Prescaler-Reset und ich kann mich auch nicht erinnern, einen
> Prescaler-Reset schon mal gebraucht zu haben.
> Bei größeren AVRs teilen sich oft mehrere Timer einen Prescaler. Da kann
> eine Manipulation auch unerwünschte Nebenwirkungen haben.
>
Ok, da will ich Dir mal vertrauen und die Sache auf sich beruhen lassen.
Kann ja höchstwahrscheinlich mehr schaden als nützen, falls ich mich mal 
wieder daran erinnern sollte.
>
> Beiß dich da nicht fest. Eigentlich interessieren nur die
> Teilerfaktoren.
>
Ja, so habe ich das zu spüren bekommen, die Teilerfaktoren sind so
zu 100,1% wichtig ;-)

Bernd_Stein

von Hannes L. (hannes)


Lesenswert?

Bernd Stein schrieb:
> Ja, so habe ich das zu spüren bekommen, die Teilerfaktoren sind so
> zu 100,1% wichtig ;-)

Und die Teilerfaktoren alleine sind beim Tiny13 nur die halbe Miete. Da 
es nur einen 8-Bit-Timer gibt, reicht der Einstellbereich des Vorteilers 
oft nicht aus, den Timertakt vernünftig an die benötigte Zeitbasis 
anzupassen. Da kann man dann aber noch etwas mit dem System-Vorteiler 
(CLKPR) spielen.

Beispiel:
Es sollen Servoimpulse eines Modellbau-Funkempfängers gemessen und 
ausgewertet werden. Diese haben eine Impulsdauer von etwa 0,8 ms bis 2,2 
ms. Dabei soll eine möglichst hohe (betreffs 8-Bit-Timer) Auflösung 
erreicht werden. Rechne doch einfach mal die verschiedenen möglichen 
Varianten des Timer-Vorteilers und System-Vorteilers durch. Eine 
Variante bringt die Timerwerte von 60 und 165 für 0,8 und 2,2 ms (75 und 
150 für 1,0 und 2,0 ms). Das ist zwar im Vergleich zum mit 16-Bit-Timer 
erreichbaren Ergebnis nicht viel, aber der Tiny13 hat nunmal nur diesen 
einen 8-Bit-Timer. Für ein Schaltmodul reicht diese Auflösung aber 
allemal.

...

von spess53 (Gast)


Lesenswert?

Hi

Der ATTiny13 ist aber nicht gerade das Beispiel eines aktuellen AVRs. Er 
gehört eher zu den Urviechern. Selbst die ATTiny4/5/9/10 im 
SOT23-Gehäuse bringen einen ausgewachsenen 16-Bit-Timer mit. Da 
erübrigen sich diese Klimmzüge.

MfG Spess

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


Lesenswert?

Hannes Lux schrieb:
> Bernd Stein schrieb:
>> Ja, so habe ich das zu spüren bekommen, die Teilerfaktoren sind so
>> zu 100,1% wichtig ;-)
>
> Und die Teilerfaktoren alleine sind beim Tiny13 nur die halbe Miete. Da
> es nur einen 8-Bit-Timer gibt, reicht der Einstellbereich des Vorteilers
> oft nicht aus, den Timertakt vernünftig an die benötigte Zeitbasis
> anzupassen. Da kann man dann aber noch etwas mit dem System-Vorteiler
> (CLKPR) spielen.
>
> Beispiel:
...

Öh - ja Danke für das Beispiel.
( CKDIV8 ) kann man ja auch noch nutzen.

Habe jetzt nichts spezielles im Sinn, wollte nur ein wenig besser das 
Datenblatt zum Thema " Timer/Counter0 " verstehen.

Bernd_Stein

von Hannes L. (hannes)


Lesenswert?

Bernd Stein schrieb:
> ( CKDIV8 ) kann man ja auch noch nutzen.

Eher nicht, das ist nur eine Voreinstellung auf 1:8 beim Reset. CLKPR 
lässt sich per Programm einstellen, und zwar in 1:2-Schritten.

spess53 schrieb:
> Da
> erübrigen sich diese Klimmzüge.

Du hast zwar recht, aber die kann ich weder löten noch programmieren. 
Und so uralt ist der Tiny13 nun auch wieder nicht, er wird immerhin 
inzwischen auch als "A" gefertigt.

Außerdem hat Bernd_Stein nach dem Tiny13 gefragt und nicht nach den 
SOT23-AVRs. Aber nun beginnen ja schon die Fragen zum 16-Bit-Timer... 
;-)

...

von spess53 (Gast)


Lesenswert?

Hi

>Du hast zwar recht, aber die kann ich weder löten noch programmieren.

SOT23 ist doch fast noch für Grobmotoriker. Ich bin auch nicht mehr der 
Jüngste.

>Und so uralt ist der Tiny13 nun auch wieder nicht,

Datenblatt von 2003.

> er wird immerhin inzwischen auch als "A" gefertigt.

Das hat an der 'übersichtlichen' Ausstattung nichts geändert.

MfG Spess

von nachdenklicher (Gast)


Lesenswert?

Also, der Tiny-13 ist schon ok.
Hinsichtlich der Möglichkeiten, des Preises, der Verfügbarkeit und 
Features bei nur 8 Pins, lässt sich damit allerhand anstellen.

Im dynamischen Betrieb (t>=hochgelaufen) sind auch alle Timer- und 
sonstigen Parameter exakt kalkulierbar.

Für kleinliche und ÜBERAUS alberne(!) akademische Spitzfindigkeiten, wie 
zum Beispiel, "was passiert nach genau 12 Cyclen nach Reset" (und um 
nichts anderes geht es den OP!) nimmt man besser diskrete Logik, falls 
es darauf wirklich ankommt.

Würde man in Umgebungen, wo es DARAUF ankommt, einen Controller 
einplanen, liegt der Bug EINDEUTIG beim Entwickler und nicht beim 
Controller!

Joe

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


Lesenswert?

spess53 schrieb:
> Hi
>
> Der ATTiny13 ist aber nicht gerade das Beispiel eines aktuellen AVRs.
>
...

Nein, der gehört auch nicht zum Thema,
Beitrag "Herstellungsreihenfolge bei den Atmel AVR-Mikrocontrollern"

sondern zum Thema Datenblatt ATtiny13 " 8-bit Timer/Counter0 with PWM ".

Da ich den ATtiny13 durch das " Lernpaket Mikrocontroller " 
kennengelernt habe, bin ich erstmal voll und ganz damit beschäftigt 
seine Innereien kennen zu lernen.

Bernd_Stein

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


Lesenswert?

Hannes Lux schrieb:
> Bernd Stein schrieb:
>> ( CKDIV8 ) kann man ja auch noch nutzen.
>
> Eher nicht, das ist nur eine Voreinstellung auf 1:8 beim Reset. CLKPR
> lässt sich per Programm einstellen, und zwar in 1:2-Schritten.
>
...

Ok, ich merke schon werfe da einige Dinge durcheinander.
Also erstmal zuhören und Mund halten.

Bernd_Stein

von Hannes L. (hannes)


Lesenswert?

Bernd Stein schrieb:
> Ok, ich merke schon werfe da einige Dinge durcheinander.

Ist ja auch etwas viel auf einmal.

> Also erstmal zuhören und Mund halten.

Falsch...

Datenblatt öffnen, Ctrl-F (Suche), CLKPR eingeben, Enter...
Und dann Lesen und Verstehen, was ich gemeint haben könnte. Und das 
nicht nur bei meinen Antworten, sondern auch bei allen Anderen, die 
Stichworte enthalten. Denn nur vom "Zuhören" wird nix, Du musst die 
Hinweise schon Verifizieren, wenn da was von hängen bleiben soll.

nachdenklicher schrieb:
> Für kleinliche und ÜBERAUS alberne(!) akademische Spitzfindigkeiten, wie
> zum Beispiel, "was passiert nach genau 12 Cyclen nach Reset" (und um
> nichts anderes geht es den OP!)

Das sehe ich anders, aber ich habe auch einige andere Threads von Bernd 
gelesen.

Bernd geht es nicht um Spitzfindigkeiten, er ist einfach noch nicht in 
der Lage im Datenblatt die Spreu vom Weizen zu trennen. Die modernen 
AVRs sind so mit Features überfrachtet, dass es für den Einsteiger nicht 
leicht ist, sich auf das Wesentliche zu konzentrieren.

> nimmt man besser diskrete Logik, falls
> es darauf wirklich ankommt.

Es kommt ihm nur darauf an, das Datenblatt zu verstehen, nicht darauf, 
ein real existierendes Schaltungsproblem zu lösen.

@Bernd:
Ein Tip zum Verstehen der Timer: Nimm Dir das Datenblatt eines 
Classic-AVRs vor (AT90S2313, AT90S8515, AT90S8535 oder AT90S4433) und 
schau Dir genau die Funktionsweise der Timer an. Diese haben weniger 
Features, damit kannst Du erstmal die Grundfunktionen verinnerlichen. 
Wenn Du das beherrscht, dann nimm die Datenblätter der aktuellen AVRs 
und schau Dir an, was die zusätzlich können.
Es lohnt sich auch ein Blick zum Tiny12 und Tiny15, die als Vorgännger 
des Tiny13 und Tiny25 anzusehen sind.

...

von spess53 (Gast)


Lesenswert?

Hi

>Da ich den ATtiny13 durch das " Lernpaket Mikrocontroller "
>kennengelernt habe, bin ich erstmal voll und ganz damit beschäftigt
>seine Innereien kennen zu lernen.

Und wenn du in 1..2 Monaten <10% der Möglichkeiten von AVRs kennst, wie 
machst du dann weiter?

MfG Spess

von nachdenklicher (Gast)


Lesenswert?

Naja...

@hannes lux
Da hast Du wahrscheinlich schon Recht, muss ich einräumen.
In der Praxis sehen die Probleme und Fragen halt wirklich sehr anders 
aus, als im Datenblatt. Gebe ich vorurteilsfrei zu.

Joe

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


Lesenswert?

> Bernd Stein schrieb:
>> Also erstmal zuhören und Mund halten.
>
Hannes Lux schrieb:
>
> Falsch...
>
> Datenblatt öffnen, Ctrl-F (Suche), CLKPR eingeben, Enter...
> Und dann Lesen und Verstehen, was ich gemeint haben könnte. Und das
> nicht nur bei meinen Antworten, sondern auch bei allen Anderen, die
> Stichworte enthalten. Denn nur vom "Zuhören" wird nix, Du musst die
> Hinweise schon Verifizieren, wenn da was von hängen bleiben soll.
>
Werde ich versuchen zu beherzigen, allerdings bin ich vom Charakter her 
eher Voreilig.
>
...
>
> Bernd geht es nicht um Spitzfindigkeiten, er ist einfach noch nicht in
> der Lage im Datenblatt die Spreu vom Weizen zu trennen. Die modernen
> AVRs sind so mit Features überfrachtet, dass es für den Einsteiger nicht
> leicht ist, sich auf das Wesentliche zu konzentrieren.
>
Ich bin schon ein Erbsenzähler, d.h. ich möchte einige Dinge auch wenn 
sie unwesentlich sind bis in Detail verstehen.
Da hast Du natürlich recht, ich bin gar nicht in der Lage das 
Wesentliche vom Unwesentlichen zu trennen, weil ich wirklich nicht weiß 
was in der Praxis am meisten gebraucht wird.
>
...
> @Bernd:
> Ein Tip zum Verstehen der Timer: Nimm Dir das Datenblatt eines
> Classic-AVRs vor (AT90S2313, AT90S8515, AT90S8535 oder AT90S4433) und
> schau Dir genau die Funktionsweise der Timer an. Diese haben weniger
> Features, damit kannst Du erstmal die Grundfunktionen verinnerlichen.
...
Danke für den Tip.
Habe schon beim Überfliegen des Datenblatts vom AT90S2313 gesehen das 
dort mehr oder weniger erklärt wird was unter synchronized und 
unsynchronized zu verstehen ist.
Werde mir jetzt mal die fast neun Seiten Fachenglisch reinziehen.

Bernd_Stein

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


Lesenswert?

Man findet ja leider nicht viel in AVR8ASM zu diesem Thema.

Muss dies wirklich so aufwendig programmiert werden ?
1
Neustart2:  
2
ldi rmp,1<<TSM              ; Prescaler Sync Mode  
3
out GTCCR,rmp  
4
ldi rmp,(1<<TSM)|(1<<PSR10) ; Reset Presc1  
5
out GTCCR,rmp  
6
clr rmp  
7
out GTCCR,rmp               ; Prescaler Count Mode  
8
out TCNT1H,rmp              ; 16-Bit-Zaehler ruecksetzen  
9
out TCNT1L,rmp  
10
ldi rmp,1<<OCIE1A  
11
out TIMSK1,rmp              ; in Timer-Int-Maske  
12
ret

Würde es beim ATtiny13A nicht auch so reichen ?
1
ldi  rmp,1<<TSM
2
out  GTCCR,rmp
3
clr  rmp
4
out  GTCCR,rmp
5
out  TCNT0,rmp
Raffe dass Englische nämlich nicht, trotz Google-Übersetzers, wegen dem 
letzten Satz :

• Bit 7 – TSM: Timer/Counter Synchronization Mode
Writing the TSM bit to one activates the Timer/Counter Synchronization 
mode. In this mode, the value that is written to the PSR10 bit is kept, 
hence keeping the Prescaler Reset signal asserted. This ensures that the 
Timer/Counter is halted and can be configured without the risk of 
advancing during configuration. When the TSM bit is written to zero, the 
PSR10 bit is cleared by hardware, and the Timer/Counter start counting.

• Bit 0 – PSR10: Prescaler Reset Timer/Counter0
When this bit is one, the Timer/Counter0 prescaler will be Reset.

*This bit is normally cleared immediately by hardware, except if the TSM 
bit is set.*


Bernd_Stein

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


Lesenswert?


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.