Die Antwort hast Du dir mit diesem Post vermutlich schon selbst gegeben.hallo wgrug,
das ist genau was ich brauche! könntest du es noch ein wenig konkretisieren bitte!? In etwa so hier? Geht dann das PWM noch?
// Initialisierung:
TCCR2 = (1<<CS22);
TCNT2 = 183;
TIMSK |= (1<<TOIE2);
SIGNAL(SIG_SIG_OVERFLOW2)
{
countTimer2++;
}
Mit dem Timer 2 wird das nicht gehen wenn auf dieses Register auch noch anderweitig geschrieben wird und dadurch kein Überlauf zstande kommt?
Es kommt auch auf den gewählten PWM Mode an.
Diese Modes kenne ich:
Bei manchen Modes Zählt das TCNT2 Register bis zum Comparewert hoch und wird dann Hardwaremässig genullt - CTC.
In einem anderen PWM Mode Zählt der Zähler bis zum Comparewert vorwärts und dann wieder rückwärts.
In wieder einem anderen Mode Zählt der Zähler bis 0xFF und dann wieder auf 0x00.
Alle diese Modes erzeugen normalerweise keinen! Timer Overflow Interrupt und sind somit nicht geeignet.
Das TCNT2 Register muss Hochzählen bis der Zählerstand von 0xFF wieder auf 0x00 Überläuft, nur dann wird ein Timer Overflow Interrupt erzeugt (=Fast PWM Mode + Phase Correct PWM Mode).
Hast Du in einem deiner Timer, diesen PWM Mode eingestellt ???
Wenn nicht wird es so nicht funktionieren.
Eine weitere Option wäre es einen Comparematch Interrupt freizugeben und hier den Zähler hochzuzählen.
Das hätte aber den Nachteil, das bei Extremwerten des PWM (0x00 + 0xFF) unter Umständen dieser Interrupt nicht anspricht.
Lesezeichen