Forum: Compiler & IDEs PWM mit 8-bit Timer (ATMEGA8)


von Zoltan (Gast)


Lesenswert?

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

von Joerg Wunsch (Gast)


Lesenswert?

> #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;
}

von Zoltan (Gast)


Lesenswert?

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

von Joerg Wunsch (Gast)


Lesenswert?

Die Simulation in VMLAB hat bei mir funktioniert.

von christian (Gast)


Lesenswert?

Hi!
Gib doch einfach auf ein NE555 ein entsprechendes Triggersignal.

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.