Forum: Mikrocontroller und Digitale Elektronik Timer Prescaler berechnen


von Orkun D. (orkun_d)


Lesenswert?

Hallo
Ich hätte folgende Frage:
Ein 16bit Mikrocontroller mit 40MHz CPU Takt besitzt einen Timer. Der 
Takt des Timers kann durch einen Prescaler um die Faktoren 2,4,8, 16 
usw. heruntergeteilt werden. Mit dem Timer ist eine Zeitspanne von 500ms 
zu vermessen. Welche Einstellung ist für den Prescaler am besten 
geeignet? Welche Werte ergeben sich bei dieser Einstellung für 
Resolution und Period?

Ich komm einfach nicht auf das Ergebnis bzw. kommt bei mir für den 
Prescaler 20000000 heraus?

Könnt ihr mir bitte da weiterhelfen?

von Karl H. (kbuchegg)


Lesenswert?

Dann rechne dir doch mal die zugehoerigen Werte fuer Resolution und 
Period aus.

Wenn dein mC einen Vorteiler von 20000000 haette, waere das fast eine 
korrekte Loesung. Da aber 20000000 keine 2-er Potenz ist (2, 4, 8, ...), 
ist sie es nicht. Mal ganz davon abgesehen, dass dieser Vorteiler wohl 
auch nicht einstellbar sein wuerde. Jeder mC hat ein technologisches 
Limit, bedingt durch die begrenzte Anzahl an Bits im Vorteiler.

Hinweis: In der Praxis gibt es meistens mehrere Loesungen. Genommen wird 
die, die technologisch machbar ist und deren Werte am besten zu anderen 
Rahmenbedinugungen passen.

von Thomas E. (thomase)


Lesenswert?

Orkun D. schrieb:
> Ich komm einfach nicht auf das Ergebnis bzw. kommt bei mir für den
> Prescaler 20000000 heraus?

So falsch ist das gar nicht. Soweit muss der Timer zählen, bis 500ms 
vergangen sind. Da er aber nur bis 65536 zählen kann, brauchst du den 
Prescaler.

Also 20.000.000 / 65536 = 305,175

Das ist dein Prescaler. Den gibt es natürlich nicht. Also nimmst du den 
nächst grösseren. 512 oder 1024. Je nachdem, was dein Timer zu bieten 
hat.

20.000.000 / 512 = 39062,5

Das ist der Wert, bis zu dem der Timer mit Prescaler 512 in 500ms zählt.

Mit der 0,5 Abweichung musst du bei 40MHz leben.

mfg.

von jo (Gast)


Lesenswert?

Na dann wohlen wir mal:

1. 40 Mhz = 40.000.000 Hz

2. Angenommen die 16 bit Cpu hat auch 16bit breite Timer macht also 2^16 
= 65536 Zählschritte bis der Timer überläuft und bei null anfängt zu 
zählen.

Das heist ich brauche einen Vorteiler der verhindert das mein Timer 
überläuft bevor er bis zum Ende (2^16) zählen konnte.

Also rechne ich 40.000.000 / 2^16 = 610,3515625

Dem Ganzen gebe ich noch ein bisschen Spiel, den eine Anforderung an die 
Auflösung gibt es ja nicht. Also suche ich die nächst größere Zahl die 
eine Potenz von 2, den 610,3515625 kann ich nicht in Timer-Register 
laden. Leider.

Das wäre dann 1024.

Voila.

Grüße Jonas

von jo (Gast)


Lesenswert?

Da ist ein Denkfehler drin. Sorry. Die 500ms kommen ja gar nicht vor.
Bitte meinen letzten Post ignorieren.

Gruß Jo

von Mike (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Da er aber nur bis 65536 zählen kann, brauchst du den Prescaler.
>
<> Also 20.000.000 / 65536 = 305,175
>
> Das ist dein Prescaler. Den gibt es natürlich nicht. Also nimmst du den
> nächst grösseren. 512 oder 1024.

Der Prescaler kann den Basistakt natürlich auch weniger herunterteilen. 
Dann bekommt man eine höhere Auflösung. Der Preis dafür ist, dass der 
Timer während der 500ms überläuft, was erstmal nichts böses ist, solange 
man die Überläufe sauber mitzählt.

von Orkun D. (orkun_d)


Lesenswert?

Danke für die Antworten :)

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.