Sie müssen angeben, ob Sie eine oder mehrere LEDs steuern möchten. Außerdem würde ich hinzufügen, dass "die serielle Steuerung und zusätzliche ICs vermieden werden". Die Antwort ist tendenziell unendlich, wenn die Aktualisierungsrate oder Hardware-Teile keine Einschränkungen darstellen.
ppvi
Antworten:
26
Ich glaube, mit Charlie-plexing N Leitungen steuert N * (N-1) LEDs. Es gibt einen guten Artikel auf Wikipedia.
Ein Freund von mir, Jimmie P. Rodgers, hat 126 LEDs auf einem Arduino-Schild angebracht. Er benutzt Charlie-Plexing, um die LEDs zu steuern. Einige Informationen zu seinem Board finden Sie unter -
jimmieprodgers.com/2009/12/my-development-process/ (archive.org copy)
Beim letzten Treffen der Boston Arduino User Group zeichnete Jimmie P. Rodgers ein Charlie-Plexing-Diagramm als Matrix mit beschrifteten Netzen. Auf diese Weise gezeichnete Schemata schienen das Konzept gut zu kommunizieren. Ich habe ein paar ähnliche Schaltpläne erstellt - siehe http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
habe heute etwas Neues gelernt; Sie haben meine positive Bewertung :-)
JonathanD
4
Beachten Sie, dass bei dieser Methode immer nur N-1-LEDs gleichzeitig leuchten können.
AngryEE
2
Der jimmieprodgers.comLink in dieser Antwort ist voller Viren.
Vivek Maharajh
1
@vivekmaharajh: Ich habe den Link durch einen Link zu einer Kopie der Originalseite von archive.org ersetzt.
Dave Tweed
13
Mit den Schieberegistern ( http://en.wikipedia.org/wiki/Shift_register ) können Sie so viele parallele Ausgaben von einem einzelnen seriellen Stream abrufen, wie Sie möchten.
Sie müssen sich mit Ihren Leistungsbeschränkungen befassen. Ich habe selbst noch nie ein Arduino verwendet, gehe aber davon aus, dass es genau wie PICs eine Strombegrenzung hat. Außerdem haben Schieberegister selbst eine Strombegrenzung. Wenn Sie darauf stoßen, müssen Sie einen MOSFET verwenden, mit dem Sie die LEDs steuern können, ohne viel Strom direkt von Ihrem Mikrocontroller abziehen zu müssen.
Jeder AVR-Mikrocontroller-Pin darf bis zu 40 mA liefern, und die gesamte vom Chip bezogene oder versenkte Stromversorgung (dh am Boden und an den Vcc-Pins) muss unter 200 mA liegen.
Charlieplexing ist eine großartige Lösung für Situationen, in denen Sie viele LEDs benötigen, aber nur mit jeweils einer leuchtenden LED auskommen . Eine Standard-Arduino-Karte (wie eine Duemilanove) bietet 17 "freie" E / A-Pins, wobei TX, RX, Reset oder Pin 13 nicht berücksichtigt werden. Sie können also 17 * 16 = 272 LEDs anschließen. Dies kann gut funktionieren, insbesondere wenn eine LED leuchtet oder nur einige wenige gescannt werden. Wenn Sie jedoch versuchen, die gesamte Matrix mit einem Muster zu beleuchten, werden Sie feststellen, dass jede Matrix zu einem bestimmten Zeitpunkt auf (etwas weniger als) 1/272 der Zeit geschaltet ist. Wenn also Ihr Antriebsstrom zu einem bestimmten Zeitpunkt 30 mA betrug, leuchtet jede LED Der durchschnittliche Strom würde ungefähr 0,1 mA betragen - ziemlich schwach.
Wenn Sie nicht so viele LEDs benötigen, sondern stattdessen mehr Helligkeit benötigen, ist herkömmliches Multiplexen möglicherweise die bessere Option. In diesem Fall verwenden Sie einige Ihrer Zeilen als Zeilen und einige als Spalten in einer Matrix. Wenn Sie einen 10-mA-LED-Strom verwenden, können Sie eine Matrix aus 4 Spalten und 13 Zeilen definieren, wobei alle 4 LEDs in einer Zeile gleichzeitig leuchten können, und Sie können die Zeilen durchsuchen. Dann ist jede Zeile 1/13 der Zeit mit einem Strom von 10 mA belegt, sodass der durchschnittliche LED-Strom 0,76 mA betragen kann, ABER Sie erhalten nur 4 * 13 = 104 LEDs. (Auf jeden Fall heller pro LED als mit Charlieplexing.)
Die Grenze im letzten Beispiel liegt bei 40 mA pro Pin am AVR -, da jeder Pin für die Zeilenansteuerung 4x10 = 40 mA liefert. Wenn Sie zulassen, dass externe Transistoren (die billig und klein sein können) zu den Zeilenausgängen hinzugefügt werden, können Sie diese bestimmte Grenze umgehen und heller werden. Sie können beispielsweise ein 8x9-Array mit 8 Zeilen und 9 Spalten und insgesamt 72 LEDs erstellen. Eine der 8 Zeilen ist gleichzeitig eingeschaltet und wird über den Transistor ausgewählt. Es können bis zu 9 LEDs in einer bestimmten Reihe gleichzeitig eingeschaltet sein und mit 20 mA betrieben werden, sodass 180 mA vom Transistor kommen und Sie unter den Stromgrenzwerten des AVR bleiben. Der durchschnittliche Strom pro LED beträgt jetzt 20 mA / 8 = 2,5 mA - normalerweise recht hell.
Es gibt hier ein sehr schönes, detailliertes Tutorial , das einen Abschnitt über die Verwendung eines Arduino zum Ausführen eines 8x8x8-LED-Würfels enthält. (Verpassen Sie nicht den YouTube-Film, den sie haben)
Sieht aus wie etwas, das ich ungefähr 1979 auf der UFO-Ausstellung in Minneapolis gesehen habe, aber ich erinnere mich, dass es sich um 4096 Miniatur-Glühbirnen handelte. Kann sich noch jemand erinnern, so etwas gesehen zu haben?
Superkatze
4
Es gibt viele I / O-Expander, die entweder SPI- oder I2C-Busse verwenden. Mit einem einzigen MSSP-Modul können Sie nahezu unendlich viele digitale Ausgänge wie LEDs steuern.
Die folgenden Teile finden Sie in den Microchip-Datenblättern oder in den Anwendungshinweisen:
SPI- MCP23S08
I2C- MCP23008
Mit 17 I / O-Pins und 17 NPN-Transistoren (Emitterfolger zur Stromverstärkung) sollte es kein besonderes Problem geben, 272 LEDs in willkürlichen Kombinationen bei einem Tastverhältnis von 1/17 und einem Durchschnittsstrom von 0,7 mA (200 mA / 272) anzuzeigen, der durch begrenzt ist Die Fähigkeit des Chips, jeweils 200 mA abzusenken. Wenn Sie eine Diode hinzufügen, um einen Spannungsabfall von 0,7 Volt zu erzielen, können Sie weitere 17 LEDs hinzufügen (Tastverhältnis auf 1/18 reduzieren), obwohl die Helligkeit nicht ganz mit den anderen übereinstimmt.
Können Sie klären, welche Art von Schaltung Sie hier vorschlagen? Emitterfolger ist eine BJT-Topologie.
Kevin Vermeer
@reemrevnivek: Siehe oben bearbeiten. Ich hatte ein paar Variationen im Kopf herumgeschleudert, und sie waren durcheinander. Wenn man Transistoren hinzufügt, um die High-Side-Ansteuerung zu verstärken, aber nicht die Low-Side-Ansteuerung, müssen sie BJTs sein. Wenn man für beide Transistoren verwenden würde, wären Mosfets möglicherweise besser.
Superkatze
0
Während Windell Oskay argumentiert, dass ohne zusätzliche Transistoren maximal 104 LEDs möglich sind, hat
Tom Igoe
Fotos einer Matrix von 128 LEDs veröffentlicht, die direkt von einem einzelnen Arduino Mega gesteuert werden - ohne zusätzliche Transistoren, diskret oder integriert.
Betrügt Tom Igoe kurzzeitig, indem er den im Datenblatt angegebenen "absoluten Maximalstrom pro Pin" überschreitet?
Nein, er betrügt mit einem Arduino-Mega. :) Das Mega hat viel mehr IO-Pins als ein normales Arduino.
Christopher Biggs
@unixbigot - Traurig, ich hatte gehofft, einen coolen Hack zu sehen, der die Wiederverwendung des Reset-Pins für LED-Ansteuerung oder die Verwendung von Diodentropfen beinhaltet.
Kevin Vermeer
1
Ihr Link ist tot, und Sie sollten wahrscheinlich auf die Antwort von Windell Oskay verweisen . Es mag nicht wichtig erscheinen, wenn Sie posten, aber wenn mehr Antworten erscheinen, wird Ihr Beitrag vom anderen entfernt.
Kevin Vermeer
@KevinVermeer: Link behoben, indem auf die Kopie der Originalseite von archive.org gezeigt wurde.
Antworten:
Ich glaube, mit Charlie-plexing N Leitungen steuert N * (N-1) LEDs. Es gibt einen guten Artikel auf Wikipedia.
Ein Freund von mir, Jimmie P. Rodgers, hat 126 LEDs auf einem Arduino-Schild angebracht. Er benutzt Charlie-Plexing, um die LEDs zu steuern. Einige Informationen zu seinem Board finden Sie unter - jimmieprodgers.com/2009/12/my-development-process/ (archive.org copy)
Beim letzten Treffen der Boston Arduino User Group zeichnete Jimmie P. Rodgers ein Charlie-Plexing-Diagramm als Matrix mit beschrifteten Netzen. Auf diese Weise gezeichnete Schemata schienen das Konzept gut zu kommunizieren. Ich habe ein paar ähnliche Schaltpläne erstellt - siehe http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html
quelle
jimmieprodgers.com
Link in dieser Antwort ist voller Viren.Mit den Schieberegistern ( http://en.wikipedia.org/wiki/Shift_register ) können Sie so viele parallele Ausgaben von einem einzelnen seriellen Stream abrufen, wie Sie möchten.
Sie müssen sich mit Ihren Leistungsbeschränkungen befassen. Ich habe selbst noch nie ein Arduino verwendet, gehe aber davon aus, dass es genau wie PICs eine Strombegrenzung hat. Außerdem haben Schieberegister selbst eine Strombegrenzung. Wenn Sie darauf stoßen, müssen Sie einen MOSFET verwenden, mit dem Sie die LEDs steuern können, ohne viel Strom direkt von Ihrem Mikrocontroller abziehen zu müssen.
quelle
Jeder AVR-Mikrocontroller-Pin darf bis zu 40 mA liefern, und die gesamte vom Chip bezogene oder versenkte Stromversorgung (dh am Boden und an den Vcc-Pins) muss unter 200 mA liegen.
Charlieplexing ist eine großartige Lösung für Situationen, in denen Sie viele LEDs benötigen, aber nur mit jeweils einer leuchtenden LED auskommen . Eine Standard-Arduino-Karte (wie eine Duemilanove) bietet 17 "freie" E / A-Pins, wobei TX, RX, Reset oder Pin 13 nicht berücksichtigt werden. Sie können also 17 * 16 = 272 LEDs anschließen. Dies kann gut funktionieren, insbesondere wenn eine LED leuchtet oder nur einige wenige gescannt werden. Wenn Sie jedoch versuchen, die gesamte Matrix mit einem Muster zu beleuchten, werden Sie feststellen, dass jede Matrix zu einem bestimmten Zeitpunkt auf (etwas weniger als) 1/272 der Zeit geschaltet ist. Wenn also Ihr Antriebsstrom zu einem bestimmten Zeitpunkt 30 mA betrug, leuchtet jede LED Der durchschnittliche Strom würde ungefähr 0,1 mA betragen - ziemlich schwach.
Wenn Sie nicht so viele LEDs benötigen, sondern stattdessen mehr Helligkeit benötigen, ist herkömmliches Multiplexen möglicherweise die bessere Option. In diesem Fall verwenden Sie einige Ihrer Zeilen als Zeilen und einige als Spalten in einer Matrix. Wenn Sie einen 10-mA-LED-Strom verwenden, können Sie eine Matrix aus 4 Spalten und 13 Zeilen definieren, wobei alle 4 LEDs in einer Zeile gleichzeitig leuchten können, und Sie können die Zeilen durchsuchen. Dann ist jede Zeile 1/13 der Zeit mit einem Strom von 10 mA belegt, sodass der durchschnittliche LED-Strom 0,76 mA betragen kann, ABER Sie erhalten nur 4 * 13 = 104 LEDs. (Auf jeden Fall heller pro LED als mit Charlieplexing.)
Die Grenze im letzten Beispiel liegt bei 40 mA pro Pin am AVR -, da jeder Pin für die Zeilenansteuerung 4x10 = 40 mA liefert. Wenn Sie zulassen, dass externe Transistoren (die billig und klein sein können) zu den Zeilenausgängen hinzugefügt werden, können Sie diese bestimmte Grenze umgehen und heller werden. Sie können beispielsweise ein 8x9-Array mit 8 Zeilen und 9 Spalten und insgesamt 72 LEDs erstellen. Eine der 8 Zeilen ist gleichzeitig eingeschaltet und wird über den Transistor ausgewählt. Es können bis zu 9 LEDs in einer bestimmten Reihe gleichzeitig eingeschaltet sein und mit 20 mA betrieben werden, sodass 180 mA vom Transistor kommen und Sie unter den Stromgrenzwerten des AVR bleiben. Der durchschnittliche Strom pro LED beträgt jetzt 20 mA / 8 = 2,5 mA - normalerweise recht hell.
quelle
Es gibt hier ein sehr schönes, detailliertes Tutorial , das einen Abschnitt über die Verwendung eines Arduino zum Ausführen eines 8x8x8-LED-Würfels enthält. (Verpassen Sie nicht den YouTube-Film, den sie haben)
quelle
Es gibt viele I / O-Expander, die entweder SPI- oder I2C-Busse verwenden. Mit einem einzigen MSSP-Modul können Sie nahezu unendlich viele digitale Ausgänge wie LEDs steuern.
Die folgenden Teile finden Sie in den Microchip-Datenblättern oder in den Anwendungshinweisen:
SPI- MCP23S08
I2C- MCP23008
quelle
Mit 17 I / O-Pins und 17 NPN-Transistoren (Emitterfolger zur Stromverstärkung) sollte es kein besonderes Problem geben, 272 LEDs in willkürlichen Kombinationen bei einem Tastverhältnis von 1/17 und einem Durchschnittsstrom von 0,7 mA (200 mA / 272) anzuzeigen, der durch begrenzt ist Die Fähigkeit des Chips, jeweils 200 mA abzusenken. Wenn Sie eine Diode hinzufügen, um einen Spannungsabfall von 0,7 Volt zu erzielen, können Sie weitere 17 LEDs hinzufügen (Tastverhältnis auf 1/18 reduzieren), obwohl die Helligkeit nicht ganz mit den anderen übereinstimmt.
quelle
Während Windell Oskay argumentiert, dass ohne zusätzliche Transistoren maximal 104 LEDs möglich sind, hat Tom Igoe Fotos einer Matrix von 128 LEDs veröffentlicht, die direkt von einem einzelnen Arduino Mega gesteuert werden - ohne zusätzliche Transistoren, diskret oder integriert.
Betrügt Tom Igoe kurzzeitig, indem er den im Datenblatt angegebenen "absoluten Maximalstrom pro Pin" überschreitet?
quelle