Dieser lief auch. Getestet mit einer LED, die ich in der ISR sekündlich
getoggelt habe.
Jetzt wollte ich die Funktion umschreiben, um gleiche auch für andere
Timer zu benutzen.
Jetzt sehe ich, dass die LED viel schneller blinkt.
Woran liegt das? Wahrscheinlich habe ich jetzt den Timer falsch
erstellt. Ich sehe aber keinen Fehler, da es ja auch eigentlich nur 1 zu
1 kopiert ist.
Matthias S. schrieb im Beitrag #6221460:
> Pointer auf uint8_t, aber ein 16-Bit Register beschreiben (OCR1A)? Nö,> das will man nicht.
Da haste recht :)
Besten Dank
S. Landolt schrieb:> Nur interessehalber: welchen Sinn sollen all diese Veroderungen haben,> ganz speziell aber bei OCR1A?
beim OCR1A ist es falsch und könnte sogar zum falschen Ergebnis führen.
Bei den anderen habe ich es immer so gemacht, da manchmal auch mehrere
Werte in das Register eingetragen werden und somit nichts überschriben
wird.
Ich halte das Vorgehen des TE auch für viel zu kompliziert und
fehlerträchtig. Ausserdem sind Timer 0 und Timer 2 ja nun mal keine 16
Bit Timer, so das man da wieder was ändern sollte.
Abstrahieren ist ja schön und gut, aber für die Timer kann man es auch
übertreiben.
S. Landolt schrieb:> Kann ich beim hier vorliegenden Fall, Initialisierung, nicht> nachvollziehen.
So wurde es uns beigebracht. Es gab auch eine Begründung warum man das
so macht. Diese weiß ich allerdings nicht mehr. Habe es aber immer schon
so gemacht.
Jetzt auf dem ersten Blick, konnte ich auch kein Register finden,
welches aus irgendwelchen Gründen doppelt beschrieben wird, wodurch |=
nötig wäre
Johannes schrieb:> Jetzt wollte ich die Funktion umschreiben, um gleiche auch für andere> Timer zu benutzen.
Eine Funktion, die fast nichts macht, der aber 12 Byte an Argumenten
übergeben werden müssen, ist nicht so der Brüller.
Den Flash kriegt man auch auf bessere Arten gefüllt.
Eine eigene Frage?
Dieser Thread ist über 6 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.