Inhaltsverzeichnis:

So fahren Sie viele LEDs von wenigen Mikrocontroller-Pins. - Gunook
So fahren Sie viele LEDs von wenigen Mikrocontroller-Pins. - Gunook

Video: So fahren Sie viele LEDs von wenigen Mikrocontroller-Pins. - Gunook

Video: So fahren Sie viele LEDs von wenigen Mikrocontroller-Pins. - Gunook
Video: Hardsploit: A Metasploit-like tool for hardware hacking (deutsche Übersetzung) 2024, November
Anonim
So steuern Sie viele LEDs von wenigen Mikrocontroller-Pins
So steuern Sie viele LEDs von wenigen Mikrocontroller-Pins

Ausgehend von der Tatsache, dass viele Mikrocontroller-Pins drei Zustände haben (+V, GND oder "hohe Impedanz", können Sie N * (N-1) LEDs von N Pins ansteuern. So kann der kleine 8-Pin-Mikrocontroller wie ein PIC12Fxxx oder ein ATtiny11 ansteuern 20 LEDs auf den fünf verfügbaren Ausgangspins und noch ein Pin für eine Art von Eingang übrig. Siehe auch

Schritt 1: 20 LEDs auf 5 Pins

20 LEDs auf 5 Pins
20 LEDs auf 5 Pins

Die aktuelle Ernte von Mikrocontrollern mit geringer Pinzahl (6 Pins bis 20 Pins an)

das gesamte Paket) sind preislich attraktiv und "süß", aber es stellt sich die Frage, wie Sie diese Pins für gängige Anwendungen wie das Ansteuern von LEDs am besten nutzen können. Ein Direktverbindungsansatz zum Ansteuern von LEDs verbraucht einen Pin für jede LED. Ein traditionelles Multiplexing-Schema, bei dem Reihen von LED-Anoden von einem Satz von N Pins angesteuert werden und die gemeinsame Kathode jeder Reihe von einem anderen Satz von M Pins angesteuert wird, schafft es, N*M LEDs mit N+M Pins zum Leuchten zu bringen. Bei einem Prozessor mit nur 5 oder weniger Ausgängen (wie bei den meisten 8-Pin-Mikrocontrollern) erhalten Sie jedoch kaum mehr Ausgänge als Direktantrieb.

Schritt 2: Charlieplexing

Charlieplexing
Charlieplexing

Unter der Annahme, dass die Ausgangspins tatsächlich tri-state-fähig sind (aktiv hoch, aktiv niedrig und hohe Impedanz (Eingang)), ist es auch möglich, die Zeilen- und Spaltentreiber zu teilen und N*(N-1) LEDs mit nur N Pins zu steuern. Ein Pin ist mit gemeinsamen Kathoden einer Reihe von LEDs verbunden und wird niedrig angesteuert, und die verbleibenden N-1 Pins werden mit den Anoden verbunden und entweder hoch angesteuert, um diese Spalte zu beleuchten, oder als Eingänge belassen, um die LED aus zu lassen. Maxim nennt diese Technik "Charlieplexing" und beschreibt sie in (1); Microchip erwähnt dies auch in seinem Dokument (2) (und implementiert auch auf der PICKit 1-Platine.) (1) "Charlieplexing - Reduced Pin-Count LED Display Multiplexing" https://www.maxim-ic.com/appnotes. cfm/appnote_number/1880 (2) "Tipps 'n Tricks 8-pin FLASH PIC Microcontrollers" https://ww1.microchip.com/downloads/en/DeviceDoc/40040b.pdf (3) Charlieplexing LEDs - Die Theorie An Instructable by rgbphil

Schritt 3: Es funktioniert

Es zu arbeiten
Es zu arbeiten
Es zu arbeiten
Es zu arbeiten

Dies treibt 20 LEDs von einem ATtiny11. Eine frühere Version dieses Boards war

tatsächlich gebaut und erscheint als das Hauptseitenfoto. Ich fürchte, das Bild des Schaltplans ist ziemlich hoffnungslos; Sie benötigen Eagle, um Ihnen mitzuteilen, welche Signale wo angeschlossen sind.

Schritt 4: Kleiner und vielseitiger…

Kleiner und vielseitiger…
Kleiner und vielseitiger…

Da der größte Teil der Platine vom LED-Array eingenommen wird, können wir Platz schaffen

entweder für einen Attiny-Chip ODER einen Mikrochip-PIC12F-Chip. Schrumpfen Sie die LEDs auf 3 mm und gehen Sie zu einer doppelseitigen Platine, und wir erhalten etwas von 27 x 44 mm. Leider wurde diese Platine noch nicht getestet …

Schritt 5: Itty Bitty

Itty Bitty
Itty Bitty

Microchip hat natürlich seine 6-poligen PIC10F-Chips, die in der Lage sind, a. zu fahren

nur 6 LEDs von den 3 Ausgangspins. Dieser hat einen Durchmesser von etwa 16 mm. Mit 603 LEDs können Sie etwas kleiner werden, aber ich bin mir nicht sicher, worum es geht.

Schritt 6: Software

Die Software wird aus mehreren Gründen etwas unordentlich:

1) Bei den gezeigten PCBs sind die LEDs so angeordnet, dass sie dem PCB-Layout entsprechen und nicht in der "richtigen" Bitreihenfolge. IMO, dies ist die Vorgehensweise, aber es bedeutet, dass Zeile 1 nicht unbedingt Bit 1 bedeutet oder Spalte 3 nicht Bit 3. Dies erfordert eine Zuordnung zwischen der üblichen Zeilen-/Spaltenadressierung und der Bits, die eingestellt werden müssen. 2) Da für Anoden und Kathoden die gleichen Bits verwendet werden, kann sich die gemeinsame (Reihen-)Verbindung für einige Bits in der Mitte von angesteuerten (Spalten-)Bits befinden. Das bedeutet, dass Sie Spaltenbits verschieben müssen, je nachdem, ob sie vor oder nach dem Zeilenbit für diesen Spaltensatz liegen. 3) Sie müssen Ausgangswörter sowohl für das ioport- als auch für das Portrichtungsregister ableiten. Der beigefügte ASM-Code für ATtiny11 ist ein "Proof of Concept". Es ist peinlich nicht optimiert und schlecht kommentiert, aber es ist alles, was ich bisher geschrieben habe.

Empfohlen: