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