Forum: Mikrocontroller und Digitale Elektronik Timer-Problem. Zwei Timer kaskadieren?


von CyberHorst (Gast)


Lesenswert?

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

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

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...

von AVRFan (Gast)


Lesenswert?

>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.

von Peter D. (peda)


Lesenswert?

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

von CyberHorst (Gast)


Lesenswert?

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


von CyberHorst (Gast)


Lesenswert?

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

von AVRFan (Gast)


Lesenswert?

: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.

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

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.

von CyberHorst (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.