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?
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.
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.
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
Da ist ein Denkfehler drin. Sorry. Die 500ms kommen ja gar nicht vor. Bitte meinen letzten Post ignorieren. Gruß Jo
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.