-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Helligkeitsmessung mit LEDs

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801

    Helligkeitsmessung mit LEDs

    Anzeige

    Zu Anzeigezwecken verwende ich in meinem aktuellen Projekt eine 3·9 Matrix aus LEDs an einem AVR. Die Anzeige soll einerseits bei heller Umgebung/Sonne gut ablesbar sein, andererseits aber bei Dunkelheit/Dämmerlicht nicht unangenehm hell sein.

    Also muss die Umgebungshelligkeit gemessen werden. Was liegt da näher, als die LEDs selbst als Fotodioden zu nutzen?!

    Die Anzeige besteht aus 3 Zeilen zu je 9 LEDs. Die LEDs in einer Spalte sind baugleich und können daher den gleichen Vorwiderstand R4 nutzen. Jede Spalte (Kathoden) braucht einen µC-Port, abenso jede Zeile (Anoden). Insgesamt brauchen die 27 LEDs also 12 Ports.

    Die Zeilen werden im Zeit-Multiplex angesteuert. Unterschiedliche Helligkeiten werden realisiert, indem über dieses Zeit-Multiplex eine Software-PWM gelegt wird. Grundtakt (Interrupt-Last) ist 20kHz, selbst 30kHz sind problemlos realisierbar (mit avr-gcc und 16MHz Systemtakt).

    Zur Helligkeits-Messung werden Anoden und Kathoden kurzzeitig (1µs) auf HIGH gelegt und danch der Kathoden-Port (AIN1) auf INPUT geschaltet. Der zum Input-Capture verdrahtete Analog-Komparator vergleicht die Spannung an den 3 LED-Kathoden mit der Spannung am Spannungsteiler R5-R6, welche dicht unter VCC liegt. Beim Unterschreiten der Schwelle wird ein Input-Capute-Ereignis ausgelöst und die zwischen "Loslassen" der Kathode und Unterschreiten der Schwellspannung verstrichene Zeit gemerkt. Diese Zeit (bzw. Zählerstand) ist ein Maß für die Umgebungshelligkeit.

    Zum Einsatz kommen High-Efficiency LEDs: rote vom GaAlAs-Typ, gelbe vom InGaAlP-Typ, grüne und blaue vom GaInN-Typ. Gemessen wird Rot. Glau und Grün sind ungeeignet zur Messung.

    Zusäzlich hängen in der LED-Matrix 3 Taster als Eingabe-Medien. Um einen Taster auszuwerten, wird die angeschlossene Anode als INPUT mit aktiviertem Pullup betrieben. Bei gedrücktem Taster liest man LOW, bei ungedrücktem HIGH. Die 3 Taster verbrauchen also keine extra-Ports! Die Dioden sichern die Anoden beim Drücken von mehr als einem Taster.

    Die maximal 9 aktiven LEDs pro Zeile werden ohne externen Zeilentreiber direkt durch den AVR angesteuert. Der Maximalstrom von 20mA/Port reicht locker, auch in heller Umgebung alle LEDs mit ausreichen Saft zu versorgen – trotz Helligkeitsverlust durch Multiplex.

    Das ganze geht natürlich auch, wenn man nur eine LED zum Messen nimmt und diese nicht in einer Matrix hängt...
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken hell-mess-mit-led.png  
    Disclaimer: none. Sue me.

  2. #2
    RN-Premium User Begeisterter Techniker
    Registriert seit
    30.04.2004
    Alter
    40
    Beiträge
    245
    Funktioniert das schon? Wenn ja, halte ich das Extrem geniale Lösung. Gratulation.

    lg

    Alex

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Super Idee! Halte uns unbedingt auf dem Laufenden.

    Könnte man die LED nicht auch als Fotodioden (sprich: Stromquelle) nutzen? Die Anoden werden dann auf Low gelegt und der Fotostrom lässt am Eingangswiderstand des Komparators eine Spannung gegen GND abfallen (ggfs. einen 1MOhm Widerstand nehmen).

    Hab's gerade mal mit einer weißen 10000mcd LED ausprobiert: Unter einer voll aufgedrehten 25W Halogenlampe messe ich über 850mV und 144kOhm (beides in Sperrrichtung).

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ja es funktioniert. Das ganze geht auch andersrum, indem ich die Anoden auf LOW lege und die Kathoden auf HIGH, die Dioden also vorher auflade (in Sperrichtung als C betrachtet). Von den Messwerten sieht das genauso aus.

    Diese Ansteuerung hatte ich versucht, um zur Helligkeitsmessung die Kapazitätsänderung der LEDs zu messen. Durch die Bestrahlung ändert sich die Dicke der Sperrschicht. Allerdings kann ich damit nix messen. Zum Entladen der Dioden hatte ich einen 10MOhm parallel geschaltet, aber der war viel zu klein. Warum diese Messung nicht funktioniert, ist mir unklar. Die Kapazität einer LED schätze ich auf 20pF, insgesamt wären das bei meiner Anordnung 60pF ohne Parasiten. Mit nem AT90S2313 hatte ich mal nen C-Messer gebaut, daher der Schätzwert von 20pF.

    @ogni42: Wenn man die Anoden auf LOW legt, pumpen die LEDs Elektronen zur Kathode und ziehen das Potential unter GND. Geht nicht, oder?

    Meine momentane Lösung leidet an einer recht größen Schwankung der Messwerte, von der ich nicht ganz weiß, woher sie kommt. Die Zeit-Werte schwanken locker mit +/-3dB, was aber für meine Zwecke gut ausreicht. Zudem glätte ich per Software. Messbereich habe ich von 0 bis 0x1ff vorgesehen, danach gibt's nen Timeout und die Messung beendet (passiert bei Dunkelheit).

    Schwieig (und für mich interessanter) ist nicht die Messung im Hellen, sondern wenn's dunkelt.

    Die Software ist übrigens recht kompliziert. Nicht nur die Helligkeitsmessung will den Timer1 benutzen, sondern auch noch 2 andere Teile der Software mit anderer Initialisierung von Timer1! Dafür musste ich ein Ressourcen-Management für Timer1 einführen. Zudem muss die Messung in einer extra geschaffenen Multiplex-Lücke stattfinden und dann Timer1 auch verfügbar sein...also nicht trivial.

    Erschwerden kommt hinzu, daß sich Tasterdruck-Messung und Helligkeitsmessung eigentlich ausschliessen. Dennoch brauch ich im 10ms-Abstand Poll-Werte von den Tastern zum Entprellen, lange/kurze Tasterdruck zu unterscheiden oder Auto-Repeate zu realisieren. Nichtsdestotrotz funktionieren auch die Taster problemlos... *grinz*
    Disclaimer: none. Sue me.

  5. #5
    Moderator Robotik Einstein Avatar von HannoHupmann
    Registriert seit
    19.11.2005
    Ort
    München
    Alter
    34
    Beiträge
    4.528
    Blog-Einträge
    1
    Jo ist echt nicht schlecht, das sind diese Lösungen die wirklich was hermachen. Ich hab zwar keine Anwendung bei mir dafür, obwohl ich könnte meine beiden Leuchtdioden am Roboter auch das Umgebungslicht scannen lassen und dann je nach dem einschalten.

    Was muss ich den genau machen wenn ich nur 2 Dioden reinhäng und braucht man Spezielle Leuchtdioden?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Messen kann ich an 7 Eingängen: Direkt am AIN1 wie gezeigt, oder an den 6 ADC-EIngängen. Ich verwende den ADC nicht (wenn, ginge das nur im Zeitmultiplex). Bei nicht aktiviertem ADC kann man den Ausgang des Analog-Multiplexers zum Analog-Comparator verdrahten. Qualitativ sehe ich keinen Unterschied an den Werten, ob ich das Signal durch den Multiplexer schleife oder nicht.

    Welche LEDs geeignet sind musst mal ausprobieren. Ich hatte ürsprünglich angedacht, grüne LEDs zu nehemen, weil das Empfindlichkeitsmaximum des Auges im Grünen liegt und die erzeugten Elektronen energiereicher sein sollten. Aber die besten Ergebnisse hab ich mit roten LEDs, evtl gehen auch gelbe. Die Substrate stehen oben, aber bei Rot geht vermutlich auch ne "normale" oder eine low-Current. Ich verwende ultrahelle (Kingbright vom Reichelt), weil ich dann 9 LEDs parrallel an einen µC port hängen kann.

    @ogni42: Die Fotospannung messe ich in Durchlassrichtung, also + an der Anode und - an der Kathode. Ich hatte es auch schon mal mit einem Transimpedanzwandler zur Strommessung versucht und mit der Spannung den ADC gefüttert. Aber das braucht viel externe Hardware (OpAmps, Widerstände...) und man muss sehr nahe an der Versorgungsspannung messen. Ich hatte das recht schnell wieder aufgegeben, weil zu kompliziert. Gleichzeitig noch die LED leuchten zu lassen hatte ich erst garnicht versucht, weil die Konvertierungszeiten im ADC viel zu lange sind.

    Was bisher nicht klappt ist wie gesagt, die Kapazität auszumessen. Das solle eigentlich problemlos gehen Die Kapazität ist spannungsabhängig, grob vermute ich mal, daß C linear mit der Dicke der Sperrschickt geht. Ne "normale" C-Messung schlägt aber fehl
    Ne C-Messung wäre natürlich viel schneller! Bei 10MHz erinnere ich mich an 18 Takte pro pF (hängt natürlich vom R ab...)
    Disclaimer: none. Sue me.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Ich halte die Widerstandsmessung auch für praktikabler, eben wegen des hohen Innenwiderstandes der LED. Beide Messverfahren funktioneren.

    Du hast recht. Positive Spannung ergibt sich in Durchlassrichtung.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Nö, ich messe nicht über einen Widerstand. Der R4 ist nur der Strombegrenzer, wenn eine der LEDs in der Spalte leuchten soll und AIN1 als OUT geschaltet ist.

    Beim Messen stört der R4 nicht, weil AIN1 als Eingang natürlich sehr hochohmig ist.

    Bei einer Strommessung ist ein Elektron ja "weg", nachdem es durch den Widerstand gehuscht ist. Wenn man die Elektronen ein Potential aufbauen lässt, trägt es mit zum Potentialaufbau bei.

    Noch was: Wenn man keine Taster an der Matrix hängen hat, kann man die ganze Chose auch "rumdrehen", also überall Plus/Minus und Kathoden/Anoden tauschen. Dann kann man den AIN0 einsparen, wenn man als Referenz die interne Bandgap von 1.2 V nimmt

    Ich hab die Logik aber so rum, weil ich die PullUps für die Taster brauche und AVR keine PullDowns hat. Ausserdem ist meine Spannung näher an Vcc als 1.2 V (paar 100mV oder so), das spart Messzeit.
    Disclaimer: none. Sue me.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Zwischenzeitlich hab ich die Schaltung etwas abgeändert:
    Die Schalter hängen nicht mehr an den Anoden, sondern in Reihe mit je einem Widerstand zwischen GND und je einem Kathoden-Port (ausser dem Port, an dem die Helligkeit gemessen wird).

    Vorteile:
    -- Es können 8 Taster angeschlossen werde, ohne extra-Ports zu verbrauchen
    -- Dioden werden überflüssig (waren sie vorher eigentlich auch schon), und die Taster müssen sich nicht einen Widerstand teilen
    -- Bei gedrücktem Taster schlägt die Strombelastung nicht zu den Anoden-Ports, sondern zu den weniger beanspruchten Kathoden-Ports.

    Um ein Signal als LOW zu erkennen, muss die Spannung am Port kleiner sein als 0.2*VCC. Da die internen Pollups minimal 20kΩ haben, ergibt sich als Obergrenze für die Taster-Widerstände 5kΩ. Mit ausreichend Sicherheitsabstand tut es also R=3.9kΩ.

    Das einzige, was jetzt noch fehlt, ist die Helligkeit der LEDs so zu kalibrieren, daß sie bei jeder Umgebungshelligkeit etwa gleich hell erscheinen, sowie ein (Software-) Schmitt-Trigger.
    Disclaimer: none. Sue me.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    13.08.2005
    Beiträge
    11
    @ SprinterSB

    könntest du den Quellcode deines AVR posten ? würd mich sehr interessieren wie du das gelöst hast. ich probiere schon seit knapp 11 stunden dran rum und es klappt nicht wirklich ...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •