Helligkeitsempfindliche LED
von Stefan Speckmann
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