Hallo Elektronikfreunde,
ich möchte eine RGB-LED-Matrix (5x5) bauen. Jede dieser LEDs soll mit
einem eigenen Taster angesteuert werden, und zusätzlich soll es noch
(ca. 5) Taster zur Farbauswahl geben. Nun hab ich schon einen ersten
Prototypen gebaut, aber nur in der Größe 3x3 und nur mit normalen LEDs.
Zur Steuerung habe ich einen nachgebauten Arduino Nano (Atmega328)
benutzt. Dieser hat aber nur maximal 13 digitale In-/Outputs und 8
analaoge In-/Outputs. Zusätzlich braucht man für die RGB-Leds ja jeweils
drei Ansteuerungs-PINs. Das heißt ich bräuchte 3x25=75 Pins zur
Ansteuerung der LEDs plus die der Taster (30). Insgesamt dann also 105.
Hier nun meine Frage:
Was ist denn die beste Weise das beschriebene Projekt umzusetzen. Man
gehe davon aus, dass es in Kleinserie produziert werden soll (20-100
Stück). Ist ein Mikrocontroller überhaupt das richtige Mittel, oder
sollte es anderweitig verschaltet werden? Gibt es Mikrocontroller mit
dieser Anzahl von IO-Pins?
Ab welcher Stückzahl rentiert sich der Einsatz von FPGAs?
Hoffe mein Problem ist ein wenig verständlicher geworden, habe bisher
eigentlich nur Erfahrung mit Arduino-Boards.
Vielen Dank und schöne Grüße,
Marct
Eine Ansteuerung von 64 Kanälen findest Du hier:
http://mino-elektronik.de/AVR_PWM_64/AVR_PWM_64.htm Auf 75 Kanäle zu
erweitern sollte auch möglich sein.
Das Einlesen der Taster übernehmen ebenfalls Schieberegister. Mein
Favorit ist der CD4021, von denen vier Stück benötigt werden. Wenn es
eine kleinere Stückzahl werden soll, und Du selber nicht programmieren
möchtest, gib Bescheid.
Marct schrieb:> Ab welcher Stückzahl rentiert sich der Einsatz von FPGAs?
Ab gar keiner, dein Problem rechtfertigt weder die Geschwindigkeit noch
die Flexibilität eines FPGAs.
Zur eigentlichen Frage: WS2812 wurde schon genannt, ansonsten kann man
nicht nur die Taster sondern auch die LEDs multiplexen. Bei 25 sollte
das eigentlich ganz gut noch funktionieren, wenn man für jede Farbe
jeweils 5+5 Leitungen nimmt. Ein ATMEGA 128-16 AU hat 52 IOs, der würde
vermutlich reichen (Von den IOs her, von der Rechenleistung sowieso).
In Zeiten VOR WS28nn-Leds habe ich 32 RGB-Leds über 4094er
Schieberegister und HSB->RGB Wandlung mit einem ATMEGA8 @16Mhz
flimmerfrei gesteuert.
Incl. soft-color-change im Interupt.
Allerdings alles stringent in Assembler.
Heute mit WS28nn ist sowas eine Lachpille, meine ASM-Routinen kriegen
das Timing für beliebig viele WS28nn inzwischen auch @8Mhz internem
RC-Clock hin, geht also auch bei ATTINY, nur hat man da halt nicht genug
RAM um die RGB-Werte zu verwalten.
FPGA oder MainFrames dafür anzudenken ist (heute) albern,
in meine Nachtgebete schliesse ich immer die RGB-LED-CUBE-Leute ein,
die "zu früh=vor WS28nn" hunderte Leitungen verwaltet haben,
inzwischen geht das mit EINEM Portbit @paar Mhz Clock...
Karl schrieb:> 5 x 5 RGB und einen Haufen Taster?>> - 25 x WS2812(b) o. ä. -> 1 Pin> - 30 x Tasten in einer Matrix anordnen -> 6 Pins> - 1 x Controller ab ATTiny24
Korrekt, aber 30 Tasten und 6 Pins?
Könnte ich auch mit 1 oder halt 2/3 Pins über analoge R-Messung machen.
Also mach doch mit Nano Atmega328B einfach weiter!
mt
p.s Die Nano analog Inputs sind bis auf zwei auch digital Inputs, wenn
entsprechend im Setup vorher initialisiert wurde!
Marct schrieb:> Was ist denn die beste Weise das beschriebene Projekt umzusetzen. Man> gehe davon aus, dass es in Kleinserie produziert werden soll (20-100> Stück). Ist ein Mikrocontroller überhaupt das richtige Mittel,
doch, schon.
> oder sollte es anderweitig verschaltet werden?
Kaum möglich.
> Gibt es Mikrocontroller mit dieser Anzahl von IO-Pins?
Wozu ? Für 30 Taster braucht man 9 Anschlüsse (etwas übersichtlicher
11), für 25 RGB LEDs wie WS2812 1 Anschluss, es tut also jeder noch so
kleine uC, dein Arduino problemlos und er ist schnell genug.
> Ab welcher Stückzahl rentiert sich der Einsatz von FPGAs?
Gar nicht. Die brauchst du, um deinen Internetverkehr in Echtzeit
mitzuschneiden und die verschlüsselten ZIPs zu entpacken und auf
Stichworte wie "Terror" zu untersuchen, und das für alle 100000
Teilnehmer der Glasfaser gleichzeitig.
Stimmt genau:
20x20 oder auch 80x80, geht immer.
Bei WS28nn Kaskaden/Strips lassen sich nämlich auch wunderbar
Abzweigungen bzw. parallel-Strecken bauen, wenn die DATA-Lines geschickt
kombiniert sind.
Wenn "mitten-im-Strip" ein Dout auf 1+n weitere Din verzweigt, ist aber
ein Data-Vorwiderstand ~100R an jeden SUB-Strip sinnvoll.
Partielle Vergrösserungen der Lichtfelder (=mehr Leds gleicher Farbe)
sind so simpel machbar OHNE JEDE Änderung der Software bzw. des
Daten-Durchsatzes.
Jim Beam schrieb:> Heute mit WS28nn ist sowas eine Lachpille, meine ASM-Routinen kriegen> das Timing für beliebig viele WS28nn inzwischen auch @8Mhz internem> RC-Clock hin, geht also auch bei ATTINY, nur hat man da halt nicht genug> RAM um die RGB-Werte zu verwalten.
Das mit dem Ram würde ich nicht pauschal unterschreiben,
ich generiere die Daten bei 16Mhz auf einem ATTiny45 parallel (8Mhz oder
weniger würden auch gehen) zur Ausgabe, man muss sich nur von der
Vorstellung lösen, dass die TH+TL so kurz ist, wie man im Datenblatt
annehmen möchte, dies gilt so praktisch nur für die TH!
(bei allen von mir getesteten LED´s, zuletzt SK6812, gleichermaßen)
Sofern die Mustererzeugung im Attiny45 Platz findet kann die Kette
theoretisch unendlich lang sein, wenngleich die Definition der
Ende-Bedingung dann schwierig wird und der Refresh dann natürlich ebenso
lange dauert ;-)
Gruß Dominik
Marct schrieb:> ich möchte eine RGB-LED-Matrix (5x5) bauen. Jede dieser LEDs soll mit> einem eigenen Taster angesteuert werden, und zusätzlich soll es noch> (ca. 5) Taster zur Farbauswahl geben.
Warum für jede Led in einer Matrix einen eigenen Taster?
Wozu?
Dominik schrieb:
> ich generiere die Daten bei 16Mhz auf einem ATTiny45 parallel (8Mhz oder> weniger würden auch gehen) zur Ausgabe...
DAS ist natürlich eine Nummer geiler, als ich es bisher gemacht habe!
Welche Stelle im Timing-Ablauf ist denn nach Deinen Erfahrungen am
unkritischsten, um noch ein paar Aktionen einzufügen?
SK6812 sind doch die mit zusätzlichem Weiss, oder?
Da will ich demnächst mal ran, hast Du da irgendwas erforscht, was man
wissen sollte?
Ich habe übrigens in WS28nn-Ketten auch schon erfolgreich Power-Leds und
Glühlampen eingebunden, weil es gibt ja die WS2811 auch als SOIC-Chip,
statt der LED dann Lastwiderstände genommen und am Abgriff FETs zur
Ansteuerung der Heavy-Loads. Man muss dann die Daten halt als 255-n
senden.
Auch interessant: Die WS2811-Chips gehen auch wunderbar als
Servo-Controller...
Jim Beam schrieb:> Dominik schrieb:> ich generiere die Daten bei 16Mhz auf einem ATTiny45 parallel (8Mhz oder
weniger würden auch gehen) zur Ausgabe...
> DAS ist natürlich eine Nummer geiler, als ich es bisher gemacht habe!> Welche Stelle im Timing-Ablauf ist denn nach Deinen Erfahrungen am> unkritischsten, um noch ein paar Aktionen einzufügen?>> SK6812 sind doch die mit zusätzlichem Weiss, oder?> Da will ich demnächst mal ran, hast Du da irgendwas erforscht, was man> wissen sollte?
Hallo, erforscht eher im Sinne von im Internet geforscht, die Lorbeeren
gehen an jemand anderen, hab den Link aber gerade nicht parat.
Wollte damals einen i2c to led
Adapter bauen und nun ja es geht auch ohne Unmengen an RAM zu belegen
;-)
Im Prinzip sind die beiden High-Pegel als einziges kritisch (bei einer
LED sogar nur der kürzere von beiden).
Die längstmögliche Pause zwischen den 32 oder 24bit Paketen ist meist
mit 50us angeben, das stimmt allerdings nicht, meist warten die Chips
nur 5us. Was da allerdings auch nicht zu sehen ist, diese Pause kann
auch zwischen den Bits eingelegt werden kann, und 5us zwischen zwei Bits
sind ne Ewigkeit.
Also muss man nur den Fluss aufrechterhalten und darf keine Pausen im
Datenstrom von>5us generieren.
Hat der uC sonst noch viel Auslastung bietet sich hierzu ein kleiner
Ringpuffer im Speicher an, der bei mir z.B. aber meist nur 16 oder 32
werte umfasst, egal wie lang die Kette ist.
Bei Interesse an unkommentiertem qnd-Code kann ich mal ein Beispiel
Posten.
Ja, „rgb“w mit 32bit Paketen
Gruß Dominik