Falk Brunner schrieb:
> @ Karl heinz Buchegger (kbuchegg) (Moderator)
>
>>Was ich davon halte, sag ich lieber nicht.
>
> Doch sag mal, ich kenn da jemanden, der hat das Programm verbrochen . .
> .
TCNT2 = TCNT2 + 1
bzw
TCNT2 = TCNT2 - 1
was natürlich nicht so einfach ist, weil das ja keine atomare Operation
ist und der Timer während der Addition den nächsten Tick machen könnte.
-> Nicht den TCNT verändern, sondern umstellen auf CTC (bzw. PWM mit
einer vorgebbaren Obergrenze) und die Obergrenze bis zu der der Timer
zählt verändern. Das ist dann unkritischer.
Aber auf jeden Fall, müssen die 2 bzw. 4 da aus dem Code raus und
dokumentiert werden wie es zu den 2 bzw. 4 kommt.
bzw. so.
#define TCNT_DURING_ISR_AT_CORRECTION_POINT 3
#define NEW_TCNT_IF_TO_SLOW TCNT_DURING_ISR_AT_CORRECTION_POINT + 1
#define NEW_TCNT_IF_TO_HIGH TCNT_DURING_ISR_AT_CORRECTION_POINT - 1
Jetzt muss man noch erklären wo der Wert für
TCNT_DURING_ISR_AT_CORRECTION_POINT hergekommen ist (ausgemessen, durch
versuch und irrtum festgestellt, ...) und den Leser auffordern, sich den
selber auszumessen.
(Die Makronamen sind natürlich viel zu lang. ist schon klar.)
>
> Aber bitte vorher mal das Programm UND die Kommentare/Hinweise GENAU
> ansehen.
Ich habs gelesen.
Und wenn jemand einen anderen Systemquarz benutzt wundert er sich warum
seine Uhr plötzlich nicht mehr stimmt, weil die Korrektur falsch ist.
Das ganze ist (wie auch im Artikel erwähnt) ein Tanz auf den
Timing-Eiern.
Und wir alle wissen, wie gut unsere Besucher die Artikel lesen :-)