PWM mit 8-bit Timer (ATMEGA8)

Gast #39897
Hallo,

kann mir jemand sagen, wie man mit dem 8-bit Timer vom ATMEGA8 ein 
PWM-es Signal erzeugen kann?

Ich habs so versucht, aber im Simmulator ändert sich der Ausgang 
(PB3-Port) nicht:


#include <io.h>
#include <interrupt.h>
#include <inttypes.h>

int main (void)
{
       DDRB  = 0xFF;

    // TIMER2 initialisation

      TCCR2 = 0x00;   // stop
       ASSR  = 0x00;   // set async mode
       TCNT2 = 0x01;   // setup
       OCR2  = 0x10;
       TCCR2 = 0x42;   // start prescale:8

      sei();
    for(;;){};

return 0;
}



Gruß
Zoltan
Gast #39898
> #include <io.h>

Bitte <avr/io.h> nehmen.

> #include <interrupt.h>

Auch der wäre in <avr/interrupt.h> zu finden, aber den
brauchst Du gar nicht.

> #include <inttypes.h>

Den brauchst Du derzeit auch nicht.

>      TCCR2 = 0x00; // stop

Der ist sowieso nach einem Reset gestoppt.

>       ASSR = 0x00; // set async mode

Überflüssig, synchroner Modus ist Standard.

>       TCNT2 = 0x01; // setup

Auch nicht sinnvoll.  Die erste Periode zählt damit nur 255
mal, alle anderen 256.

>       TCCR2 = 0x42; // start prescale:8

Hier liegt der Hase im Pfeffer.  Besser ist es, Du nimmst die
Bitkonstanten, dann schaut sich's einfacher im Datenblatt
nach:

TCCR2 = _BV(WGM20) | _BV(CS21);

WGM20 gesetzt und WGM21 nicht gesetzt ist der phase correct
PWM mode, soweit OK.
CS221 gesetzt und CS22/CS20 nicht, Vorteiler 8, auch OK.

Aber: wer sagt denn Deinem Controller, daß Du den OC2 auch
benutzen willst?   Du mußt noch COM21 setzen und ggf. auch
COM20, dann geht es.

      sei();
    for(;;){};

return 0;
}
Gast #39899
Danke für die ausführliche Beschreibung!

Ich musste noch COM21, COM20 setzen. Das habe ich übersehn. Mit dem 
Simulieren klappt es trotzdem nicht, obwohl der programmierte IC 
einwanfrei funktioniert.

Danke nochmal Joerg

Gruß
Zoltan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.