Eine LED kann nicht nur Licht erzeugen, sondern auch Licht erkennen! Die arbeitet dabei ähnlich wie eine Fotodiode. Photonen befreien Elektronen in der Sperrschicht der Diode. Dabei fließt ein größerer Sperrstrom , wenn die LED beleuchtet wird.
Weil der Sperrstrom einer LED sehr klein ist, wird ein zusätzlicher Transistor zur Verstärkung eingesetzt. Der Aufbau entspricht dann ungefähr einem Fototransistor. Als Emitterwiderstand dient diesmal nur der interne 1-MOhm-Widerstand am Analogeingang des Mikrocontrollers.
Das Ergebnis kann man direkt an der Spannungsanzeige auf dem Bildschirm sehen. Je nach verwendeter Beleuchtung erkennt man ein leichtes Flackern. Um das genauer zu untersuchen, wird die Oszilloskopfunktion des Mikrocontrollers verwendet. Hier sieht man eine Änderung der Helligkeit im 100-Hertz-Takt, wobei alle 10 Millisekunden ein Maximum erscheint. Die Lampe flackert mit der doppelten Netzfrequenz von 50 Hz, weil jede Halbwelle des Wechselstroms ein Helligkeitsmaximum erzeugt.
Mit einem Mikrocontroller kann man oft sehr einfache Schaltungen verwenden und dies durch etwas mehr Aufwand im Programm ausgleichen. Hier wird die LED in Sperrrichtung einfach an den Digitalport P4 angeschlossen. Die zusätzlich angeschlossene LED am PWM-Ausgang soll die gemessene Helligkeit anzeigen.
Die Messung über einen einzelnen Digitalport verwendet die Tatsache, dass die LED zugleich ein kleiner Kondensator mit etwa 5 pF ist. Diese Kondensator wird über den Port aufgeladen. Dann wird der Port als hochohmiger Eingang verwendet und misst die zum Entladen des Kondensators notwenige Zeit. Wenn Licht auf die LED fällt, bewirkt der höhere Sperrstrom eine schnellere Entladung. Bei sehr schwachem Licht dauert es etwa 10 ms, bis der Port den Zustand Null erkennt.
Hier das Messprogramm: Das Ergebnis der Zeitmessung wird auf den PWM-Ausgang übertragen. Die rote LED wird daher heller, wenn weniger Licht auf die grüne LED als Lichtsensor fällt.
Pdir = 0 L1: Gosub L2: Zeitmessung A = C PWM = A Goto L1: L2: Zeitmessung Portout = 63 Rem LED aufladen Delay = 10 Portout = 0 Rem LED isolieren C = 0 L3: A = C A = A + 1 C = A Delay = 1 A = Portin B = 16 Rem Port D4 A = A And B Rem schon entladen? If A = B Goto L3: Return End