Forum: Mikrocontroller und Digitale Elektronik AVR Timer Prescaler Reihe?


von Stefan (Gast)


Lesenswert?

Hallo,

die AVR Reihe hat für die Timer die Prescaler Bits CSx2..CSx0. Je nach 
Timer und Model entsprechen die Werte der Reihe nach entweder der Reihe 
1, 8, 32, 64, 128, 256, 1024 oder der Reihe 1, 8, 64, 256, 1024. Ich 
kann keinen festen Zusammenhang zwischen Timernummer und der verwendeten 
Reihe sehen; Timer 2 hat z.B. beim Mega128 und Mega2560 unterschiedliche 
Reihen. Ich möchte aber den Prescaler in einem Define bestimmen und muss 
daher die richtige Reihe wissen wenn die Timernummer gegeben ist. Gibt 
es irgendein Symbol oder ähnliches, an dem die richtige Reihe 
ersichtlich ist?

Stefan

von Karl M. (Gast)


Lesenswert?

Stefan,

dein Grundannahme ist schon Falsch.

Es gibt noch weiterer Prescaler für die unterschiedlichen TimerX.

Also muss man für jede AVR µC Familie die Prescaler TimerX-Zuordnung 
getrennt aufstellen.

Ich mache das schon lange so und kann damit dann einen passenden 
Prescaler für z.B. den CTC- oder TOV-Modus berechnen lassen.

von Stefan (Gast)


Lesenswert?

Hallo Karl,

welche Prescaler gibt es denn noch? Und was genau bedeutet hier 
"Familie"?

Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> Ich kann keinen festen Zusammenhang zwischen Timernummer und der
> verwendeten Reihe sehen

Der Zusammenhang ist, dass der Timer, der als RTC dienen kann (also
asynchron durch den externen 32768-Hz-Quarz getaktet werden kann)
die umfangreicheren Prescaler besitzt.  Bei den ganz alten AVRs
war das Timer 0, später dann Timer 2.

von Karl M. (Gast)


Lesenswert?

Guten Morgen Stefan,

schau Dir bitte die Familie der attiny85/tn25/tn45, die Familie 
attiny841/tn441 und die Familie attiny861/tn461/tn261 an.

Insbesondere muss ich bei meinen Anwendungen auch immer die 
Zählerbreite, d.h. 8, 10 oder 16Bit oder was auch immer gültig ist 
beachten.

Bei Atmel kann man sich alle Datenblätter zu allen Atmel AVR µC der 8Bit 
Generation ansehen:

http://www.atmel.com/products/microcontrollers/avr/megaavr.aspx

http://www.atmel.com/products/microcontrollers/avr/tinyavr.aspx

von Stefan (Gast)


Lesenswert?

Danke Jörg,

es scheint dass man am Vorhandensein des ASx Bits feststellen kann 
welche Reihe verwendet wird.
1
#ifdef AS2
2
  #define PRESCALER_ROW 2
3
#else
4
  #define PRESCALER_ROW 1
5
#endif

Jetzt muss ich nur noch eroieren ob sich das, wenn die Timernummer 
vorher definiert wird, noch allgemeiner schreiben lässt, etwa
1
#define TIMERNUM 2
2
ifdef MEIN_AS_MACRO(TIMERNUM)
3
...

Gibt es sowas?

Stefan

von Sascha_ (Gast)


Lesenswert?

Man kann auch die möglichen Prescaler zur Laufzeit ermitteln indem man 
den Timer gegen einen delay_ laufen lässt. Ist fcpu unabhängig.
Ob man das auch so machen will, ist jedem selbst überlassen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:

> es scheint dass man am Vorhandensein des ASx Bits feststellen kann
> welche Reihe verwendet wird.

Jein.  Das Bit kann auch AS0 heißen, wenn es (wie beim ATmega128)
der Timer 0 ist, der die erweiterte Prescaler-Reihe hat.  Außerdem
hat nur der Timer mit den Asynchronfähigkeiten die erweiterte
Reihe, die anderen im gleichen Controller haben sie nicht.

von Stefan (Gast)


Lesenswert?

Ja genau, ich meinte pro Timer prüfen ob dieser ein ASx Bit hat, dann 
müsste es passen.
Stefan

von Thomas E. (thomase)


Lesenswert?

Stefan schrieb:
> Ja genau, ich meinte pro Timer prüfen ob dieser ein ASx Bit hat, dann
> müsste es passen.
Nein, nicht immer. Beim Timer 0 des Attiny25/45/85 würde es auch passen. 
Bei dessen Timer 1 geht es mit 4 CS-Bits in Zweierpotenzschritten bis 
16384.

von Stefan (Gast)


Lesenswert?

Oh jeh :-( gut, dann muss man auch noch prüfen ob es ein CS3 Bit gibt...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kurzer Check in der avr-libc:
1
$ grep ' CS[0-4]3' include/avr/io*
2
include/avr/iom16u4.h:#define CS43 3
3
include/avr/iom32u4.h:#define CS43 3
4
include/avr/iotn15.h:#define CS13       3
5
include/avr/iotn261a.h:#define CS13 3
6
include/avr/iotn26.h:#define CS13    3
7
include/avr/iotn461a.h:#define CS13 3
8
include/avr/iotn861a.h:#define CS13 3
9
include/avr/iotnx5.h:#define CS13    3
10
include/avr/iotnx61.h:#define CS13    3

Also ATmega16U4/32U4, ATtiny15/25/45/85, ATtiny461A/861A und
ATtiny261/461/861 (einschließlich der A-Derivate).  Schau dir die
Datenblätter mal an, ob sie das alle gleichermaßen behandeln,
insbesondere hier die beiden U4-Atmegas im Vergleich zu den Tinys.

: Bearbeitet durch Moderator
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.