Fahren Sie mehrere LEDs zusammen mit dem PIC-Mikrocontroller ein

Ich verwende einen PIC18F2420-Mikrocontroller (ich kann bei Bedarf ändern). Die Aufgabe besteht darin, bis zu 20 Leistungspegelanzeige-LEDs zusammen mit einigen anderen LED-Anzeigen und Schaltern mit PIC anzusteuern. Ich kann mir vorstellen, die Anode aller 20 LEDs mit der Schiene (~ 30 V) zu verbinden und die Kathode jeder LED mit einem PIC-E / A-Pin zu verbinden. Aber das würde bedeuten, dass 20 I/O-Pins nur dafür reserviert sind - Verschwendung von vielen I/Os. Ein externer I/O-Expander würde die Kosten erhöhen und bietet nur 8 weitere I/Os mit ICs wie MCP23008. Kosten und PCB-Platz sind ein wichtiger Gesichtspunkt. Mit Charliplexing-LEDs kann ich nur 1 LED gleichzeitig einschalten. Ich möchte sie nicht im Arbeitszyklus mit reduzierter Helligkeit fahren.

Wie kann ich bei optimaler Nutzung der PIC-E / A-Pins bis zu allen 20 LEDs EIN fahren? Brauche ich wirklich einen Controller mit so vielen Pins, dass ich jeder LED nur 1 Pin zuweisen muss? Die Zeichnung des LED-Anschlussschemas wäre hilfreich, um sie zu verstehen.

Ich möchte nicht alle 20 LEDs gleichzeitig als Gruppe ein- / ausschalten. Diese LEDs sind Pegelanzeigen, und gemäß der Benutzereingabe muss ich jede nächste Pegelanzeige-LED einschalten, indem ich alle niedrigeren Pegelanzeigen beibehalte EIN, wenn der Pegel vom Benutzer erhöht wird, und jede LED mit dem höchsten Pegel nacheinander ausschalten, wenn der Pegel vom Benutzer verringert wird.

Das ist verwirrend: "Alle 20 LEDs in Reihe schalten und die Anode an die Schiene (~ 30 V) anschließen und die Kathode jeder LED mit einem PIC-E / A-Pin verbinden". Wenn die LEDs in Reihe geschaltet wären, würden Sie nur eine E / A benötigen O-Pin zum Einschalten (unter Verwendung eines Transistors zum Puffern Ihres Ausgangspins)
Es gibt 16- und 24-Bit-Port-Expander. Und Sie könnten immer einen zweiten PIC als Port-Expander verwenden.
Entschuldigen Sie die Verwirrung und vielen Dank für Ihr Feedback. Ich möchte nicht alle 20 LEDs gleichzeitig ein- und ausschalten. Diese LEDs sind Pegelanzeigen, und gemäß der Benutzereingabe muss ich jeden nächsten Pegel einschalten Anzeige-LED EIN, indem alle Anzeigen für niedrigere Pegel ebenfalls eingeschaltet bleiben, wenn der Pegel vom Benutzer erhöht wird, und jede LED für den höchsten Pegel nacheinander ausgeschaltet wird, wenn der Pegel vom Benutzer verringert wird.
Ich bin mir der Port-Expander bewusst, möchte sie aber vermeiden, wenn ich die Kosten und den Platzbedarf an Bord reduzieren kann.
An dieser Stelle bin ich geneigt zu sagen, dass Ihre Anforderungen nicht erfüllt werden können. Sie wollen diese 20 LEDs nicht parallel ansteuern, weil zu viele Pins. Sie wollen sie nicht multiplexen, weil zu geringe Helligkeit. Alle Port-Extender, die mit PWM, Serial, I2C arbeiten, sind zu groß und zu teuer für Sie. Daraus muss ich schließen, dass mir die Ideen ausgehen. Vielleicht solltest du deine Anforderungen überarbeiten. Vielleicht könnten Sie Ihr Design auf weniger LEDs ändern. Vielleicht die Helligkeit in Ihr Display integrieren?
danke, das stimmt, ich müsste meine Anforderungen überarbeiten oder mehr IO-Pins benötigen, um dies parallel zu betreiben.

Antworten (5)

Es scheint, dass Sie so etwas wie ein Audio-VU-Meter erstellen. Der einfachste Weg, dies zu tun, wäre, ein PWM-Signal zu erzeugen, es zu filtern und es an einen LM3914- Punkt/Balken-Anzeigetreiber zu senden . Diese treiben jeweils zehn LEDs an und können zu beliebig vielen Treibern kaskadiert werden.

Geben Sie hier die Bildbeschreibung ein

Vielen Dank für die Antwort. Ich möchte dies nur mit dem Mikrocontroller-PIC tun, da ich ihn sowieso für andere Zwecke benötige. Ich möchte die Verwendung zusätzlicher Chips wie LM3914 und IO-Expander vermeiden, wenn dies möglich ist, um Kosten und Platz auf der Leiterplatte zu reduzieren.

WENN Sie alle 30 LEDs einzeln ansteuern möchten ...

Verwenden Sie ein Schieberegister mit hoher Strombelastbarkeit (falls erforderlich). Mit Schieberegistern können Sie eine größere Anzahl von Pins mit nur einer kleinen Anzahl von Eingangspins schalten, indem Sie Daten in den Chip serialisieren und parallel an die Anzahl von Pins ausgeben, die sich auf dem Gerät befinden. Es gibt viele Tutorials dazu, suchen Sie einfach nach Schieberegistern. Das Schöne an Schieberegistern ist, dass Sie sie miteinander verketten können, um nur wenige Ausgangspins zu verwenden, um eine große Anzahl von ihnen zu steuern, mit dem Kompromiss, wie schnell Sie die Ausgänge aktualisieren können.

Mit welcher Spannung und Stromstärke möchten Sie die LEDs betreiben? Dies begrenzt, ob Sie die LEDs von jedem herkömmlichen Schieberegister aus betreiben können oder nicht. Möglicherweise müssen Sie das Schieberegister verwenden, um einen MOSFET anzusteuern, wenn Sie große LEDs steuern möchten.

Hier ist ein Link zu einem gemeinsamen Hochstrom-Schieberegister:

https://www.adafruit.com/products/457

Ich denke, Sie haben drei Möglichkeiten:

(1) Die direkte LED-Steuerung mit einem größeren PIC, z. B. dem 18f4620 (mit 35 E / A-Pins). Es gibt superhelle LEDs, diese leuchten mit 2-3 mA auch gut.

(2) Wie oben, aber verwenden Sie einen kleinen und billigen Transistor als Emitterfolger für jede LED und normale (sogar Hochleistungs-) LEDs.

(3) Wie 'Korozjin' oben schrieb, verwenden Sie Schieberegister. Der TPIC6B595 ist sehr gut, aber der viel billigere HC595 reicht auch aus (kann maximal 8-9 mA/Pin gleichzeitig aufnehmen/geben).

Wenn Ihre LEDs alle als Gruppe gesteuert werden sollen - alle gleichzeitig ein- und ausgeschaltet -, müssen Sie nur einen Ausgang des Mikrocontrollers verwenden, benötigen aber wahrscheinlich einen Treibertransistor, um den gesamten LED-Strom zu verarbeiten.

Vielen Dank für Ihr Feedback. Ich möchte nicht alle 20 LEDs gleichzeitig als Gruppe ein- und ausschalten. Diese LEDs sind Pegelanzeigen, und gemäß der Benutzereingabe muss ich jede nächste Pegelanzeige-LED einschalten EIN, indem alle Anzeigen für den unteren Füllstand ebenfalls EIN bleiben, wenn der Füllstand vom Benutzer erhöht wird, und jede LED für den höchsten Füllstand nacheinander ausgeschaltet wird, wenn der Füllstand vom Benutzer verringert wird.

PMIC-LED-Treiberchip, der über I2C spricht. 24+ Kanäle sind einfach und allgemein verfügbar :)