Helligkeitsempfindliche LED        

von Stefan Speckmann                        
Elektronik-Labor  Projekte   AVR   T13-Contest



http://www.elektronik-web.de/htm/reaktiv_led.htm

Wird eine LED in Sperrrichtung betrieben, arbeitet der p-n-Übergang als Fotodiode. Die folgende kleine Schaltung mit einem Atmel Tiny 13 als Herzstück soll diesen Effekt einmal verdeutlichen. Die LED wird lediglich über einen 180 Ohm Vorwiderstand zwischen den Portpins PB3 und PB4 angeschlossen. 



Gleich nach dem Einschalten des Tinys wird die LED ein paar mal ein- und ausgeschaltet. Es soll lediglich zeigen, dass alles soweit betriebsbereit ist. Danach werden PB3 und PB4 so geschaltet, dass sich die LED in Sperrrichtung befindet. Hiernach wird PB4 auf „Eingang“ umgeschaltet, und nun läuft eine Programmschleife solange, bis sich die LED entladen hat. Unterdessen wird eine Variable hochgezählt. Je nach Lichteinfall ist der Wert der Variable nun ein Indikator für die Umgebungshelligkeit. Die Änderung der Helligkeit wird vom Programm ausgewertet und schaltet die LED ein, und zwar zunächst mit voller Helligkeit. Parallel dazu wird im Tiny nun ein Timer gestartet, mit der die LED von Hell bis Dunkel gesteuert wird (PWM).

„Wischt“ man nun mit der Hand über die LED, wird sie mit voller Helligkeit eingeschaltet und erlischt dann langsam wieder. Die Schaltung könnte man z.B. als Modul konzipieren und mehrere davon unter dem heimischen Glas-Wohnzimmertisch verbauen. Streicht man nun mit seinem Arm über die Glasplatte,  werden wie von Geisterhand die vielen LEDs nacheinander eingeschaltet und genauso erlöschen sie wieder. Das ist bestimmt ein sehr interessanter Showeffekt. Allerdings hat die Schaltung auch einen kleinen Haken: Eine gewisse Umgebungshelligkeit muss natürlich vorhanden sein. Ansonsten funktioniert das Ganze nicht mehr.

Download: Reaktiv.zip

$regfile = "ATtiny13.dat"
$hwstack = 10
$swstack = 10
$framesize = 20

Const True = 1
Const False = 0
Config Timer0 = Timer , Prescale = 64
Config Portb.3 = Output
Config Portb.4 = Output

On Timer0 Timer0_isr
Enable Interrupts
Disable Timer0
Dim A As Byte , Hi As Byte , Lo As Byte
Dim Ladung As Bit , Phase As Bit
Dim E1 As Long , E2 As Long

E2 = 10000000

'--LED Test nach Einschalten-------------
For A = 1 To 20
Toggle Portb.3
Waitms 100
Next A
'-----------------------------------------

Do
'--LED wird in Sperrrichtung "aufgeladen"-
Portb.3 = 0 'an Anode von LED
Portb.4 = 1 'an Kathode von LED
Waitus 100
'-----------------------------------------

Config Portb.4 = Input 'PortB.4 auf Eingang schalten
Portb.4 = 0

'--Ladezustand abfragen bis Ladung=0------
Do
Ladung = Pinb.4
Incr E1
Loop Until Ladung = 0
'-----------------------------------------

Config Portb.4 = Output 'PortB.4 wieder auf Ausgang schalten
Portb.4 = 0

If E2 < E1 Then
Enable Timer0
For Lo = 1 To 255
Hi = 255 - Lo
Waitms 25
Next Lo
Disable Timer0
End If

E2 = E1 * 1.5
E1 = 0

Loop
End

Timer0_isr:
If Phase = True Then
Portb.3 = 1
Timer0 = Lo
Phase = False
Else
Portb.3 = 0
Timer0 = Hi
Phase = True
End If
Return




Elektronik-Labor  Projekte   AVR   T13-Contest