PWM mit Attiny2313



PWM steht für Pulsweitenmodulation (engl.: pulse width modulation).
Eigentlich ist das bessere deutsche Wort für unsere Anwendung: Pulsbreitensteuerung.

Hier wird erklärt, was es ist und was man damit alles machen kann.



Experiment: Eine LED an OC0A (PB2) in 4 Helligkeitsstufen leuchten lassen:


Hier der Code:


#include <avr/io.h>


#define F_CPU 8000000UL      // 8 MHz (fuer delay.h)

#include <util/delay.h>



int main(void){

   
    //Hardware-PWM initialisieren
    DDRB |= _BV(PB2);

    TCCR0A = (1<<WGM11) | (1<<WGM10) | (1<<COM1A1); TCCR0B = (1<<CS10);

    
    while(1){

        OCR0A = 0;   _delay_ms(250);_delay_ms(250); //dunkel
        OCR0A = 30;  _delay_ms(250);_delay_ms(250); //schwach leuchtend
        OCR0A = 80;  _delay_ms(250);_delay_ms(250); //staerker leuchtend
        OCR0A = 255; _delay_ms(250);_delay_ms(250); //volle Helligkeit

    }


    return 0;
}


Hier der Quelltext-Ordner.



Anmerkungen und Aufgaben:

  • Du kannst (eventuell mit einem zusätzlichen Transistor) auch gewaltige superhelle LEDs oder Lampen sowie Gleichstrommotoren und Servomotoren ansteuern. Das findest Du auf der Mikrocontrollerspielwiese auch für andere Mikrocontroller hier.
  • Ich geb's zu: Die Harware-PWM-Befehle sind ziemlich unübersichtlich. Wenn Du genau das Benutzen der PWM-Funktionen erkunden willst, kannst Du das auch alles in den Datenblättern nachlesen.