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.