AEQ-WEB

ATMega328 Amtel Studio LED PWM Fade
ATMega328
07.08.2018

ATMega328 LED PWM Fading

Zu diesem Artikel gibt es auch ein Video auf Youtube: Standalone ATMega328 PWM LED Fading - Mikrocontroller


In diesem Beitrag geht es um die PWM (Pulsweitenmodulation) Funktion vom ATMega328. Die PWM gesteuerte LED wird langsam immer heller und dann wieder dunkler. Das Projekt ist mit dem Blink-Projekt vergleichbar, nur dass die LED mit 255 Stufen heller und dunkler wird.


Wie PWM funktioniert

Digitale PWM-Signale sollen so aussehen, wie eine Sinuskurve, wo sich die Spannung abwechselnd ändert. Bei den Mikrocontrollern geschieht dies in digitaler Form. Im Gegensatz zur analogen Sinuswelle wird bei digitalen PWM-Signalen eine Rechteckwelle erzeugt. Das Maximum beträgt 5 Volt, das Minimum 0 Volt. Durch das extrem schnelle ein und ausschalten der LED und durch die Dauer diese Impulse, erreicht man dadurch ein PWM-Signal. Dieses Signal sieht so aus, als würde die LED eine Spannung, je nach Einstellung (0-255) von 0 bis 5 Volt haben. Viele Mikrocontroller unterstützen PWM, allerdings nicht auf jeden Port.


ATMega328 LED PWM Fading Control in C

Der Schaltplan

Für die LED wird ein Vorwiderstand von 220 Ohm benötigt. Da der Mikrocontroller in diesem Beispiel nicht mit einem Board betrieben wird, muss auch der Taktgeber vorhanden sein.Der Controller ist auch mit einem AVRISP Programmer verbunden, die die Software auf den Mikrocontroller lädt. Außerdem ist noch eine externe Stromquelle von 5 Volt notwendig.


Source Code
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU =  16000000UL

int main(void){
DDRB |=  (1<<PORTB1); //Define PORTB1 (PIN15) as Output
TCCR1A |= (1<<COM1A1) | (1<<WGM10);  //Set Timer Register   
TCCR1B |= (1<<WGM12) | (1<<CS11); 
OCR1A = 0;
int timer;
    while(1) {
		while(timer < 255){ //Fade from low to high
		timer++;
		OCR1A = timer;
		_delay_ms(50);
		}	
		while(timer > 1){ //Fade from high to low
		timer--;
		OCR1A = timer;
		_delay_ms(50);
		}
    }
}