Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert diese LED-Schaltung?


von Michael P. (Firma: n.a.) (micha1102)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen,

zu der im Bild gezeigten Schaltung habe ich ein paar Fragen.
Ich will nur wissen und verstehen wie es funktionert und hoffe ihr könnt 
mir dabei weiterhelfen.

Die Leiterplatte stammt aus einem der millionenfach verkauften 
"Spinner", die nun nach dem Hype für paar Cent auf den Wühltischen an 
der Kasse verramscht werden.

1.Frage:
Die Schaltung läuft mit 3 Volt (Li-Zelle 1220 ist auf der Rückseite der 
Platine befestigt). Von den 10 LED sind 4 Stück blaue. Außer dem IC, 
einem Taster zum Einschalten und den LED sind keinerlei weiteren BE 
vorhanden. Die Schaltung funktioniert auch noch bei ca. 2,5V.
Wie wird das mit den blauen LED realisiert? Hat der IC intern evtl. eine 
Ladungspumpe?

2.Frage:
Es gibt keinerlei Vorwiderstände für die LED. Trotzdem sind alle LED 
stets gleichmäßig hell, egal ob nur eine oder alle 10 leuchten. Kann der 
IC eine Art KSQ für die Ausgänge beinhalten?
Wenn nicht, lässt sich das auch mit Software erreichen?

3.Frage:
Der IC hat max. 6 Pins als Ausgänge zum Treiben der 10 LED zur 
Verfügung.
Es müsste also irgendein Multiplexbetrieb stattfinden.
Da die LED-Zeile der Schaltung Text und beliebige Grafikmuster anzeigen 
kann, muss jede LED auch einzeln ansteuerbar sein. Egal mit welcher 
Drehzahl die LED-Zeile rotiert, keine einzelne LED flimmert, wie man es 
bei hohen Drehzahlen und Multiplex erwarten könnte, wenn alle 10 LED 
gleichzeitig auf ON geschaltet sind.

Da die Schaltung keinen Winkelsensor besitzt, kann das Multiplexing auch 
nicht mit der Winkelposition synchronisiert werden (um etwa ein 
stehendes Bild zu erhalten).

Wie kann so trotz alledem mit dieser Minimalschaltung bei Rotation ein 
flimmerfreies Multiplexing realisiert werden?

Der IC hat kein Label, ist also leider eine Blackbox. Wenn ich Zeit 
habe, werde ich den Schaltplan dazu mal aufzeichnen. Die paar Leitungen 
dürften schnell durchzuklingeln sein.

Blaue (bzw. weisse) LED mit 3 Volt direkt per µC anzusteuern finde ich 
schon interessant.

Beste Grüße
Micha

: Bearbeitet durch User
von Jörg R. (solar77)


Lesenswert?

Michael P. schrieb:
> zu der im Bild gezeigten Schaltung

Das ist eine Platine, keine Schaltung (Schaltbild)?


Michael P. schrieb:
> Es müsste also irgendein Multiplexbetrieb stattfinden.

Charlieplexing

: Bearbeitet durch User
von H. (Gast)


Lesenswert?

Wenn man sucht, kann man schon blaue und weiße LEDs unter 3V finden, 
allerdings haben die Seltenheitswert.

von Boris O. (bohnsorg) Benutzerseite


Lesenswert?

Was hindert einen Hersteller daran, verschiedene Funktionen in ein IC zu 
integrieren? Warum darf nicht auch ein Drehratensensor darin verfügbar 
sein? Meist können LEDs einen Spitzenstrom vertragen und das plumpest 
Mögliche wäre, die mittlere Leistung über eine PWM zu liefern, ohne den 
Spitzenstrom zu überschreiten. Unter Umständen hat auch die Versorgung 
einen Innenwiderstand, was den Maximalstrom ebenfalls begrenzt 
(Stichwort Throwie). Es gibt übrigens auch ins PCB eingebettete 
Bauteile. Dazu könnte der Kondensator für die Ladungspumpe gehören.

von Michael B. (laberkopp)


Lesenswert?

Michael P. schrieb:
> Wie kann so trotz alledem mit dieser Minimalschaltung bei Rotation ein
> flimmerfreies Multiplexing realisiert werden?

Obwohl SinoWealth und Holtek interessante uC haben, mit 100mA 
Treiberleistung direkt für LEDs, kenne ich keine mit eingebauter charge 
pump.

Miss doch mal mit einem Oszilloskop bei wechselnder Betriebspannung die 
relevanten Spannungen an den LEDs nach.
Und wenn du kein Scope hast, löte ein blaue LED aus und schau, an 
welcher Spannung sie welche Helligkeit produziert.

Eine Reduzierung des mittleren Stromes bei höheren Spannungen liesse 
sich ja durch Messen der Betriebsspannung per A/D und verkürzten PWM 
Impulsen erreichen.

von Guido Körber (Gast)


Lesenswert?

Die LEDs werden wohl mit nur wenigen mA laufen und ich fürchte die 
Strombegrenzung wird teilweise über den Innenwiderstand der Batterie 
passieren…

von Michael P. (Firma: n.a.) (micha1102)


Lesenswert?

Hallo,

danke erstmal für eure Antworten.

Bei ähnlichen Anwendungen, z.B. Propelleruhren, werden die Zeichen oder 
Grafiken spaltenweise berechnet und angezeigt. Entweder die Spalte 
komplett mit allen Punkten (meistens 8) oder alternativ bei der 1. 
Umdrehung z.B. Pkt 1 - 4, bei der 2. Umdrehung Pkt 5 - 8 usw. Durch die
schnelle Rotation wird dann unter Ausnutzung der Trägheit der Rezeptoren 
im Auge das Bild zusammengesetzt. Ähnlich also wie beim alten Röhren-TV.

Bei der vorliegenden Leiterplatte werden die Zeichen auch alle 
sequentiell spaltenweise nach einem im µC fest eingestelltem Takt 
angezeigt. Einen externen Trigger für die Synchronisierung gibt es 
definitiv nicht.

Wenn ich starr geradeaus schaue und die LP einmal schnell horizonal 
bewege, ist der Text oder die Grafik klar zu sehen.

Es bleibt die Frage, wie die es schaffen, dabei die Spalten (hier 10 
LED) auch mit Charieplexing gleichzeitig komplett und flimmerfrei 
anzuzeigen.
Bei Charlieplexing können ja prinzipbedingt nie alle LED gleichzeitig 
leuchten.

Eigenlich müsste dazu wohl eine extrem hohe MPX-Frequenz zum Einsatz 
kommen. Leider habe ich z.Zt. für derartige Messungen keinen geeigneten 
Oszi oder LA hier.


Jörg R. schrieb:
> Charlieplexing

ja, ist so. Jeweils 2 LED sind antiparallel zusammengeschaltet. Habe es 
eben mal ausgemessen.


Boris O. schrieb:
> Es gibt übrigens auch ins PCB eingebettete
> Bauteile.

hier eher wohl nicht der Fall. Das ist eine billige doppelseitige 
Hartpapierplatine.


> Unter Umständen hat auch die Versorgung
> einen Innenwiderstand

wenn der Innenwiderstand der Zelle gezielt ausgenutzt wird, ist es 
erstaunlich, dass die Flanken der Schaltimpulse den µC ohne einen 
Stützkondensator wegen unstabiler Spannung nicht zum zufälligen Absturz 
oder Reset führt.

Michael B. schrieb:
> Und wenn du kein Scope hast, löte ein blaue LED aus und schau, an
> welcher Spannung sie welche Helligkeit produziert.

an einer blauen LED habe ich 2,75 Volt gemessen


Beste Grüße

Micha

: Bearbeitet durch User
von Michael P. (Firma: n.a.) (micha1102)


Lesenswert?

Noch was:

Habe gerade mal am IC gemessen. Pin 1 ist Vdd und Pin 8 ist Vss.
Ist das nicht der Standard bei den einfachen PICs?

von HildeK (Gast)


Lesenswert?

Michael P. schrieb:
> Habe gerade mal am IC gemessen. Pin 1 ist Vdd und Pin 8 ist Vss.
> Ist das nicht der Standard bei den einfachen PICs?

und bei Atmels und bei vielen anderen vermutlich auch. Das reicht nicht, 
um auf einen bestimmten Typ zu schließen.

von Michael P. (Firma: n.a.) (micha1102)


Angehängte Dateien:

Lesenswert?

Hallo,

für alle die es interessiert habe ich hier mal den Schaltplan gezeichnet 
und beigefügt.

Keine Widerstände zur Strombegrenzung, keinerlei Stützkondensatoren am 
Controller - trotzdem läuft diese absolute Minimal-Schaltung stabil. 
Sogar mit blauen LED, bei dieser geringen Spannung!

Clevere Typen, die das auf dieser HW so zum Laufen gebracht haben. Vor 
allem beindruckt mich, wie sie die gesamte Zeile trotz Charlieplexing 
auch bei schnellster Rotation so gleichmäßig hell erscheinen lassen 
können.

Den IC habe ich nun auf eine Adapterplatine gelötet. Ich versuche mal ob 
ich mit einem Programmer darauf zugreifen kann. Die SW ist sicherlich 
code protected, aber wenigstens der Typ vom Controller könnte so ja mit 
etwas Glück zu ermitteln sein.

Beste Grüße

Micha

von Hermann K. (r2d2)


Lesenswert?

Geh lieber mal davon aus, dass der Controller ein Chinamodell ist von 
dem wir hier im Westen noch nie was gehört haben. Die haben da Teile für 
unglaublich wenig Geld mit entsprechend wenig Funktionen (z.B. 
4-Bit-Controller). Es würde mich eher wundern wenn da überhaupt 
Flash-Speicher drin steckt. Eher ist der One-Time-Programmable (OTP) 
oder kommt sogar schon mit fertigem Programm aus der Fabrik. Du wirst 
also kaum eine Chance haben da was dran zu ändern. Ich hab sogar mal 
einen OTP-BluetoothLE-Controller gesehen.

von Thomas (Gast)


Lesenswert?

Es gibt mitlerweile einen Haufen von LED-Treiber IC's. Die sind für den 
Zweck geschaffen. Diese regeln alles selbständig. Die brauchen keine 
ext. Widerstände. Strombegrenzung macht der Chip, und besser als wie mit 
Widerständen, da er bei ändernder Spg. den Strom nachregelt.

LT3760fc, LT3909fb, LT375612fb, AL9910 - 9910a, tlc5947, ....

von Michael P. (Firma: n.a.) (micha1102)


Lesenswert?

Hallo,

> dass der Controller ein Chinamodell ist von
> dem wir hier im Westen noch nie was gehört haben.

> Es gibt mitlerweile einen Haufen von LED-Treiber IC's. Die sind für den
> Zweck geschaffen.


Ja sicher. Die Entwicklung auf dem Gebiet geht ja rasend schnell.

Dennoch, selbst die intelligenteste LED-Treiber-Lösung, in einem IC 
integriert, kann es nicht ermöglichen, dass bei der Beschaltung wie im 
Bild gezeigt mehr als 50% aller LED gleichzeitig leuchten.

Auch wer noch nie was mit LED-Multiplex-Betrieb, speziell 
Charlieplexing, zu tun gehabt hat erkennt am Schaltbild sofort, dass von 
den antiparallel angeschlossenen LED-Paaren zu einem Zeitpunkt X maximal 
eine leuchten kann. Egal, welche (beliebige) Pegelkombination (H,L,open) 
an den Ausgängen des IC anliegt.

Mein Handy kann angeblich Video mit über 900 fps aufnehmen. Ausprobiert 
habe ich das noch nie. Es wäre gut, wenn ich den sequentiellen 
Bildaufbau mal optisch dokumentieren könnte. Derartige 
Highspeed-Aufnahmen benötigen aber wohl soviel Licht, dass die 
Leuchtkraft der kleinen LED vermutlich zu schwach dafür ist. Mal 
schauen...

Beste Grüße

Micha

von c-hater (Gast)


Lesenswert?

Michael P. schrieb:

> Vor
> allem beindruckt mich, wie sie die gesamte Zeile trotz Charlieplexing
> auch bei schnellster Rotation so gleichmäßig hell erscheinen lassen
> können.

Das ist doch trivial. Mit einem Tiny@8MHz z.B. kann man bei nur vier 
Bits für das Charlieplexing schon bei völlig naiver Implementierung 
irgendwas bei gut 380kHz framerate erreichen (Input und Timer für die 
state machine pollen ist da bereits eingerechnet).

Die entsprechende Schleife sieht so aus:

outloop:
  out LEDPORT,R16
  out LEDPORT,R17
  out LEDPORT,R18
  out LEDPORT,R19
  out LEDPORT,R20
  out LEDPORT,R21
  out LEDPORT,R22
  out LEDPORT,R23
  out LEDPORT,R24
  out LEDPORT,R25
  out LEDPORT,R27
  out LEDPORT,R28
  out LEDPORT,R29
  out LEDPORT,R30
  out LEDPORT,R31
  sbis KEYFLGREG, KEYINTBIT
  rjmp statemachine_keytoggle
  sbis TMRFLGREG, TMRINTBIT
  rjmp outloop

  ;TODO: add code for timer step here

statemachine_keytoggle:
  ;TODO: add code for key line toggle here

Jeder gelernte Assemblerprogrammierer lacht über so ein Problem nur 
herzhaft. Der beschäftigt sich damit, wie es noch schneller gehen könnte 
(und das geht!). Tipp: man braucht nicht alle 16 möglichen Zustände 
ausgeben, das geht deutlich besser und spart dann auch noch Code an der 
Stelle, wo die Inhalte der (dann deutlich weniger) Framebuffer-Register 
in der state machine berechnet werden...

von Michael P. (Firma: n.a.) (micha1102)


Lesenswert?

Hallo,

c-hater schrieb:
> ... Jeder gelernte Assemblerprogrammierer lacht über so ein Problem nur
> herzhaft....

Na ja, von viel Praxisnähe in Bezug auf Charlieplexing zeugt der Beitrag 
nicht gerade.

> ...man braucht nicht alle 16 möglichen Zustände
> ausgeben...

Zum Ansteuern von LED per Charlieplexing gibt es für 4 lines genau 12 
sinnvoll mögliche Bitkombinationen, bei 5 lines sind es 20. Dazwischen 
ist nix, also auch nicht die erwähnten "16 Möglichkeiten".

> outloop:
>   out LEDPORT,R16
>   out LEDPORT,R17
>   out LEDPORT,R18
      .
      .

Laut Definition arbeitet Charlieplexing u.a. maßgeblich durch Anwendung 
des tristate-mode. Zumindest bei den Prozessorfamilien AT und PIC lässt 
sich dieser nur erreichen, indem die betreffenden Portbits auf Input 
geschaltet werden.

In dem angeführten Codeschnipsel müsste also zwingend vor JEDEM 
einzelnen OUT zumindest noch ein DDRn bzw. TRISn per LD oder MOV 
geändert werden. Dazu kommt dann noch die Berechnung der in diese 
Register zu ladenden Bytewerte, die sich, wenn variable Werte grafisch 
angezeigt werden sollen,
schnell mal ändern können.

Das hat alles mit dem Handling vom Framebuffer selbst noch garnichts zu 
tun!

Wenn man Zeichen oder Grafik als Matrix mit Charlieplexing ausgeben 
will, braucht man faktisch neben der Tabelle der Bitfolgen für den 
Zeichensatz zusätzlich noch eine gleichgroße Tabelle dazu mit den 
Bitfolgen für die Werte der DDRn/TRISn-Register.

Dieser Riesenaufwand dürfte auch der Grund sein, warum bisher kaum 
jemand dieses Multiplexing bei derartigen Anwendungen einsetzt.

Ganz soooo trivial die Geschichte also nicht.

Und das Problem der gleichmäßigen Helligkeit aller Segmente, das bereits 
beim üblichen Stellen- oder Spaltenmultiplex eine Rolle spielt, ist beim 
Codebeispiel gleich völlig unter dem Tisch gelandet. ;>)


Wünsche noch eine angenehme Winterzeit.....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.