Forum: Mikrocontroller und Digitale Elektronik Schaffe nicht Timer0 zum laufen zu bringen


von college (Gast)


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.

von crazy horse (Gast)


Lesenswert?

nicht überprüft, aber du musst auf jeden Fall auch den entsprechenden 
OCx-Pin als Ausgang schalten. (DDRB3?)

von college (Gast)


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!!!

von Andreas K. (a-k)


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).

von college (Gast)


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

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.