Timer Prescaler berechnen

OP #3798305
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?
#3798322
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.
#3798331
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.
Gast #3798337
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
Gast #3798349
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren