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
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
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
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. ...
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
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
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... ;-) ...
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
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
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
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
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. ...
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
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
> 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
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
Hier ist eine weitere Diskusion über das GTCCR : https://www.roboternetz.de/community/threads/74825-ATtiny13A-Frage%28n%29-zum-Register-GTCCR?p=659573&viewfull=1#post659573 Bernd_Stein
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.