Hi, gibt es Mikrocontroller mit kaskadierbaren synchronen Timern? Ich müsste möglichst genau immer wieder 2^n+n Schritte Wartezeit erzeugen und stehe vor dem Problem, dass sich einzelne Timer bei meinem µC immer nur mit Zweier-Potenzen laden lassen und ich mit zwei verschiedenen per Interrupt 'synchronisierten' Timern wohl doch ein gewisses Delay erzeuge, welches ich umständlich kompensieren müsste. Alternativ täte es auch ein Timer, der sich mit "krummen" Werten laden lässt und diesen Wert eigenständig beim nächsten Durchlauf wieder verwendet. CyberHorst
Wie soll das Ergebnis aussehen? Deine "Frage" finde ich etwas wirr... >und stehe vor dem Problem, dass sich einzelne Timer bei meinem µC immer >nur mit Zweier-Potenzen laden lassen Komischer µC...
>gibt es Mikrocontroller mit kaskadierbaren synchronen Timern? Gegenfrage: Was soll das sein und wozu willst Du es brauchen? >Ich müsste möglichst genau immer wieder 2^n+n Schritte Wartezeit >erzeugen Dann tu das doch. Richte einen Timer ein, der ununterbrochen im Takt eines Schritts tickt, und zähl im Timerinterrupt mit einer Zählvariablen 2^n + n dieser Schritte ab. >und stehe vor dem Problem, dass sich einzelne Timer bei meinem µC immer >nur mit Zweier-Potenzen laden lassen ??? >und ich mit zwei verschiedenen per Interrupt 'synchronisierten' Timern >wohl doch ein gewisses Delay erzeuge, welches ich umständlich kompensieren >müsste. nixversteh >Alternativ täte es auch ein Timer, der sich mit "krummen" Werten laden >lässt und diesen Wert eigenständig beim nächsten Durchlauf wieder >verwendet. Du kannst einen Timer auch mit dem Wert 25837 laden, wenn Du das willst. Der Timer muss nur genügend Bits haben, damit die Zahl "reinpasst, also für 25837 mindestens 16 Bit.
CyberHorst wrote:
> gibt es Mikrocontroller mit kaskadierbaren synchronen Timern?
Ich glaube nicht, denn das ist sinnfrei.
Reicht der Zählumfang nicht aus, zählt man einfach im Überlaufinterrupt
ne Variable weiter. Die Genauigkeit wird dadurch nicht beeinflußt.
Peter
Hi, ein Beispiel: 40-Mhz-Quarzoszillator auf einem PIC (also Takt/4) Timer0 soll bis 4096 zählen und danach soll Timer1 bis 64 zählen, danach soll ein Interrupt mit meinem Code ausgelöst werden. Also insgesamt 4160 Schritte, aber die möglichst exakt, so dass ich meinen Interrupt immer wieder exakt nach 4160 Timer-Schritten starten kann und ich mir um die Summe der geringen Abweichungen auch bei vielen Durchläufen keine Gedanken machen muss, sondern nur die Abweichung des Quarzoszillators existiert. @Peter: Diese Variante kannte ich noch nicht, muss mich da mal schlau lesen. Aber wenn die Genauigkeit nicht beeinflusst wird, scheint das ja die Lösung für mein Problem zu sein =) Vielen Dank. CyberHorst
Ok, war ein schlechtes Beispiel...da könnte ich auch den Timer auf 64 laden und dann 65 mal abzählen...aber ich denke damit wird deutlich, was ich meine...wenn ich Werte zwischen 32 und 64 zählen möchte, z.B. 45, dann kömme ich irgendwann in einen Bereich, in dem der µC fast nur noch mit Zählen beschäftigt ist, weil ich den Timer immer kleiner mache und immer häufiger im Interrupt die Durchläufe zähle. Aber dann müsste man vermutlich einen schnelleren Quarzoszillator nehmen, damit man die gewünschte Genauigkeit wieder erreichen kann. CyberHorst
:so dass ich meinen Interrupt immer wieder exakt nach 4160 Timer-Schritten :starten kann Hmmm... bist Du sicher, dass Du verstanden hast, wie Interrupts funktionieren? Vielleicht solltest Du einfach mal erzählen, was genau Du da machen willst. So wird das glaub ich nicht viel.
Verstehe ich es richtig, dass du immer eine konstante aber doch veränderliche Periodendauer haben willst? Beim AVR gibt es die OnCompare-Einheit (CTC-Mode), die immer zur gleichen Zeit ein Interrupt erzeugt. Dabei wird ein Timer gestartet und bei Erreichen eines Vergleichswertes zurückgesetzt. Durch Verändern des Vergleichswertes kann man die Periodendauer variieren. Ob der PIC sowas auch unterstützt, kann ich nicht sagen, weil ich die Controller meide.
Hi, genau so ist es. Ich benötige ein flexibles und präzises Timing im einstelligen Mikrosekundenbereich, wobei ich mich nicht mit Tricks um die Einhaltung der Genauigkeit kümmern möchte, das sollte der µC leisten. Die Funktion "Clear Timer on Compare Match" scheint genau dieses Problem zu lösen! Bei frei wählbarer Überlaufgrenze sollte sich so fast jedes erdenklich Timing sehr genau erreichen lassen. Vielen Dank, CyberHorst.
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.