www.mikrocontroller.net

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


Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Simulation in VMLAB hat bei mir funktioniert.

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Gib doch einfach auf ein NE555 ein entsprechendes Triggersignal.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.