Forum: Mikrocontroller und Digitale Elektronik C > Timer, Inerrupt, ATtiny84


von __Son´s B. (bersison)


Lesenswert?

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!

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

__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?

von Karl M. (Gast)


Lesenswert?

__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.

von Karl M. (Gast)


Lesenswert?

__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!

von __Son´s B. (bersison)


Lesenswert?

Karl M. schrieb:
> Was soll das "CLKPS3<1" sein?
CLKPS3 wird 1 zugewiesen. Sollte nur ein linguistischer Hinweis sein.

von Karl M. (Gast)


Lesenswert?

__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.

von Karl M. (Gast)


Lesenswert?

__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.

von Karl M. (Gast)


Lesenswert?

Ergänzung,

Was dann CLKPS[3:0] = 0b1000 bedeutet ist bestimmt klar, kommt bei AVR, 
jetzt Microchip häufiger vor.

von __Son´s B. (bersison)


Lesenswert?

Karl M. schrieb:
> viele Lesen eine "<" in "C" als kleiner.

Sorry, Danke!

von Karl M. (Gast)


Lesenswert?

__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.

von Karl M. (Gast)


Lesenswert?

Was ich im ersten Post nicht angegeben hatte, ist die Quelle des 
Datenblatts zum ATtiny84:

# https://www.microchip.com/wwwproducts/en/ATtiny84
# http://ww1.microchip.com/downloads/en/DeviceDoc/doc8006.pdf

Die automatische Verlinkung von ATtiny84 führt in's leere.

von __Son´s B. (bersison)


Lesenswert?

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.

von Karl M. (Gast)


Lesenswert?

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 ???

von Karl M. (Gast)


Lesenswert?

__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?

von Karl M. (Gast)


Lesenswert?

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

von Karl M. (Gast)


Lesenswert?

Sorry, bin nach Timer0 gerutscht.

von Karl M. (Gast)


Lesenswert?

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.
...

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.