Forum: Mikrocontroller und Digitale Elektronik Hilfe, kann Timer0 nicht stoppen :/


von Georg (Gast)


Lesenswert?

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

von Georg (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.