Weiches Ein- u. Ausschalten einer Nachttischlampe



Ein Bekannter von mir erzählte mir von seiner Nachttischlampe. Was ihn daran störte, war der Effekt, daß diese beim Betätigen des Tasters sofort mit voller Helligkeit nervte. Und beim Ausschalten natürlich ruckartig dunkel war. Er wünschte sich eine Steuerung, die folgendes leistet:

  • ein Taster
  • ganz langsames Aufleuchten der Lampe
  • ganz langsames Dunkelwerden der Lampe

Entstanden ist folgende Versuchsschaltung:



Das Problem hierbei ist natürlich, daß der Mikrocontroller nicht den für eine Glühlampe erforderlichen Strom aufbringen kann. Das muß dann schon ein Transistor tun. In obiger Versuchsschaltung habe ich nur eine kleine 5V-Lampe (I=150mA) und einen kleinen Transistor (BC547) genommen. Du kannst mit einem "dicken" Transistor auch ganze Lampenläden steuern.



Wir benutzen die PWM-Funktion des Attiny13. Erst nach vollständigem Aufleuchten bzw. vollständigem Dunkelwerden ist der Taster für die nächste Aktion bereit.

Schau Dir den Code an:

#include <avr/io.h>
#define F_CPU 1000000UL  // 1 MHz
#include <util/delay.h>

//globale Variablen
int a; //fuer PWM-Wert
int zustand;// 0=aus , 1=an


void hellwerden(void){
    while (a<253)   
        {
        OCR0A = a;
        _delay_ms(50);
        a++;
        }
        zustand=1;
}

void dunkelwerden(void){
    while (a>1)   
        {
        OCR0A = a;
        _delay_ms(50);
        a--;
        }   
        zustand=0;
}


int main (void)
{
    DDRB |=_BV(PB0);      // Ausgang fuer Transistor mit Lampe
    PORTB &= ~_BV(PB0);   //Lampe aus
    OCR0A = 0;            //Lampe aus
       
    DDRB &= ~_BV(PB3);    //Taste
    PORTB |= _BV(PB3);    //Pull up Widerstand aktivieren
   
    TCCR0A=(1<<COM0A1) | (1<<WGM00) | (1<<WGM01); TCCR0B=_BV(CS01); //PWM aktivieren
   
    while (1)
    {
        if (bit_is_clear(PINB,3)&&(zustand==0)) {hellwerden();}
        if (bit_is_clear(PINB,3)&&(zustand==1)) {dunkelwerden();}       
    }
   
   
return 0;
}


Hier der Code-Ordner.