Schaffe nicht Timer0 zum laufen zu bringen

Gast #782563
Lesenswert?
• ▲
▼
Hilfe! Ich drehe langsam durch!
Will einen Pwm-Signal mit Atmega16 am Pin OC0 erzeugen. Hab den Kapitel 
zu Timer0 im Datenblatt durchgelesen.

Das Timer soll als "Phase Correct PWM Mode" , nicht invertierend laufen.
So hab ich das Timer initialisiert
        TCCR0=0b00101010;
  TIMSK=0b00000000;
  OCR0 =0b00010000;

Aber es läuft garnicht.

Kann mir jemand einen Beispiel dazu geben, mit der kurzen Beschreibung.

Ich gebe zu, bei solchen Aufgaben brauc man Geduld. Den habe ich auch, 
aber dies mal ...

Danke.
Gast #782576
Lesenswert?
• ▲
▼
Wie soll die Interrupt-Routine aussehen? Braucht man sie überhaupt?

So sieht mein Testquellcode

int main(void)
{
  DDRA=0xff;
  DDRB=0b00001111;
  DDRC=0xff;

  PORTA=0xff;
  PORTB=0x06;

  TCCR0=0b00101010;
  TIMSK=0b00000000;
  OCR0 =0b00010000;

  sei();
  while(1)
    {
      PORTA |=(1<<PA0);
      PORTA |=(1<<PA1);
      PORTA &= ~(1<<PA0);
      PORTA &= ~(1<<PA1);
    }
return 0;
}

Wo liegt der Fehler!!!
#782578
Lesenswert?
• ▲
▼
PWM funktioniert besser, wenn man den Timer auch in den PWM-Modus 
versetzt. Der CTC-Modus bringt dich da nicht weiter. Schau dir die 
Positionen der WGM-Bits noch mal an.

NB: Das ist ein Grund, warum man auf solche 0b11110000 Binärwürste 
verzichten und die Bitnamen verwenden sollte, also (0<<WGM01 | 
1<<WGM00).
Gast #782595
Lesenswert?
• ▲
▼
Andreas, Vielen vielen vielen Dank!

Eigene Dummheit hat mir ein Paar schlafflose Nächte gegönnt. Werde mein 
Programmierstil einfach umstellen, so dass solche dumme Fehler nie mehr 
vorkommen.

MfG College

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren