|
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.
|