C > Timer, Inerrupt, ATtiny84
Hallo zusammen.
Versuche mich gerade an einem Minispiel mit dem ATtiny84. Dazu brauche
ich Timer, Vorteile und Interrupt. Datenblatt liegt mir vor.
Mit einigen Begriffen und Registerbezeichnungen komme ich leider nicht
zurecht.
Da scheint mir jeder uC-Typ seine eigene Bezeichnung zu haben.
--1--
Timer soll über den Programmtakt von 1MHz getaktet werden.
1
#define F_CPU 1000000UL
Im Datenblatt steht bei CLK/cpu (Seite 24, 25), CKSEL1<1=8Mhz oder
CKSEL2<1 =127kHz.
Wie verweise ich auf meinen CPU-Takt?
--2--
Wird der Timer/Counter1, 16bit (Seite 87, 88) mit "TCNT1" angesprochen?
--3--
Um später auf einen Interrupt als Zähler von 1ms zu kommen möchte ich
den Vorteiler auf 1/256 stellen. (Seite 32)
"CLKPS3<1"
Korrekt?
--4--
Bei einem Interrupt als Timerüberlauf würde ich "TIM1_OVF" einsetzen.
(Seite 84)
Korrekt?
--5--
Welcher Match-Befehl steht für Voreinstellung und Vergleichswert? (Seite
48)
TIM1_COMPA ... Timer/Counter1, Compare Match A
TIM1_COMPB ... Timer/Counter1, Compare Match B
TIM1_CAPT ... Timer/Counter1, Capture Event
"Event" kann ich gar nicht zuordnen. "CTC-Modus"?
-- :-) --
Danke schon mal für konstruktive Rückmeldungen!
__Son´s B. schrieb:> --3--> Um später auf einen Interrupt als Zähler von 1ms zu kommen möchte ich> den Vorteiler auf 1/256 stellen. (Seite 32)> "CLKPS3<1"> Korrekt?
Nein, den Bits ist dieses Muster zu zuweisen
CLKPS[3:0] = 0b1000
Was soll das "CLKPS3<1" sein?
__Son´s B. schrieb:> Wird der Timer/Counter1, 16bit (Seite 87, 88) mit "TCNT1" angesprochen?
Hmm, das ist ein Register, das Zähler Register.
Es gibt doch unter "12.11 Register Description" eine komplette
Darstellung.
TCCR1A, TCCR1B, TCCR1C, TCNT1H and TCNT1L, OCR1AH and OCR1AL, OCR1BH and
OCR1BL, ICR1H and ICR1L, TIMSK1 und TIFR1.
Die muss man alle kennen und bei Bedarf sind die Inhalte auch zu
verändern.
__Son´s B. schrieb:> Welcher Match-Befehl steht für Voreinstellung und Vergleichswert? (Seite> 48)> TIM1_COMPA ... Timer/Counter1, Compare Match A> TIM1_COMPB ... Timer/Counter1, Compare Match B> TIM1_CAPT ... Timer/Counter1, Capture Event> "Event" kann ich gar nicht zuordnen. "CTC-Modus"?
Am besten schauen wir mal in's Datenblatt Seite 87ff.
"Table 12-5.Waveform Generation Modes" Seite 110
Ich denke, dass muss keiner vorkauen!
__Son´s B. schrieb:> Mit einigen Begriffen und Registerbezeichnungen komme ich leider nicht> zurecht.> Da scheint mir jeder uC-Typ seine eigene Bezeichnung zu haben.
Kann - wird so - sein, das sich über die Entwicklung Namen geändert
haben oder neu dazu gekommen sind.
Nur gut, dass die allen im Datenblatt und der avr gcc Implementierung
stehen.
__Son´s B. schrieb:> Karl M. schrieb:>> Was soll das "CLKPS3<1" sein?> CLKPS3 wird 1 zugewiesen. Sollte nur ein linguistischer Hinweis sein.
dann doch besser, in der C Schreibweise:
CLKPS3 = 1 oder
Pascal
CLKPS3 := 1
viele Lesen eine "<" in "C" als kleiner.
__Son´s B. schrieb:> --1--> Timer soll über den Programmtakt von 1MHz getaktet werden.#define F_CPU> 1000000ULIm Datenblatt steht bei CLK/cpu (Seite 24, 25), CKSEL1<1=8Mhz> oder> CKSEL2<1 =127kHz.> Wie verweise ich auf meinen CPU-Takt?
Vorab ein ganzes Kapitel "6. Clock System" beschreibt die Fuse-Bits und
Register.
Zur Laufzeit kann man bei manchen AVR's den Clock Prescaler ändern.
"6.5.2 CLKPR – Clock Prescale Register"
Dazu muss man Bits unter CLKPR in der richtigen Reihenfolge verändern.
Die Bits heißen dann CLKPS3 bis CLKPS0 und werden kurz als CLKPS[3:0]
geschrieben.
Bsp. der Vorteiler 1 wird als CLKPS[3:0] = 0b0000 definiert.
Karl M. schrieb:> Ich denke, dass muss keiner vorkauen!
...gut reden, wenn man Erfahrung hat ...
CTC wird von Min zu Max-Wert sein.
__Son´s B. schrieb:> TIM1_COMPA ... Timer/Counter1, Compare Match A> TIM1_COMPB ... Timer/Counter1, Compare Match B
hier habe ich immer noch keine Eindeutigkeit bzgl. Start/Endwert
gefunden.
Also, langsam das Datenblatt ist offen?
Table 12-5.Waveform Generation Modes
Du suchst CTC - ok
wir finden unter
CTC (Clear Timer on Compare)
----------------------------
Mode 4
WGM[13:10] = 0100 --> ist klar was das bedeutet?
TOP: OCR1A --> ist klar was das bedeutet?
Was bedeutet dann:
TOV1 Flag Set on: MAX ???
__Son´s B. schrieb:> __Son´s B. schrieb:>> TIM1_COMPA ... Timer/Counter1, Compare Match A>> TIM1_COMPB ... Timer/Counter1, Compare Match B>> hier habe ich immer noch keine Eindeutigkeit bzgl. Start/Endwert> gefunden.
Das findet sich im Abschnitt "Table 9-1.Reset and Interrupt Vectors"
Was kann das also sein?
Will man nun wissen, wie so ein CTC Modus funktioniert,
kann man einfach mal suchen und findet:
11.7.2 Clear Timer on Compare Match (CTC) Mode
In Clear Timer on Compare or CTC mode (WGM02:0 = 2), the OCR0A Register
is used tomanipulate the counter resolution. In CTC mode the counter is
cleared to zero when the countervalue (TCNT0) matches the OCR0A. The
OCR0A defines the top value for the counter, hencealso its resolution.
This mode allows greater control of the Compare Match output frequency.
Italso simplifies the operation of counting external events.
Figure 11-5.CTC Mode, Timing Diagram
The timing diagram for the CTC mode is shown in Figure 11-5 on page 75.
The counter value(TCNT0) increases until a Compare Match occurs between
TCNT0 and OCR0A, and then coun-ter (TCNT0) is cleared.
>> Bild
Der Abschnitt für Timer 1 und CTC findet sich hier:
12.8 Modes of Operation
12.8.2 Clear Timer on Compare Match (CTC) Mode
In Clear Timer on Compare or CTC mode (WGM13:0 = 4 or 12), the OCR1A or
ICR1 Registerare used to manipulate the counter resolution. In CTC mode
the counter is cleared to zero whenthe counter value (TCNT1) matches
either the OCR1A (WGM13:0 = 4) or the ICR1 (WGM13:0 =12). The OCR1A or
ICR1 define the top value for the counter, hence also its resolution.
Thismode allows greater control of the compare match output frequency.
It also simplifies the opera-tion of counting external events.
...