Ist Multiplexing Charlieplexing jemals überlegen?

Ich habe die beiden Methoden überprüft, und Multiplexing scheint wirklich nur einen Vorteil zu haben, dass es einfacher wäre, eine ausgefallene LED aufzuspüren als in einem Charlieplex-Array.

Kann jemand, der sich besser auskennt, andere Kompromisse erklären?

Antworten (2)

Ja, Multiplexing und Charlieplexing haben beide ihre Vorteile und eignen sich jeweils am besten für unterschiedliche Aufgaben.

Der Hauptvorteil von Charlieplexing besteht darin, dass es auf einem mittelgroßen Mikrocontroller ausgeführt werden kann, wodurch mehr LEDs mit weniger E / A-Pins und möglicherweise ohne externe Hardware neben den LEDs angesteuert werden.

Nun gilt der Vorteil "keine externe Hardware" nur für eine relativ kleine Anzahl von LEDs, bis Sie die Stromgrenze Ihres Mikrocontrollers erreichen, und er legt eine Helligkeitsgrenze fest, die Multiplex-Arrays nicht haben. Wenn Sie sich dafür entscheiden, keine externe Hardware zu verwenden, sind Sie im Allgemeinen darauf beschränkt, zu einem bestimmten Zeitpunkt nur eine LED in der Matrix anzusteuern – im Gegensatz zu einem Multiplex-Array, bei dem Sie jeweils eine ganze Reihe ansteuern.

Sobald Sie externe Hardware hinzufügen, um die LEDs mit höherer Helligkeit anzusteuern, um sie an die eines Multiplex-Arrays anzupassen, verliert Charlieplexing seinen Glanz.

Erstens wird ein gemultiplextes Array strikt nach Zeile und Spalte adressiert; es ist sehr einfach, dies zu tun. Schalten Sie Zeile 1 ein, schalten Sie alle Spalten für Zeile 1 ein, schalten Sie Zeile 2 aus, schalten Sie alle Spalten für Zeile 2 ein und so weiter. Im Gegensatz dazu ist ein Charlieplex-Array viel weniger einfach. Es gibt immer eine diagonale Reihe, die nutzlos ist, und ich persönlich verwende Nachschlagetabellen, um eine Beziehung zwischen meinen Arrays und einem rechteckigen Array herzustellen, in dem ich meine Daten speichere.

Zweitens und ein Killer ist, dass Charlieplexing im Allgemeinen Tri-State-Treiber erfordert. Das Multiplexen wird jedoch mit strenger Ein-Aus-Binärlogik durchgeführt. Wenn Sie einen Mikrocontroller mit geringer Pinanzahl haben und eine große Anzahl von LEDs ansteuern möchten, ist es einfach, externe Logikchips (z. B. Schieberegister und/oder LED-Treiber) zu verwenden, um sowohl die X- als auch die Y-Achse zu steuern. Die meisten Chips vom Schieberegistertyp unterstützen nicht das Tristateing, das erforderlich ist, um dasselbe in einem Charlieplex-Array zu tun. Spezielle Charlieplex-Treiber sind verfügbar, aber nicht annähernd so vielseitig.

Drittens ist in einem Charlieplex-Array jeder Pin, der nicht aktiv etwas tut, immer noch über eine schwache Verbindung ("hohe Impedanz") mit den LEDs verbunden. Und während die Verbindung schwach ist, ist sie ungleich Null. Angenommen, Sie haben 25 I/O-Pins, die mit einem LED-Raster verbunden sind. Wenn Sie eine LED zum Leuchten bringen – nehmen Sie eine dieser 25 Linien hoch und eine dieser 25 Linien niedrig, bleiben 23 hochohmige Linien übrig. Überall dort, wo die hohe E/A-Leitung durch eine LED zu einer neutralen Leitung führt, besteht die Möglichkeit, dass Strom fließt. Nicht viel. Vielleicht ein Mikroamp hier oder da. Aber bei modernen, effizienten LEDs reicht das oft schon aus, um sichtbare Geisterbilder zu erzeugen.

Viertens ist es schwieriger, die LED-Helligkeit in einem Charlieplex-Array zu steuern. In einem Multiplex-Array können Sie eine beliebige Anzahl allgemein verfügbarer stromregulierender „Senken“-LED-Treiberchips verwenden, die die Helligkeit jeder Spalte separat regulieren, indem Sie die Stromregulierung in Kombination mit einem PWM-Treiber verwenden. In dem Maße, in dem Charlieplex-Matrixpositionen einzeln adressiert werden und nur einen Widerstand pro Zeile oder Spalte verwenden, ist es viel schwieriger, eine Punkthelligkeitskorrektur und eine vollständige Graustufen- / Farbanimation in einem Charlieplex-Array durchzuführen.

Gut zu lesen. Bietet einen Einblick in Ihre Peggy-Designs ...
Ich habe gerade schwache normale LEDs gekauft, aber Geisterbilder sind immer noch ein Problem. Ist es besser, für jede LED statt für jede Leitung einen Widerstand zu verwenden? Ich fahre 6 LEDs mit einem Attiny85. Früher habe ich 330-Ohm-Widerstände für jede Leitung verwendet und jetzt verwende ich 1K. Bei 1K ist die Auswahl geringer, aber immer noch da, auch die LEDs sind natürlich nicht so hell wie bei 330 Ohm. Ist es also besser, dass jede LED einen eigenen Widerstand hat, um dies zu beseitigen?

Der bedeutendste Nachteil von "Charlieplexing"-Leuchten besteht darin, dass die Anzahl der LEDs, die mit 'n'-Wege-Multiplexing angesteuert werden können, auf n (n-1) begrenzt ist. Ich sehe die Tri-State-Treiberanforderung nicht als großes Problem mit der Technik als Ganzes an. Die Verwendung von zwei herkömmlichen Treibern anstelle eines Tri-State-Treibers wird sicherlich den Nutzen von CharliePlexing verringern, aber in einigen Fällen können immer noch Vorteile bestehen bleiben (z. B. kann die Anzahl der Verbindungskabel zwischen einem Panel mit den Treibern und einem Panel mit dem Lichter oder Schalter).

Was Charlieplexing-Switches angeht, verschweigt der Wikipedia-Artikel den größten Nachteil: Charlieplexing erlaubt es einem Controller nicht, passiv auf einen Tastendruck zu warten. Andererseits ist es zu pessimistisch in Bezug auf die Anforderungen an die Komponenten. 1997 produzierte ich ein Gerät, das acht Tasten mit drei E / A-Pins und einem Nur-Eingangs-Pin auf einem PIC12C508 scannt, ohne dass externe Dioden oder andere Komponenten erforderlich sind, außer IIRC, einem Pull-up für einen PIC-Pin, der dies nicht tat einen eingebaut haben; Der Ansatz hätte zehn Tasten mit dem Hinzufügen eines weiteren Pull-up-Widerstands handhaben können (für einen anderen I/O-Pin, der keinen hatte), aber der Kunde benötigt nur acht Tasten, so dass es keine Notwendigkeit gab.

Hast du irgendwo im Netz einen Schaltplan davon?
@Erwinus: Alle Drähte von der CPU bekommen einen Pull-up. Schließen Sie einen Schalter an jedes mögliche Adernpaar an (bei vier Adern wären das also sechs Schalter; bei fünf Adern 10; bei sechs, sieben oder acht 15, 21 oder 28). Schließen Sie einen Schalter zwischen jedem Draht und Masse an (ein zusätzlicher Schalter pro Draht).