Archiv verlassen und diese Seite im Standarddesign anzeigen : RGB LED Matrix - Arduino
PhonierDeluxe
12.07.2016, 19:27
Moin :)
Ich möchte eine RGB Matrix bauen. Ich habe bisher bereits eine einfarbige Matrix gebaut und damit ein wenig Erfahrung gesammelt.
https://vimeo.com/168187014
Ich hatte mir gedacht, ich baue diese Matrix einfach zu einer RGB Matrix um. Der Umbau bereitet mir allerdings ein wenig Bauchschmerzen, da die Schaltung deutlich komplexer wird.
So wie ich das sehe, benötige ich beispielsweise für jede Zeile jeweils 3 Transistoren, für jede LED jeweils 3 Vorwiderstände und mehrere Shiftregister, um die Matrix mit dem Arduino Uno ansteuern zu können. Die RGB Leds, die ich hier habe, haben 4 Kontakte (R,G,B und Ground).
Was wäre denn die einfachste Art, um so eine Matrix aufzubauen? Ich habe beispielsweise gelesen und gesehen, dass sich eine Matrix auch aus LED Strips aufbauen lässt. Wie genau das funktioniert, weiß ich jetzt aber nicht.
Vllt auch noch, was wären die Vor- und Nachteile.
================================================== ========
Bilder zum Projekt:
Gehäuse und Raster aus Pappe, daher leider nicht ganz symmetrisch ;)
http://www2.pic-upload.de/thumb/31315668/IMG_20160727_150633355.jpg (http://www.pic-upload.de/view-31315668/IMG_20160727_150633355.jpg.html) http://www2.pic-upload.de/thumb/31315667/IMG_20160727_150652254.jpg (http://www.pic-upload.de/view-31315667/IMG_20160727_150652254.jpg.html)
Und ein Video hinzugefügt, bei der man die Uhr und das Spiel Snake sehen kann :)
https://vimeo.com/177699160
=== Update ===
http://www2.pic-upload.de/thumb/31560139/IMG_20160827_124303074.jpg (http://www.pic-upload.de/view-31560139/IMG_20160827_124303074.jpg.html) http://www2.pic-upload.de/thumb/31560140/IMG_20160827_124326310.jpg (http://www.pic-upload.de/view-31560140/IMG_20160827_124326310.jpg.html)
=== Update ===
https://vimeo.com/184040642
Was ist zu sehen?
Raspberry PI B+ + Raspbian Jessie Lite
Insgesamt 4 Python Scripte:
das erste ist das Menü, das automatisch nach dem Booten ausgeführt wird. Es listet alle Python Dateien in einem bestimmten Ordner auf und stellt jeweils die ersten beiden Buchstaben einer Datei auf der LED Matrix dar. Darunter ist eine Scrollbar, die ungefähr anzeigen soll, wie viele Dateien es gibt.
Ich kann mich mit den Pfeiltasten (links, rechts) durch die Dateien Scrollen. Mit "Enter" führe ich die Dateien aus. Mit "Ende" stoppe ich die Dateie und kehre zum Menü zurück.
das zweite Script ist das Spiel Snake,
das dritte stellt die Uhr dar,
und das vierte ist eine einfache Ladeanimation.
hallo,
zumindest was die LEDs angeht, wirst du auf die Widerstände nicht verzichten können.
Was die Transistoren angeht, würde ich auf I2C ausweichen, z.B. per MCP23017 Multiplexer, mit dem du jeweils 16 LEDs ansteuern kannst - mit 5en davon also 80, nur die I2C Adressen müssen ntl voneinander verschieden sein.
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&start=45#p69287
zu LED Stripes allerdings kann ich leider nichts sagen.
Hallo,
du kannst dir auch mal die "Neopixel" von Adafruit anschauen.
https://www.adafruit.com/products/1655
Das sind RGB-LEDs mit integriertem Treiber.
In Deutschland werden die z.B. über Watterott vertrieben. Dort einfach nach WS28 suchen.
Grüße,
Bernhard
Feuerring
13.07.2016, 00:25
Hallo BMS
ein toller Link ... wusste gar-nicht das es sowas gibt
hier ein Link für "PhonierDeluxe (https://www.roboternetz.de/community/members/66648-PhonierDeluxe) " eine bereits fertige 8x8 Matrix für unter 40 Euro
http://www.exp-tech.de/adafruit-neopixel-neomatrix-8x8-64-rgb-led-pixel-matrix
was habe ich damals für meine Matrix 64x8 noch gelötet ... siehe hier (http://greinert.hopto.org/main/index.php?id=20091109hggw53kf775ms528gd5a5h27)
Andree-HB
13.07.2016, 08:23
...dann leg` da gleich was drauf und hole Dir dort diese Matrix:
http://www.exp-tech.de/rgb-led-panel-32x32
Damit kann man dann soetwas machen:
https://www.youtube.com/watch?v=gcZZ2zq6Hv4
:-)
@Feuerring die WS2812 Matrix gibts aber deutlich günstiger!
https://www.amazon.de/DIGI-DOT-Panel-SK6812-WS2812B-kompatibel/dp/B01EY7MY8K/ref=sr_1_2?ie=UTF8&qid=1468391043&sr=8-2&keywords=neopixel+8x8
https://www.amazon.de/DIGI-DOT-Panel-8x8-mit-WS2812B-LEDs/dp/B00QYPFW8K/ref=sr_1_8?ie=UTF8&qid=1468391043&sr=8-8&keywords=neopixel+8x8
https://www.amazon.de/DIGI-DOT-PANEL-8X8-MIT-WS2812B-LEDS/dp/B00QYQCMQY/ref=sr_1_7?ie=UTF8&qid=1468391043&sr=8-7&keywords=neopixel+8x8
die 2te Matrix hat ein größeres Raster
Feuerring
13.07.2016, 08:54
...dann leg` da gleich was drauf und hole Dir dort diese Matrix:
http://www.exp-tech.de/rgb-led-panel-32x32
Da lohnt sich auf jedenfalls das selber löten nicht ... 43 Euro ist ein super Preis
Achte drauf, dass es sich dabei um eine echt Matrixsteuerug handelt, kein Serieller Bus mit WS2812 :D
Feuerring
13.07.2016, 09:11
Achte drauf, dass es sich dabei um eine echt Matrixsteuerug handelt, kein Serieller Bus mit WS2812 :-)
dafür gibt es doch den DIGI-DOT-Booster-WS2812 (http://http://www.led-genial.de/DIGI-DOT-Booster-WS2812-und-SK6812-ueber-SPI-Schnittstelle-ansteuern)
@Feuerring (https://www.roboternetz.de/community/members/42851-Feuerring) falsch verstanden! das 32x32 Panel ist eine echte Matrixsteuerung, KEIN Serielles Protokoll wie du es vorher gepostet hattest!
trotzdem Danke für den Tipp mit dem Modul, sieht ja mal interessant aus!!!
PS der link ist broken!
http://www.led-genial.de/DIGI-DOT-Booster-WS2812-und-SK6812-ueber-SPI-Schnittstelle-ansteuern
(http://www.led-genial.de/DIGI-DOT-Booster-WS2812-und-SK6812-ueber-SPI-Schnittstelle-ansteuern)
Also ich hab mir die Doku durchgelesen, der Booster ist ziemlich eingeschränkt in seiner Funktion, nicht empfehlenswert in meinen Augen!
Was ich von einem Booster erwarten würde, wären eine Streamfunktion oder ein hinreichend großer Speicher um eigene Muster anzuzeigen! Aber nur Lichterketteneffekte und irgendwelche Ranges mit Delay anzusteuern ist Nutzlos.
Feuerring
13.07.2016, 10:51
Also ich hab mir die Doku durchgelesen, der Booster ist ziemlich eingeschränkt in seiner Funktion, nicht empfehlenswert in meinen Augen!
Was ich von einem Booster erwarten würde, wären eine Streamfunktion oder ein hinreichend großer Speicher um eigene Muster anzuzeigen!
Aber nur Lichterketteneffekte und irgendwelche Ranges mit Delay anzusteuern ist Nutzlos.
Hatte ich nur beim durch schauen gefunden ... wäre doch aber mal ein schönes Projekt ein WS2812 Matrix-Treiber, den so gestalten, das dieser auch eine wirkliche Entlastung für die Main-CPU ist ...
Wird bestimmt nicht einfach, im Endeffekt kommt man bei einem Grafik-Modul raus wo die Main-CPU in den Grafik-Speicher dann direkt schreiben kann ...
ich hab schon eine theoretische SChaltung dafür aber die physikalische Realiserbarkeit ist das Problem!
besteht aus 2 D-FFs einem Inverter und einem sehr schnellen 555er in Pulsdehnungs Konfiguration.
Ist eine theoretische Schaltung zur Synchronen SPI -> PWM Modulation
SCLK geht invertiert auf D-FF1 und direkt auf D-FF2
MOSI auf D1 von D-FF1
Q1 von D-FF1 auf D2 von D-FF2
Q2 von D-FF2 verstimmt dann den 555er damit er bei high einen langen und bei low einen kurzen Puls generiert
SCLK hängt dann über ein Pulsglied (keine Ahnung wie man das baut) an dem Trigger des 555
wenn SCLK high geht, buffert der D-FF1 den MOSI, auf SCLK low latcht D-FF2 und triggert gleichzeitig den Timer und das Bit wird in einen definierten Puls umgewandelt
Was ich bis heute nicht hinbekommen habe mit möglichst diskreter Logik ein Pulsglied zu bauen, also egal wie lange ich high gebe, es darf immer nur ein kurzer puls rauskommen!
Auf Controllerseite brauchst du jetzt quasi nurnoch per SPI (mit DMA oder Interrupts) dein RGB-Array aus dem Speicher in die LEDs schieben
(mit derälteren Version der LEDs, einem übertaktetem SPI und DMA hatte ich das Bit Muster mit Bytes simuliert, also für eine 0 habe ich 0b11100000 und für eine 1 0b11111000 übertragen ... funktionierte bis zu einer gewissen Anzahl von LEDs dann war der RAM voll, denn 24bytes pro LED sind recht heftig :D)
im Endeffekt kommt man bei einem Grafik-Modul raus wo die Main-CPU in den Grafik-Speicher dann direkt schreiben kann ...
Da ja schon Adafruit erwähnt wurde, da gibt es ein enstprechendes Projekt, aber nicht unter Arduino
https://learn.adafruit.com/ledgames-beaglebone-black-64x64-led-game
@Mxt im Bezug auf den Post von Feuerring ist das leider auch nur eine "ordinäre" LED Matrix Lösung und kein
WS2812 Matrix-Treiber
diese Seriellen LEDs haben den gigantischen Vortiel, dass man die Matrix fast beliebig erweitern kann, aber sie haben auch leider nur eine begrenzte Updaterate!
Kann man damit auch machen:
https://trmm.net/LEDscape
to drive 64 RGB matrices or 32 of the WS2811 LED strips with 0% CPU load. This allows all of the ARM's CPU time to be used for rendering frames into a buffer, which is then clocked out at the high speed 800 KHz rate to the WS281x strips or at a 1 MHz clock to the matrices. This rate allows 544 meters of strip / 64 31x16 LED matrices to be drawn at 30fps. Since the PRU can read any of the ARM's RAM it is possible to change the frame buffer pointer on every frame for easy double-buffering.
das ist dann also nur simples Outsourcing zu den entsprechenden Kosten ... mein Ansatz war eher eine diskrete Lösung auf Basis eines 800kHz SPI (By the way, ein XMega mit DMA kann das auch ganz bequem, aber es gibt einfach keine günstigen XMega Module auf dem Markt)
By the way, ein XMega mit DMA kann das auch ganz bequem,
Bing, gewonnen :p
Ich dachte mir schon vorher: "Jetzt kommt bestimmt als nächste Antwort: Das kann nichts sein, weil ja ein TI Controller verwendet wird." Aber klar 32 (?) MHz Atmel schlagen locker 1 GHz TI. :cool:
Ist dann doch wieder etwas Arduino, es ist der Prozessor des nie erschienenen Arduino Tre
http://www.ti.com/product/AM3358
Andree-HB
13.07.2016, 13:19
...wir haben diese Anzeige (mit WS2812b-Stripes) mit `nem Teensy als reinen Displaytreiber gebaut:
https://www.hackerspace-bremen.de/2014/06/04/arduino-videogame-das-display-ist-fertig/
https://www.hackerspace-bremen.de/?s=videogame
Kann man mittlerweile über`s Netz mit "irgendwas" ansteuern...Windows, Linux, Raspberry....
Sieht gut aus.
Und zum zweien Mal in diesem Thread ein "Invaders". Sieht wohl auch am besten aus, wenn man solche Displays nimmt. :)
Was mich immer wieder an den Lösungen ärgert, ist diese Kanonen auf Spatzen Weise.
Ein XMega Modul wäre ebenfalls der totale overkill ... wenn es XMegas in DIP gäbe, könnte man den sogar fliegend oder im Lochraster zusammenlöten und bräuchte nur 4-5€ dafür und hätte damit einen grünstigen (und intelligenten) Treiber (mit refresh und memory)
als diskrete Lösung wäre es ebenfalls unter 5€, es wäre dann halt nur ne synchrone Konvertierung von TTL Bits zu PWM Bits :)
Ein einfaches Controllermodul, klein, <15€ baremetal progrmmiert würde schon reichen :)
Die DMA Timerlösung für einen RPI Zero hab ich schon getestet, funktioniert bis ca. 50LEDs danach wirds unschön :X
Und so einn Monster wie den Zero als bare metal progrmmierten Protokollwandler zu verheizen tut mir in der Seele weh XD
Äh, das ist doch gerade das charmante an den Beagle Beispielen.
Man nutzt die beiden Prozessoren, die da sowieso sonst arbeitslos im Chip stecken. Damit eine Grafikeinheit zu programmieren, finde ich schon recht cool.
Noch mal zum Hintergrund
TI's ARM processors feature a unique subsystem, called the Programmable-Realtime Unit Industrial Communications Subsystem (PRU-ICSS), which enables the integration of real-time industrial communications protocols and eliminates the need for an external ASIC or FPGA.
dann bin ich aber an den Beagle Bone gebunden, ich bin aber ein RPI Fan :D
mal ebgesehen davon dass man dann alles Bare Metal programmieren müsste *schüttel*
mal ebgesehen davon dass man dann alles Bare Metal programmieren müsste *schüttel*
Nö, dafür gibt es mittlerweile C-Compiler, Python-Libs und sogar Basic. Habe aber zu wenig Zeit mir das mal anzusehen.
ich glaub wir verstehen unter dem Begriff Bare-Metal was unterschiedliches :D
Bare Metal so wie ich es verstehe heißt für die Hardware auf einem Fremdsystem zu Compilen und dann zum Board zu übertragen ... was ich aber viel schöner finde, gleich im laufenden Linux OS einfach den pyscript auszuführen oder die compiled binary auszuführen
Es muss doch irgwendwie universeller und günstiger gehen als einen 1GHz ARM dafür zu verballern .... mal abgesehn daovn dass der XMega auch hoffnungslos unterfordert wäre XD
Ich knobel gerade ob ich den KRam nicht auch mit einem ATTiny erledigen könnte O_o
Timer mit maximaler Auflösung und niedrigem TOP für das PWM und über den MOSI Steuern und über SCLK synchronisieren
also bei Timer Update den Compare je nach Zustand des MOSI Signal auf kurz oder langen Puls einstellen und Timer im One Shot Mode laufen lassen
was ich aber viel schöner finde, gleich im laufenden Linux OS einfach den pyscript auszuführen oder die compiled binary auszuführen
Ja, genau so geht das.
und trotzdem werde ich mir niemals so ein Ding kaufen für nur diesen einen Zweck! Ich werde bei meiner vorhandenen Hardware bleiben und eine sinnvolle, kostengünstige, kleine nicht übertriebene Lösung dafür finden.
Ich bin bereits bei dem Gedanken angekommen den Attiny als Software SPI Master arbeiten zu lassen!
Timer Overrun, PWM Pin High, Update Compare Register from Buffer, Interrupt -> Pull CLK high
Time Compare Match, PWM Pin Low, Interrupt -> SCLK auf low, Compare Buffer Register mit Wert in Abhängigkeit von MISO Pin laden, Sleep gehen und auf nächsten Overrun warten
Der Tiny zieht die Werte also aus dem Main Controller, der muss nur eine SPI Schnittstelle haben die schnell genug reagieren kann.
Die Anzahl der LEDs ermittle ich mit einer Feedbackleitung.
Du darfst das ruhig ausführlicher erklären. Ich glaube nicht nur der Fragesteller hat den letzten Beitrag nicht verstanden.
Entschuldigung das war etwas unkontrolliert aus dem Kopf heraus geschrieben XD
Der Code wäre in der tat unheimlich simpel.
1 ATTiny mit
1 Timer mit einer Überlaufzeit 1/800kHZ , 2 Compare Outputs als Fast PWM
1ter PWM Output auf 50% und invertiert (der Pin simuliert unsere SCLK):
Immer wenn wir einen Überlauf vom Timer haben, wird die SCLK von der PWM Logik auf "low" gesetzt
Sobald der Compare Matchwert bei 50% Duty Cycle erreicht wird, wird SCLK auf "high" gesetzt und gleichzeitig ein Interrupt ausgeführt, welcher das Compare Register des 2ten PWM Output mit dem Timing für das Bit am MISO Eingang programmiert
Kurz vor dem Timer Überlauf wird dann der neue PWM Wert für den 2ten PWM Ausgang übernommen
Nach dem Update folgt der Überlauf und das Spiel geht von vorne los, bis alle LEDs mit Bits versorgt wurden, dann wird der Chipselect abgeschaltet und eine Pause gemacht damit die LEDs intern updaten.
Der Chipselect wird wieder eingeschalten, das erste Bit wird per Software eingelesen und der Timer neu gestartet.
Zum zählen der LEDs werden auf Knopfdruck einfach nur Nullen über den PWM geschoben und die Bits gezählt, bis von der letzen LED das erste Bit zurück kommt.
Leider blockieren in meinem Hirn gerade alle Programmierkenntnisse, vll. kann ich morgen mal einen brauchbaren Fetzen Code präsentieren
TCCR0A = \
(COM0A0 | COM0A1) | \ //Compare Output A low on Overrun/BOTTOM, high on Match (SCLK)
(COM0B0) | \ //Compare B high on Overrun/BOTTOM, low on Match (WS2812 PWM)
(WGM14); //WAveForm Mode 14: Fast PWM Count to TOP read from ICR0
ISR(TIM0_COMPA_vect)
{
if(PINB & PINB2){
TCCR0B = LONG_PULSE;
}
else
{
TCCR0B = SHORT_PULSE;
}
}
jetzt nur ganz grob, ohne Timer Werte für irgendwas :D
PortB
Pin2 ist MISO
Pin 1 (Compare B) der PWM
Pin 0 (Compare A) ist SCLK
Vielleicht sollten wir auch noch mal zu den Basics zurückkehren.
Der Fragesteller hat sich noch nicht wieder gemeldet und wir wissen noch nicht, ob er sich für eine echte Matrix oder Streifen entscheidet.
PhonierDeluxe
13.07.2016, 20:31
Also was mir ehrlich gesagt an den fertigen Matrizen nicht gefällt, die sind einfach total klein oder die Abstände zwischen den LEDs sind zu gering. Ursprünglich wollte ich mir einen Couchtisch mit Matrix bauen, nur wohin ich den dann stelle ist die Frage :D. Also hab ich mich umentschieden und möchte nun eben einen Gameframe nachbauen, den ich an die Wand hängen kann und mit dem ich z.B. auch ein paar Ründchen Snake zocken kann :). Größe mindestens 20x20 cm. Auflösung 8x8 reicht glaube ich aus.
Ansonsten wollte ich noch darauf hinweisen, ich bin ein Anfänger, was Elektronik und Hardwarenahe Programmierung angeht^^. Das Projekt sollte mir auch dazu dienen, meine Kenntnisse zu erweitern und zu vertiefen.
Trotzdem mal aus reinem Interesse:
fertige Matrix vs. Streifen, was für Vorteile/Nachteile gibt es? Und wie funktionieren die beiden Möglichkeiten überhaupt? Wofür ist z.B. dieser Controller WS2812?
was die WS2812 angeht, die gibt es i.d.R. auch als einzel LEDs mit Trägerplatinchen und Stabbi Cs drauf, hab gerade 100 Stück für 44€ gefunden, bissl teuer aber Fair wenn man bedenkt dass es einzelne Platinchen sind :)
Da sind dann 6 Lötaugen auf der Rückseite, 2xPlus 2xMinus 1xIn 1xOut, die kannst dann einfach in Reihe mit Draht verlöten.
Dann nimmst du eine dünne Sperrholzplatte, Bohrst dir deine Löcher für die LEDs und KLebst die Platinchen mit LED voran von unten auf die Löcher. Oben drauf packst du dann eine Glasplatte mit einer Diffusen Foiel oder Beschichtung drauf ... sieht bestimmt gut aus :D
Hallo,
das die Diskussion hier etwas aus dem Ruder läuft, ist halt so bei so vielen Experten mit unterschiedlichen Ansichten.
Also bemühen wir uns, sie wieder etwas einzufangen. Sag ruhig, wenn du was nicht verstehst.
Bei einer echten Matrix werden die LEDs einzeln angesteuert. Dabei gibt es einige Schaltungstricks, damit man nicht für jede LED einen einzelnen Ausgang hat. Soweit bist du ja wohl schon. Problem: Mit wachsender Größe und bei mehreren Farben braucht man sehr viele IOs. In dem Falle 8x8 mit 3 Farben auf jeden Fall mehr als der Uno hat. Eine Abhilfe könnten Porterweiterungs-ICs sein, wie schon in einer der ersten Antworten genannt. Will man aber auch noch die Helligkeit einstellen, braucht man IOs mit PWM, das wird dann komplizierter.
Bei Streifen hängen alle LEDs an den selben Leitungen. In diesen LEDs befindet sich ein kleiner Chip, der Befehle liest und die entsprechende Farbe und Helligkeit einstellt. Die Daten für alle LEDs werden durch den Streifen "durchgeschoben". Eine Matrix bildet man daraus, in dem man die Streifen "faltet" und ggf. mehrere Untermatrizen zusammenbaut. Schau dir mal hier die Bilder an, da sollte das deutlich werden.
https://learn.adafruit.com/adafruit-neopixel-uberguide/neomatrix-library
Vorteil: Weniger Leitungen und IOs.
Nachteil 1: Zeitkritische schnelle Datenübertragung über die Datenleitungen. Dafür gibt es aber Bibliotheken.
Nachteil 2: Bei größeren Matrizen kommen die 8-Bit Rechner an ihre Grenzen. Lösung: 32 Bit Bastelrechner, wie der erwähnte Teensy.
Nachteil 3: Das "Schieben" dauert natürlich seine Zeit. Bei großen Matrizen werden bewegte Bilder langsam. Lösung: Viele (ggf. alle) Teilstreifen parallel beschreiben, großen schnellen Prozessor nehmen. (Das ist der Punkt, den Ceos anscheinend nicht bemerkt hat.)
Das ist der Punkt, den Ceos anscheinend nicht bemerkt hat. Das ist exakt DER Punkt, weswegen ich pro Streifen nach einer Kostengünstigen Version zur Protokollübersetzung suche!
Gut, das habe ich auch nicht verstanden.
Aber, wenn du pro Streifen einen eigenen Controller hast, womit werden die dann alle mit Daten versorgt ?
In dem Beaglebone link fährt ein Beagle bis zu 32 Datenleitungen. Mehrere Beagles werden dann über 100 MBit Ethernet gespeist. Sind ja gewisse Datenmengen ...
Feuerring
14.07.2016, 10:55
hab gerade 100 Stück für 44€ gefunden, bissl teuer aber Fair wenn man bedenkt dass es einzelne Platinchen sind
angespornt von diesem Beitrag, habe ich mir auch mal ein Stripe 1m / 60 Leds (WS2812) für 8 Euro bestellt, eine LIB für Bascom (Rainbow.lib) gibt es auch bereits ...
als Status Anzeige für meinen Bot genau das richtige z.B. Akku ( grün / gelb / rot ) in einer LED ...
eine Matrix einfach damit zu realisieren ... funktioniert ja wie man in den Angeboten sieht ... alles hat seine vor und Nachteile.
Da der TO (PhonierDeluxe (https://www.roboternetz.de/community/members/66648-PhonierDeluxe)) nur eine RGB-Matrix 8x8 benötigt, würde ich mir nicht den Aufwand machen und eine selber löten, die 64 LEDs sollte man ausreichend schnell über WS2811-Protokoll angesprochen bekommen ...
entweder eine 8x8 Matrix kaufen oder entsprechende Stripes als Meterware 30/48/60/144 LEDs / Meter, dann alle 8 LEDs trennen in einer Matrix wieder untereinander kleben, IN mit OUT verbinden ... fertig
PhonierDeluxe
20.07.2016, 20:50
Also ich hab mich jetzt doch für diese LED Matrix entschieden:
https://www.amazon.de/DIGI-DOT-Panel-8x8-mit-WS2812B-LEDs/dp/B00QYPFW8K/ref=sr_1_8?ie=UTF8&qid=1468391043&sr=8-8&keywords=neopixel+8x8
Ist halt super günstig, von den Maßen her auch noch in Ordnung. Was jetzt noch fehlt, ist die Stromversorgung. Die Matrix frisst ja maximal 3.3A bei 5V.
Ich denke das hier wäre dafür ganz gut oder? https://www.amazon.de/Schaltnetzteil-Netzteil-25W-MeanWell-RS-25-5/dp/B00MWQDAMU/ref=sr_1_7?ie=UTF8&qid=1469037646&sr=8-7&keywords=meanwell+5v
Würde sich darüber auch noch der Arduino versorgen lassen? Wobei der benötigt, wenn ich das richtig verstanden habe mindestens 6V. Bräuchte ich dann nicht noch einen Spannungswandler?
Peter(TOO)
20.07.2016, 21:03
Ich denke das hier wäre dafür ganz gut oder? https://www.amazon.de/Schaltnetzteil-Netzteil-25W-MeanWell-RS-25-5/dp/B00MWQDAMU/ref=sr_1_7?ie=UTF8&qid=1469037646&sr=8-7&keywords=meanwell+5v
Würde sich darüber auch noch der Arduino versorgen lassen? Wobei der benötigt, wenn ich das richtig verstanden habe mindestens 6V. Bräuchte ich dann nicht noch einen Spannungswandler?
Du kannst den On-Board Spannungsregler umgehen. Bei Versorgung über USB sind auch nur 5V vorhanden.
MfG Peter(TOO)
PhonierDeluxe
21.07.2016, 11:40
Noch eine blöde Frage zu den Netzteilen:
gibt es einen Unterschied zwischen diesen beiden? Also sind doch im Grunde die gleichen Netzteile oder, nur halt andere Maße und anderes Gehäuse?
https://www.amazon.de/gp/product/B00MWQETR0/ref=s9_simh_gw_g60_i2_r?pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=desktop-1&pf_rd_r=E3YCWGES1X08W345Q7GV&pf_rd_t=36701&pf_rd_p=7fb339d7-1d6e-42de-9c12-dadc030ae13c&pf_rd_i=desktop#customerReviews
https://www.amazon.de/Schaltnetzteil-Netzteil-25W-MeanWell-RS-25-5/dp/B00MWQDAMU/ref=sr_1_12?s=diy&ie=UTF8&qid=1469093525&sr=1-12&keywords=meanwell+schaltnetzteil
das im länglichen Gehäuse ist Wasserdicht (im Sinne von Spritzwasser und Pfütze) mehr les ich da nicht heraus
(Die Definition IP67 sagt 30min in 15cm - 1m tiefen Wasser aber ich würde grundsätzlich einen Sicherheitsgrad tiefer ansetzen ;D oder generell Wasser fern davon halten)
Peter(TOO)
21.07.2016, 14:14
gibt es einen Unterschied zwischen diesen beiden? Also sind doch im Grunde die gleichen Netzteile oder, nur halt andere Maße und anderes Gehäuse?
Naja, weil das Brötchenverkäufer sind, fehlen weitere technische Angaben :-(
So ein Netzteil hat eigentlich noch eine Menge weitere Parameter!
Wichtig für dich wäre das Impulsverhalten! Der Strom kann sich schlagartig um 3.3A ändern (Alle LEDs Aus --> Alle An). Dies hat immer einen kurzen Spannungseinbruch zur Folge, bis die Elektronik ausgeregelt hat. Den LEDs ist dies egal, aber ein µC kann dadurch aus dem Takt kommen. Da braucht man dann noch zusätzlich ein paar Elkos.
Das verhalten kann zwischen einem Spannungseinbruch von 100mV über einige µs und Spannung für einige Sekunden ganz weg (wenn dabei die Überstrombegrenzung anspricht) liegen. Da nicht s angeben wird, gibt es auch keine Garantie für das Verhalten.
Aber bei den Brötchen gibt es dies auch nicht :-(
MfG Peter(TOO)
PhonierDeluxe
24.07.2016, 11:50
Ich meld mich mal wieder ;)
Ich hab jetzt die Matrix und das Netzteil hier und würde es gerne mit dem Raspberry PI verbinden. Das Problem dabei ist ja, dass die Ausgänge beim RPI anders als beim Arduino mit nur 3.3V arbeiten. Die Matrix benötigt jedoch 5V. Dafür gibt es ja die Level Shifter.
Ich habe aber keinen Level Shifter da und würde das gerne einfach als Schaltung nachbauen.
Ich bin im Netz auf diese Schaltung gestoßen und würde gerne wissen, was ihr davon haltet? Brauchbar für mein Vorhaben oder lieber die Finger davon lassen?
http://www.incrediblediy.com/2013/02/simple-33v5v-level-shifter.html
Peter(TOO)
24.07.2016, 13:33
Doch, der funktioniert!
Es geht aber auch einfacher:
https://www.google.ch/imgres?imgurl=http%3A%2F%2F4.bp.blogspot.com%2F-tuXxiBRWlcE%2FUy75nO_i6YI%2FAAAAAAAAAGg%2FJH-j9Q_F-lU%2Fs1600%2FLevel%2BShift%2BNPN.png&imgrefurl=http%3A%2F%2Fforcetronic.blogspot.com%2F 2014_03_01_archive.html&docid=daK_Lq7oy3iuHM&tbnid=Ud_ADJ18a1Zm-M%3A&w=469&h=227&bih=880&biw=1440&ved=0ahUKEwiQ1t_5_4vOAhUGOxoKHRRCAIcQxiAIAygB&iact=c&ictx=1
Wobei, wenn man weiss, WAS genau angeschlossen wird, geht es teilweise auch ganz ohne Levelshifter.
MfG Peter(TOO)
Feuerring
24.07.2016, 17:05
Ich bin im Netz auf diese Schaltung gestoßen und würde gerne wissen, was ihr davon haltet? Brauchbar für mein Vorhaben oder lieber die Finger davon lassen?
http://www.incrediblediy.com/2013/02...l-shifter.html (http://www.incrediblediy.com/2013/02/simple-33v5v-level-shifter.html)
Aber beachten, das Signal wird inventiert .... aus high wird low, aus low wird high
- - - Aktualisiert - - -
Aber beachten, das Signal wird invertiert.... aus high wird low, aus low wird high
Peter(TOO)
24.07.2016, 18:37
Hallo,
Aber beachten, das Signal wird invertiert.... aus high wird low, aus low wird high
Absoluter Quatsch!
Du hast die Schaltung nicht verstanden.
Da zwei Transistoren verwendet werden wird das Signal 2x Invertiert, stimmt also am Ausgang wieder.
MfG Peter(TOO)
Feuerring
24.07.2016, 21:49
Du hast die Schaltung nicht verstanden.
Du hast es erfast ...
Peter(TOO)
25.07.2016, 05:03
Du hast es erfast ...
Falls die Antwort ironisch gemeint ist, dann erklär doch mal die Funktionsweise.
Feuerring
25.07.2016, 08:46
Falls die Antwort ironisch gemeint ist, dann erklär doch mal die Funktionsweise.
Ne Du hast wirklich recht ... habe die Schaltung leider nur flüchtig angesehen gehabt und dabei falsch gelesen.
nur deine Antwort "Absoluter Quatsch!" empfand ich als unangemessen ... bin es wohnt sachlich du diskutieren ... keiner ist unfehlbar ...
PhonierDeluxe
25.07.2016, 21:25
Und ich meld mich mal wieder :)
Ich habe das jetzt alles soweit miteinander verbunden und bin nach diesem Tutorial vorgegangen: http://popoklopsi.github.io/RaspberryPi-LedStrip/#!/ws2812
http://www2.pic-upload.de/thumb/31301945/IMG_20160725_193902460.jpg (http://www.pic-upload.de/view-31301945/IMG_20160725_193902460.jpg.html)
Allerdings leuchtet bei mir nur die erste LED und das auch unabhängig vom Code. Die kleine Schaltung ist der Level Shifter. Jemand eine Idee, was ich falsch mache?
Set the LED_COUNT variable to the total number of your LED's on the strip
jetzt nur mal so aus dem Bauch heraus .. poste mal deinen Code
PhonierDeluxe
26.07.2016, 10:16
Problem gefunden, ohne Levelshifter gehts :)
dann ist der Shifter zu langsam, meine Empfehlung zur Sicherheit ist ein 1-5kOhm Widerstand dazwischen um Querströme gering zu halten
um es genau zu nehmen, das Signal wird derart verbogen, dass die interne Auswertung zwar die Bits noch erkennt, der Ausgangsverstärker am DO Pin dann aber nurnoch Salat aus dem Signal macht
Peter(TOO)
26.07.2016, 11:57
Problem gefunden, ohne Levelshifter gehts :)
Welche Variante hast du aufgebaut?
Das Problem bei beiden Varianten ist, dass die 0 niederohmig mit dem Transistor erzeugt wird. Die 1 wird nur mit dem PullUp erzeugt.
Zusammen mit der Leitungskapazität hast du dann ein RC-Glied.
Ich habe nicht umsonst darauf hingewiesen, dass es darauf an kommt WAS da am Levelshifter angeschlossen wird.
MfG Peter(TOO)
PhonierDeluxe
26.07.2016, 12:32
@Peter(TOO)
Ich habe die erste Version aufgebaut, mit den 2 Transistoren. RC-Glied, PullUp sagt mir nicht wirklich was. Im Code werden die LEDs mit 800khz angesprochen, was dann über GPIO18 (PCM_CLK) vom RPI über den Levelshifter zum Dateneingang der Matrix übertragen wird.
@Ceos
meinst du einen Widerstand zwischen Matrix und RPI? Und was ist unter Querströmen zu verstehen?
wenn der LED streifen mit 5V läuft und das Steuersignal mit 3.3V kann Strom von der LED zum Controller fließen und um Zerstörung zu verhindern würde ich halt etwas moderat hochohmiges dazwischen schalten ... selbst wenn es 5v auf 5v wären, es wird kein strom benötigt, und sollte doch mal welcher fließen bleibt er auf einem unkritischen Niveau :D
reine Vorsichtsmahßnahme
PhonierDeluxe
26.07.2016, 13:11
wäre dann nicht eine Diode sinnvoll? die kann ja nur in eine Richtung fließen.
dann würde aber immer eine feste Spannung abfallen und aus 3.3V würden 2.6V was die LED nicht mehr erkennen würde und schlimmer noch, wenn dein Pin auf Low zieht würde die Diode sperren!
Der Widerstand soll nur fatalen Schaden verhinden .... gibt es eigentlich Optokoppler mit 1Mhz Schaltfrquenz? Das wäre am besten :D
PS: 1MHz reicht net, nichtmal 2Mhz ... mind. 4Mhz sonst ist die Slew-Rate zu schlecht ... ein schneller Operationsverstärker würde auch zum entkoppeln reichen :)
Feuerring
26.07.2016, 14:31
Warum nimmt man nicht einen Pegelwandler wie bei I2C, funktionieren dort auch mit 400 kHz ...
31864
Schutz-Diode im MosFet bitte noch dazu denken :-)
zuuu langsam :S schon probiert .... du brauchst mind. ein Transistor mit über 2Mhz Bandbreite weil es ein 800kHz PWM ist
Peter(TOO)
26.07.2016, 22:46
Ich habe die erste Version aufgebaut, mit den 2 Transistoren. RC-Glied, PullUp sagt mir nicht wirklich was. Im Code werden die LEDs mit 800khz angesprochen, was dann über GPIO18 (PCM_CLK) vom RPI über den Levelshifter zum Dateneingang der Matrix übertragen wird.
Ein Kondensator besteht aus zwei Leitern mit einem Isolator dazwischen.
Nun betrachte mal ein mehradriges Kabel oder deinen LED-Streifen unter diesem Gesichtspunkt.
http://static.interlogix.com/library/EV1116%20manual%20%20146251999-4D.pdf
Zusammen mit deiner Schaltung:
Entladen wird dieser Kondensator mit dem Transistor. Da der Transistor recht niederohmig ist, geht dies relativ schnell.
Geladen wird der Kondensator aber nur über R4 (1k5).
Das sieht dann so aus:
https://upload.wikimedia.org/wikipedia/commons/4/49/Ladevorgang.svg
Obere schwarze Kurve.
Tau = R * C
Nach Tau ist der Kondensator etwa auf 70% der Spannung geladen, in deinem Fall 3.5V.
Nach 5*Tau ist er auf rund 99* geladen.
Bei 1k5 und 100pF:
1.5* 103 * 100* 10-12 = 150*10-9 = 150ns
Deine 800kHz ergeben eine Periode von 1.25µs.
Bei einem Taktsignal steht die 1 aber nur 625ns an. Da sind dann 150ns schon erheblich.
Dein IC sieht also alles, nur kein Rechtecksignal!
Die 100pF sind nur geschätzt!
Bei 1nF sind es 1.5µs für Tau, also schon wesentlich mehr als deine Taktperiode.
Man müsste also R4 wesentlich kleiner (Bis 100 Ohm sollte machbar sein, dann fliessen 50mA durch den Transistor.) machen oder einen Pegelwandler mit Gegentakt-Ausgang verwenden.
Hier noch die ganze Theorie zum RC-Glied:
https://de.wikipedia.org/wiki/RC-Glied#Ladevorgang
Solche RC-Glieder verwendet man um nach einem Gleichrichter, um aus der pulsierenden Spannung, eine Gleichspannung zu machen.
https://de.wikipedia.org/wiki/Gleichrichter#Br.C3.BCckengleichrichter_.28B2.29.2 8B2U.29
und
https://de.wikipedia.org/wiki/Gleichrichter#Gl.C3.A4ttung
MfG Peter(TOO)
PhonierDeluxe
27.07.2016, 17:29
Ich hab die letzten zwei Tage an einem Gehäuse aus Pappe für die Matrix gebastelt. Könnt ihr euch im Startpost angucken ;) Soll irgendwann später mal durch ein Holzgehäuse ersetzt werden. Ansonsten wollte ich mich hier mal für die tolle Unterstützung bedanken, dich ich bisher von euch erhalten habe.
Was jetzt noch ansteht:
* OS auf dem RPI optimieren
* Offline Sprachsteuerung, deswegen auch der Wechsel zum RPI :D
* Stromversorgung des RPI über Netzteil der Matrix
* Programmierung von ein paar, sagen wir mal "Apps", die dann auf der Matrix angezeigt werden (Snake, Uhrzeit, Stoppuhr...)
* Verbindung Matrix <-> RPI nochmal genauer angucken
* einen Controller zum Steuern von z.B. Snake
PhonierDeluxe
05.08.2016, 15:54
Sodele, mal ein Video vom aktuellen Stand gemacht. (im Startpost)
Uhr ist fertig und läuft super, Snake ist fast fertig.
PhonierDeluxe
07.08.2016, 17:49
Ich hab jetzt nochmal eine Frage zur Stromversorgung. Ich möchte ja RPI und Matrix mit einem Netzteil betreiben. Das Netzteil ist ja von Meanwell und liefert bei 5V 5A.
RPI soll über µUSB versorgt werden. Soweit ich weiß verbraucht er (RPI 2) 600ma, wenn USB Geräte oder Monitor angeschlossen werden mehr. Es wird aber höchstens ein Bluetooth Stick angeschlossen, ansonsten nichts. Die Matrix verbraucht maximal 3.3A. Sollte ja also mit dem Netzteil hinhauen.
Gibt es sonst noch irgendwas zu beachten?
maximal 3.3A gemessen oder rechnerisch? Denk an Spitzenströme.
PhonierDeluxe
08.08.2016, 18:07
stand bei der Beschreibung von der Matrix dabei, also alle LEDs 100% weiß (Volllast), 3.3A
solange du jetzt nicht großartige ne externe Festplatte oder einen übermäßig stromhungrigen WLAN Stick mit riesen Antenne einbaust, sollte das in Ordnung sein. Meine Erfahrung mit dem RPI, sind maximal 1A zu erwarten in spitzenzeiten. Aber du solltest dennoch einen etwas größeren Kondensator mit anschließen um stärkere Einbrüche zu vermeiden! So ein Netzteil hat auch eine gewisse REgelzeit die es zu kompensieren gilt bei Lastwechsel.
PhonierDeluxe
25.08.2016, 17:17
Welcher Kondensator käme da in Frage? Wie wählt man da den richtigen aus? Soweit ich weiß gibt es ja die Keramikkondensatoren für hochfrequente Ströme und eben die Elkos, die die Ladung länger speichern können, wie z.B. bei einem Dynamo.
Aus deiner Antwort würde ich schließen, Elko. Nur wie viel Farad?
Peter(TOO)
25.08.2016, 23:08
Welcher Kondensator käme da in Frage? Wie wählt man da den richtigen aus? Soweit ich weiß gibt es ja die Keramikkondensatoren für hochfrequente Ströme und eben die Elkos, die die Ladung länger speichern können, wie z.B. bei einem Dynamo.
Aus deiner Antwort würde ich schließen, Elko. Nur wie viel Farad?
Ein Elko mit möglichst viel :-)
Allerdings erzeugt ein grosser Elko auch entsprechende Einschaltströme, welche das Netzteil vielleicht nicht mag und wegen Überlast abschaltet.
220 µF >5V <10V sollte kurze Stromeinbrüche verindern
mehr geht auch, aber wie von Peter erwähnt der Ladestrom könnte eventuell beim Einschalten die Sicherung des Netzteil kommen lassen... am besten einfach 1 kleineren, 1 mittleren und 1 größeren besorgen und ausprobieren :)
so was um die 100, 220 und 470 µF und dann ausprobieren
PhonierDeluxe
27.08.2016, 13:04
Mal ein kleines Update (siehe Bilder im Startpost)
hab mir leider die GPIOs von meinem RPI2 geschrottet und so läufts aktuell mit einem RPI B+. Wie das passiert ist, keine Ahnung. Musste ihn mal falsch angeschlossen haben.
Ansonsten.. Ich hab mir jetzt doch den Levelshifter besorgt und damit läufts ohne Probleme und auch die Stromversorgung läuft super :)
Bootvorgang dauert eine halbe Ewigkeit, da muss ich echt was tun. Habe bereits angefangen mich da mit Buildroot zu beschäftigen. Damit soll sich der Bootvorgang ja deutlich beschleunigen lassen.
Buildroot enthebt dich fast sämtlichen Funktionen, aber wenn du mit 18 Sekunden leben kannst, nimm Jessi Lite und konfigurier die Netzwerkadressen fest statt mit DHCP
Buildroot ist dann 3sek aber nur mit einer Busybox als Shell und keinerlei Packages .... da kannst auch fast schon einen einfachen File Bootloader aufspielen und Bare Metal programmieren, aber das ist schon etwas extrem
Edit: will damit sagen, dass ein Kollege und ich uns schon an dem Buildroot die Zähne ausgebissen haben ... aber sowas komfortables wie apt-get bekommt man da nicht ohne erheblichen aufwand rein leider
PhonierDeluxe
14.09.2016, 12:46
Ich meld mich mal wieder, nach längerer Abwesendheit :) Hatte ein kleines Motivationsloch.
@Ceos
18 Sek auf einem RPI B+ klingen eigentlich sehr gut. Mit einem RPI2 oder dem RPI3 müsste das ja noch schneller ablaufen. Aktuell nutze ich noch das normale Raspbian, das braucht ca. 2-3 Min zum booten. Schon heftig.
Ansonsten arbeite ich aktuell an einem Menü, mit dem ich mir die anderen Python Dateien im Ordner auf der LED Matrix anzeigen lassen und ausführen kann. Dabei werden immer nur die ersten zwei Buchstaben angezeigt und unten drunter ist eine kleine Scrollbar.
Das Script wird dann automatisch nach dem Booten ausgeführt. Jedenfalls bin ich gespannt, wie schnell das mit Jessi Lite ablaufen wird.
Was mir allerdings noch aufgefallen ist, das Ausführen von Python Dateien dauert oft mehrere Sekunden. (zum Teil sogar 10-15 Sekunden) Gibt es eine Möglichkeit das zu beschleunigen? Mit dem RPI2 war das kein Problem, da wurden die Scripte nach 1-2 Sekunden ausgeführt. Allerdings hat er ja auch einen Quadcore.
die Verzögerung kann ich mir beim besten Willen nciht erklären, ich habe einen RPI-Zero der per I2C einen Drucknehmer abfragt und dann auf einem WS2812 Strip den Füllstand eines Fass anzeigt, der Script startet bei meinem Zero innerhalb von maximal 22 sek, je nachdem wie die laune des hakeligen WLAN Sticks ist! Wenn ich den WLAN Stick weglasse sind es sogar nur 16 Sekunden
mach dir doch mal spaßeshalber ein paar debugausgaben und lass dir die zeiten angeben die so drauf gehen!
PhonierDeluxe
15.09.2016, 00:30
Ich bin jetzt auf Jessie Lite umgestiegen und damit ist das Problem auch verschwunden. Bootet in ca. 20 Sekunden, Skripte werden nach 1-2 Sekunden ausgeführt. Super :)
So wie es aussieht, kann ich mich dann demnächst endlich mit dem interessanten Teil bei diesem Projekt beschäftigen, der Sprachsteuerung.
PhonierDeluxe
15.09.2016, 21:43
Gibt es eigentlich eine Möglichkeit ein Pythonscript während des Bootvorgangs auszuführen? (Z.B: Bootscreen für die Matrix)
piggituX
15.09.2016, 22:23
hi,
ein rc.local Eintrag z.b. könnte das machen.
cYa
PhonierDeluxe
16.09.2016, 15:06
@piggituX
das Skript wird dann aber erst ziemlich am Ende des Bootvorgangs ausgeführt. Ich habe hier ein Skript mit einer einfachen Ladeanimation. Der Bootvorgang dauert 20 Sekunden. Ich hätte gerne, dass das Skript schon wenige Sekunden, nachdem ich den RPI eingeschaltet habe, ausgeführt wird. Ist das Möglich?
ja, Jessi Lite startet mit systemd im entsprechenden Pfad könnte man den Skript schon sehr sehr früh starten lassen!
autorun als Systemd script http://www.raspberrypi-spy.co.uk/2015/10/how-to-autorun-a-python-script-on-boot-using-systemd/
wenn du dir den systemd config pfad ansiehst, findest du dort dateien die aufsteigend nummeriert sind und mit unterschiedlichen buchstaben
ich hab leider gerade nicht mehr auf dem schirm was für was war, aber entweder waren die zahlen für die reihenfolge und die buchstaben für den core oder umgekehrt!
Die skripts werden auf den größeren RPIs mit mehr als einem Kern parallel ausgeführt und z.B. auf dem Zero einfach nur sequentiuell der Numerierung nach.
Wenn du dich mit dem Scripts ein wenig genauer auseinandersetzt kannst du sicher rausfinden ab wann PYthon verfügbar ist und deinen Script noch früher starten lassen.
PhonierDeluxe
21.09.2016, 16:36
Danke für den guten Tipp :)
Hab es bisher allerdings nur geschafft, das Script 2 Sekunden früher starten zu lassen. Wann genau Python schon verfügbar ist, konnte ich bisher nicht herausfinden.
Ich hab dann einfach verschiedene targets ausprobiert z.B. basic.target oder auch rescue.target. Mit sysinit.target wollte es dann schon nicht funktionieren.
rescue.target war ja glaube ich schon Runlevel 1
[Unit]
Description=Bootanimation
[Service]
Type=idle
ExecStart=/usr/bin/python /home/pi/bootfiles/bootScreen.py
[Install]
WantedBy=basic.target
Also wenn sich das nicht noch ein wenig früher ausführen lässt, werde ichs weglassen.
PhonierDeluxe
23.09.2016, 21:27
Mal ein Update :)
Video im Startpost
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.