diyundso.de
PWM mit 8-bit-Timer am AVR
Das folgende Beispiel zeigt das Erzeugen einer PWM-Modulierten Spannung mit Hilfe eines 8-bit-Timers (kein Overflow-Timer!)
Das Signal wird am Pin OC2 erzeugt.
Codebeispiel:
#include <avr/io.h>
#include <avr/interrupt.h>
void start_pwm(void){
//TCCR2 = 0x01; //CPU-Takt
TCCR2 = 0x02; //CPU-Takt/8
//TCCR2 = 0x03; //CPU-Takt/32
//TCCR2 = 0x04; //CPU-Takt/64
//TCCR2 = 0x05; //CPU-Takt/128
//TCCR2 = 0x06; //CPU-Takt/256
//TCCR2 = 0x07; //CPU-Takt/1024
TCCR2 |= (1<<WGM21)|(1<<WGM20); //Fast-PWM
TCCR2 |= (1<<COM21); //Non-Inverting-Fast-PWM
sei(); //Interrups aktivieren
DDRB |= (1<<PB3); //OC2 als Ausgang
//PWM
OCR2 = 50; //Die Effektivspannung beträgt hier sqrt*(50/256)*Versorgungsspannung
}
int main (void){
start_pwm();
while(1){};
return 0;
}