Pulsweitenmodulation mit dem
Atmel ATMEGA 8 Chip
Mit Hilfe des Datenblattes und der Internetseite www.mikrocontroller.net war es möglich die PWM in Gang zu bringen.
Durch verschiedene Einstellungen der Register, kann man die unterschiedlichen Funktionen des Mikrocontrollers aufrufen. Im Weiteren werden die notwendigen Funktionen erläutert:
Einstellung des oberen Grenzwertes und die PWM-Art:
Um den PWM-Modus zu aktivieren müssen im Timer/Counter1 Control Register A TCCR1A folgende Einstellungen vorgenommen werden.
Bei dieser Einstellung geht es darum die obere Grenze (8bit = 255) einzustellen, das heißt, dass 255 der Periodendauer entsprechen. So ergibt sich, dass PWM11 = 0 und PWM10 = 1 eingestellt werden muss.
Im Folgenden wird zusätzlich im Register T CCR1A die Art der PWM eingestellt. Wir haben uns für die invertierende PWM entschieden, da dies der Technologie des Phillips-Contollers entspricht. Also werden die Registereinträge COM1A1 und COM1A0 auf 1 gesetzt.

So ergibt sich für das Register TCCR1A folgende Einstellung: (0xC1)

C-Befehl:
TCCR1A = ( 1<<WGM10) | (1<<COM1A1) | (1<<COM1A0);
Da wir die PWM mit einer Led darstellen wollen, jedoch folgen die Impulse so schnell hintereinander, dass die Led dauernt leuchtet. Aus diesem Grund haben wir einen Vorteiler verwendet, der im folgendem erläutert werden soll:
TCCR1B-Register:

Wir haben uns für einen Vorteiler von 1024 entschieden, da dieser die Geschwindigkeit der Zählimpulse vermindert.
So ergibt sich folgende Konstellation des Registers:
![]()
C-Befehl:
TCCR1B = (1<<CS10) | (1<<CS12);
Quellcode:
#include <avr/io.h>
void main (void)
{
//Ausgangsfreischaltung, 0b steht für binär und die anderen Zahlen für 8Bit des Ports B, angewählt ist Pin 1 (PB1), dieser wird von der PWM vorgegeben.
DDRB = 0b00000010;
// 8-Bit und invertierende PWM
TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1A0);
//Standart CPU-Frequenz 3,6864 MHz (mit 1024 Vorteiler)
TCCR1B = (1<<CS10) |(1<<CS12);
//Vergleichswert, "Sollwert" (Register 24)
OCR1A = 200;
}
Wie ist die Funktion PWM des Atmega 8?
Hier kann nachvollzogen werden, was bei jedem Step geschieht. Links sehen Sie die Änderungen der Regisiter.
Step 1:

Step 2:
Step 3:
Step 4:
Wie auch beim Phillips-Controller wird der Wert im High-Register gespeichert und mit dem Low-Register (Vergleichswert) verglichen.
Resultierendes PWM - Signal am Ausgang PB1:

Quelle: www.mikrocontroller.net
Quellcode: