Newbee Detlev schrieb:
> Das Heißt also für mich das ich den Timer1 den ich im Millisekunden
> Rhytmus betreibe und auf dem Ich mittels Overflow Interrupt etwas
> ausführe
> gar nicht doppelt werden kann da bei Jedem erreichen des Compare Wertes
> der Timer zurück gesetzt ist
Nicht so schnell.
Erst mal: Was genau verstehst du unter 'Compare-Mode'?
Das Compare Register dient in erster Linie dazu, den jeweiligen
Zählerstand mit diesem Compare-Register zu vergleichen und wenn beide
gleich sind, eine Aktion auszulösen. Das Mindeste was passiert ist, dass
in einem Statusregister ein Bit gesetzt wird, welches diese
Übereinstimmung anzeigt. Wie es dann allerdings weiter geht, wie dieses
Bit weitere Aktionen auslöst, hängt in weiten Teilen davon ab, welchen
Modus du am Timer konkret eingestellt hast.
> Daher stelle ich die Frage anders
> Ich möchte einen Timer mit eier Zahl Länge von 1ms haben (klappt :-))
>
> Nun mochte ich das alle 10µs auch ein Interrupt ausgelöst wird und das
> dachte ich geht mit einem compare Register ohne den Grundtimer zu
> beeinflüssen.
Das wird etwas schwierig. Machbar ist es.
Du musst dir nur ausrechnen, wie weit der Timer zählen muss, damit genau
10µs (oder zumindest dicht drann) vergangen sind. Das ist dann der
(erste) Wert, der ins Compare Register muss. Ist die Übereinstimmung da,
kannst du dir einen Interrupt auslösen lassen, in dem du dir den
nächsten Compare-Wert bestimmst, nach dem wieder 10µs vergangen sind.
> Und wie würdet Ihr das Problem Lösen?
Die Grundprämisse, dass der Timer eine Zykluszeit von 1ms haben soll
über Bord werfen. Der Timer soll ein regelmässiges Signal auslösen
(einen Interrupt) und für die Zeitdauer, wann das geschehen soll, wähle
ich die kleinste Zeitdauer die ich benötige. Von dieser Zeitdauer kann
ich dann alle Vielfachen leicht ableiten, indem ich selber mitzähle.
Anders ausgedrückt:
Wenn ich eine Uhr habe, die nur einen Stundenzeiger hat, dann ist es
schwierig damit 5 Minuten 30 Sekunden abzumessen.
Habe ich aber eine Uhr mit einem Sekundenzeiger, dann ist es leicht
Sekunden abzumessen (ich brauch nur die Anzahl der Sekunden vom Beginn
meiner Messung an mitzählen). Nach jeweils 60 Sekunden ist eine Minute
vergangen. Nach jeweils 60 Minuten ist eine Stunde vergangen.
PS: Nimm das SEI() aus deinem Interrupt Handler raus. Du weißt noch
nicht, was du damit alles anrichten kannst.