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
TCCR0B &= ~((1<<CS02) | (1<<CS01) | (1<<CS00)); // clock off Aehm, ich nehme alles zurück, cp fehler von mir :/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.