Gast
#1537726
Halli,
wie man PWM startet findet man ja zur genüge, aber ich will es beenden.
Nur finde ich meinen Fehler nicht, da der Timer immer wieder von vorne
startet. Ich verwende einen ATmega48
Ich hoffe das Jemand mir mal meinen Fehler aufzeigen kann.
Mein Init sieht so aus:
TCCR0B |= (0<<WGM02)|(1<<CS02)|(0<<CS01)|(0<<CS00);
//Prescaler 256
TCCR0A |= (1<<COM0A1)|(0<<COM0A0)|(1<<WGM01)|(1<<WGM00);
//Fast PWM, TOP 0xFF, non-iverted
TIMSK0 |= (1<<OCIE0A);
sei();
Meine Timer-Schleife:
SIGNAL(TIMER0_COMPA_vect)
{
Counter += 0.008196; // Mhz = 8 -> 8000000 / 256 /256 == 122 Hz ->
1/122 hz == 8.196ms
if (OCR0A >= 255)
{
cli();
TCCR0B &= ~((0<<CS02) | (0<<CS01) | (0<<CS00)); // clock off
TIMSK0 &= ~(0<<OCIE0A); // timer off
Counter = 0;
}
OCR0A = (Counter * 255) / Zeit;
}
int main(void)
{
InitAVR();
InitStart(10, PWM_UP);
while(1)
{
...
}
}
Wenn OCR0A nun überläuft, wird der Timer leider nicht beendet.
Gruss,
Georg