Forum: Mikrocontroller und Digitale Elektronik Timer-Auslegungsfrage beim ATtiny25


von Helftmirbitte (Gast)


Lesenswert?

Hallo,

wie muß man beim ATtiny25 entweder TIMER0 oder TIMER1 auslegen, damit 
man die Periodendauer eines Pulses mit einem Frequenzbereich von ca. 
5-250Hz messen kann?

Meine Idee ist es einen 16-bit Zähler aus einem der Timer zu 
realisieren.
Welchen TIMER soll ich dazu nehmen?
Wie ermittelt man die passende Taktfrequenz und den passenden 
Prescalerwert?
Im Datenblatt des ATtiny25 werden mehrere mögliche Taktfrequenzen 
genannt, z.B. 6,4, 8,0, 25,6 und 64 MHz.

Bitte helft mir mal auf die Sprünge, ich blicke da nicht richtig durch. 
Vielen Dank!

von michael (Gast)


Lesenswert?

hallo.

du wirst es wahrscheinlich so machen (müssen):
- die zu messende frequenz liegt am externen interrupt
- der externe interrupt triggert auf die steigende flanke
- bei jedem externen interrupt ermittelst du die periodendauer und setzt 
den timer zurück (der timer muß einen over- oder underflow-interrupt 
auslösen können)
- bei jedem timer-interrupt zählst du deinen "meßwert" um 256 hoch (hast 
ja nur 8bit-timer zur verfügung)

wie schnell du zählen kannst/darfst/mußt, hängt von den zu messenden 
frequenzen, der geforderten genauigkeit und von deinen datentypen ab.

beispiel:
bei der minimal zu messenden frequenz (5Hz) ist die periodendauer 0,2s.
dein ergebnis soll in einer unsigned 16bit-variable abgelegt werden, 
darf also maximal 65536 groß werden.
65536 / 0,2s = 327680Hz.
deine timerfrequenz darf also höchstens 327,68kHz sein.

bei 250Hz ist die periodendauer 0,004s. wenn du hier mit 327,68kHz 
zählst, "mißt" du ca. 1310.

ob's die timer des tiny25 hergeben, die frequenz so genau einzustellen, 
weiß ich leider nicht. aber das kannst du ja selbst nachlesen :-)

gruß

michael

von Helftmirbitte (Gast)


Lesenswert?

Danke für die Antwort! Das ist ein gutes Konzept.

Mit welcher Taktfrequenz und welchem Prescaler komme ich den errechneten 
327kHz am nächsten?


Taktfreq.     Presc.
6.4 MHz:      19,5 -> real 16
8.0 MHz:      24   -> real 32
25.6 (?)      78   -> real 64 ???
64   (?)

Ist es richtig, daß auch 25,6 und 64 MHz zur Verfügung stehen?
An dieser Stelle verstehe ich das Datenblatt nicht.

In wie weit kann ich den RC-Oszillator vertrimmen, um zu Taktfrequenzen 
zu kommen, die meinen Anforderungen eher entsprechen?

von michael (Gast)


Lesenswert?

hallo.

die maximale taktfrequenz ist 8MHz, wenn du über den internen 
RC-oszillator gehst.

und diese frequenz kannst du für den timer nochmal durch definierte 
werte teilen (/2, /4, /8, /64, usw.).

für timer 1 gibt's noch eine PLL, die kann dir dann 64MHz (geteilt durch 
eine potenz von 2) zur verfügung stellen. nützt dir hier aber nix.

dein teiler ist idealerweise 8MHz (bzw. 6,4MHz) / 327kHz, also 24,46 
(bzw. 19,57). der nächstmögliche wert, den du einstellen kannst, ist 32. 
damit kommst du auf 250kHz zähltakt.

wenn du dein meßergebnis anders skalieren willst (z.b. "ich will bei xHz 
einen zählerstand von y haben, weil sich damit leichter rechnen läßt") 
ändern sich die werte natürlich.

gruß

michael

von Helftmirbitte (Gast)


Lesenswert?

Prima, das Prinzip habe ich verstanden! Bei 8,0 MHz und Vorteiler 32 -> 
250 kHz Zählfrequenz komme ich auf eine untere Signalgrenzfrequenz von 
3,8 Hz bis zum 16 bit Überlauf des Zählerworts. Bei 250 Hz 
Signalfrequenz erhalte ich immernoch 1000 Inkremente im Zählerwort. Mit 
den Daten gehe ich mal ins Rennen.

Daß die 64 MHz nichts bringen verstehe ich jetzt.
Wie ist es mit den 25,6 MHz?

Im Datenblatt steht, daß man den internen RC-Oszillator nur um maximal 
10% vertrimmen soll. Ist das tatsächlich so oder ginge auch mehr?

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.