Hallo, auch ich bin auf den WS2812 und das ungünstige Timing getroffen. Alle Lösungen, die ich hier gefunden habe, bezogen sich rein auf Software oder Hardware im µC. Einen Versuch, einen rein hardwareseitigen Treiber dafür zu bauen, gab es noch nicht, liege ich damit richtig? Meine Idee war es, ein '8 Bit parallel -> seriell Shiftregister' zu verwenden. Man könnte immer für eine Farbe die Werte mit 8 I/Os ins Register laden, so müsste der µC nur alle 10µs (1,25µs*8) die Pins neu beschreiben, was bei einem 48MHz STM z.B. alle 480 Takte wäre. Das Weiterschieben der Werte im Register und anschließende Generieren und Timen der 0 und 1 "Codes" müsste also durch Gatter und Delaylines erfolgen. Der µC würde des Weiteren einen Befehl (ein weiterer I/O) bekommen, wenn er ein neues Byte auf seinen Output schreiben muss (alle 10µS). Also kurz ausgedrückt: Der µC schreibt alle 10µS, augelöst durch einen Pin Change Interrupt, immer 8 Bit aus einem Array mit den Farben für die LEDs auf einen seiner Ports, der Treiber macht den Rest. Nun meine Frage: Haltet ihr diese Variante der Ansteuerung für sinnvoll? Oder habe ich etwas übersehen? Bei Bedarf kann ich gerne eine Übersicht der Schaltung (1x 8Bit Register, 1x 4Bit Counter und ein paar Gatter) bereitstellen. Mit freundlichen Grüßen, Ludwig.
>Meine Idee war es, ein '8 Bit parallel -> seriell Shiftregister' zu >verwenden. Dann kannst du auch gleich Leds mit APA102 nehmen. Ansteuerung über 2 Wire SPI ohne zeitliche Krücken.
holger schrieb: > Dann kannst du auch gleich Leds mit APA102 nehmen. > Ansteuerung über 2 Wire SPI ohne zeitliche Krücken. Hallo, ich habe die APAs für 50 Euro/5Meter und die WS2812 für 35 Euro/5Meter gefunden, bei der von mir benötigten Länge war das ein Unterschied von 75 Euro. Gruß, Ludwig.
Habe es mir gerade angesehen: Mein Rat - nimm die 75 Euro in die Hand und mach es mit den APA102.
Ludwig B. schrieb: > Alle Lösungen, die ich hier gefunden habe, bezogen sich rein auf > Software oder Hardware im µC. Neu erfundene Lösungen, haben gegenüber bestehenden nur Nachteile. Das Optimum ist erreicht. Nutze eine dieser gefunden Lösungen. Oder mach es, wie Axel R. bereits schrieb: APA102. Den APA102 kannte ich bis eben noch nicht. @cpldcpu: Danke für den Blog-Post!
Ludwig B. schrieb: > Nun meine Frage: Haltet ihr diese Variante der Ansteuerung für sinnvoll? > Oder habe ich etwas übersehen? LPD6803 hat auch SPI, geht locker bis 25MHz.
Axel R. schrieb: > Habe es mir gerade angesehen: > Mein Rat - nimm die 75 Euro in die Hand und mach es mit den APA102. Marc Vesely schrieb: > LPD6803 hat auch SPI, geht locker bis 25MHz. Torsten C. schrieb: > Neu erfundene Lösungen, haben gegenüber bestehenden nur Nachteile. Das > Optimum ist erreicht. Nutze eine dieser gefunden Lösungen. Hallo, ich selbst bin Student und möchte ein Projekt haben, bei dem ich auch etwas lerne und nicht einfach nur ne Clock und ne Data Line passend zu einander toggle. Mir geht es nicht (nur) um die 75 Euro, da ich Nachrichtentechnik (also auch viel Digital und HF-Technik) studiere (2. Semester), kann ich mir so evtl auch etwas meines Studieninhaltes "vorwegarbeiten" -> Vorteil. Also so lange mein Projekt (wenn auch mit viel Aufwand) umsetzbar ist, wäre ich über jede Hilfe und jeden Ratschlag dankbar! Gruß, Ludwig.
:
Bearbeitet durch User
Dann benutze mal die Forum Suchfunktion um zu wissen, wie man die Leds mit HW SPI betrieben werden.
Ludwig B. schrieb: > Also so lange mein Projekt (wenn auch mit viel Aufwand) umsetzbar ist, > wäre ich über jede Hilfe und jeden Ratschlag dankbar! Verstehe. Ich weiss nicht, ob es den Anderen auch so geht, aber ich habe keinen Spass daran, das Rad neu zu erfinden. > '8 Bit parallel -> seriell Shiftregister' Genau das ist in fast jedem µC schon drin und nennt sich SPI oder UART. Ich habe das WS2812-Problem u.A. per UART + DMA gelöst: Hardware: Ein Inverter, weil Start-Bit = 0 und Stop-Bit = 1. Alles andere kann man machen, um zu lernen, wie man das Problem normalerweise nicht lösen würde.
Dann musst Du die 3x8Bit latchen, einen Referenztakt erzeugen und die Daten rausschieben und mit XOR verknüpfen. EDIT mit dem Takt verknüpfen
einer schrieb: > Dann benutze mal die Forum Suchfunktion um zu wissen, wie man die Leds > mit > HW SPI betrieben werden. Hallo, inwiefern bringt mich HW SPI denn weiter? Wie das Timing und die Codes funktionieren ist mir bewusst, ich würde gerne einen Controller mit einem parallelen Input und dem Output für die Strips herstellen, was hat das denn mit einem im µC implementierten Protokoll zu tun? Gruß, Ludwig.
Ludwig B. schrieb: > Also so lange mein Projekt (wenn auch mit viel Aufwand) umsetzbar ist, > wäre ich über jede Hilfe und jeden Ratschlag dankbar! Mein Ratschlag ist: Nicht immer das Rad neu erfinden. Wenn es etwas schon gibt, ist billig und funktioniert, wozu dann das Ganze ? WS2812 kann maximal 800KHz, wenn du schon einen Treiber dafur brauchst, nimm doch einen 328p auf 16MHz. Und die Daten kann der ARM in Blocks per DMA rausschicken, nix "alle 10us..." und so.
:
Bearbeitet durch User
Marc Vesely schrieb: > Nicht immer das Rad neu erfinden. Das war fast gleichzeitig! :-) Wir sind uns einig. > Wenn es etwas schon gibt, ist billig und funktioniert, wozu dann das > Ganze ? Noch ein Hinweis: Die Variante mit Timern statt UART gibt es auch noch, kostet aber bei DMA mehr Speicher. Dafür ist die variante ohne Inverter-Hardware.
:
Bearbeitet durch User
Axel R. schrieb: > Dann musst Du die 3x8Bit latchen, einen Referenztakt erzeugen und die > Daten rausschieben und mit XOR verknüpfen. Genau das war meine Idee! Torsten C. schrieb: > Ludwig B. schrieb: >> Also so lange mein Projekt (wenn auch mit viel Aufwand) umsetzbar ist, >> wäre ich über jede Hilfe und jeden Ratschlag dankbar! > > Verstehe. Ich weiss nicht, ob es den Anderen auch so geht, aber ich habe > keinen Spass daran, das Rad neu zu erfinden. Ich hingegen schon. Man kann eigentlich immer etwas optimieren. Und selbst wenn nicht, lernt man dabei etwas. >> '8 Bit parallel -> seriell Shiftregister' > > Genau das ist in fast jedem µC schon drin und nennt sich SPI oder UART. > > Ich habe das WS2812-Problem u.A. per UART + DMA gelöst: Die Lösung fand ich sehr elegant! Auch ich hatte einen Ansatz mit einem Timer und DMA Controller, möchte mich aber nun der Hardware zuwenden, sodass man später auch mit 1MHz und ohne DMA und der gleichen einen solchen Strip ansteuern kann.
Ludwig B. schrieb: > Ansatz mit einem Timer und DMA Controller Die Timer-Variante kommt ohne weitere "Hardware" (Inverter) aus, kostet aber einen größeren DMA-Block als die UART-Variante. Ludwig B. schrieb: > Man kann eigentlich immer etwas optimieren. Wenn sich schon rund 5 Jahre lang alle Experten auf dieser Welt die Köpfe zerbrochen haben? Als ich sehr jung war, habe ich auch mal so gedacht. Einzig sinnvoller Ansatzpunkt: "Alte Zöpfe abschneiden.". Aber so alt ist die WS2812 noch nicht.
:
Bearbeitet durch User
Ludwig B. schrieb: > Ich hingegen schon. Man kann eigentlich immer etwas optimieren. Und > selbst wenn nicht, lernt man dabei etwas. Das mit lernen ist OK, aber mit optimieren bestimmt nicht. Ludwig B. schrieb: > Auch ich hatte einen Ansatz mit einem Timer und DMA Controller, möchte > mich aber nun der Hardware zuwenden, sodass man später auch mit 1MHz und > ohne DMA und der gleichen einen solchen Strip ansteuern kann. "ohne DMA und dergleichen" ? Das ist alles schon vorhanden, wo ist da "dergleichen" ? Im Gegensatz dazu deine "Losung" mit viel (unnotiger) Hardware. Ich steuere meine WS2812 (2 x 4m) mit ATTiny85 und selbst der ist mehr als genug.
Torsten C. schrieb: > Als ich sehr jung war, habe ich auch mal so > gedacht. Einzig sinnvoller Ansatzpunkt: "Alte Zöpfe abschneiden.". Aber > so alt ist die WS2812 noch nicht. Wenn ich auf die letzten Jahre und all meine Projekte und Basteleien im Bereich der ET und IT zurückschaue, habe ich NIE etwas neu erfunden oder verbessert. Ich habe immer an bestehenden und schon gelösten Problemen geforscht und mir selber eine Lösung einfallen lassen. Diese war im Endeffekt um ein vielfaches Teurer als die schon bestehende Lösung. Rausgeschmissenes Geld? Rausgeschmissene Zeit? Aus meiner Sicht nicht. Das Wissen und die Erfahrungen, die ich dadurch gemacht habe, sind -mir selbst zumindest- viel mehr wert.
Ludwig B. schrieb: > später auch mit 1MHz und ohne DMA Welche 1MHz? CPU-Takt einer 20 Jahre alten Z80? Ludwig B. schrieb: > Versuch, einen rein hardwareseitigen Treiber dafür zu bauen Das hatte ich auch mal überlegt, mit einem CPLD: Beitrag "ARM und WS2812 LEDs mit DMA und EPM3032A" Aber wozu? Es macht keinen Sinn!
:
Bearbeitet durch User
Marc Vesely schrieb: > Ludwig B. schrieb: >> Ich hingegen schon. Man kann eigentlich immer etwas optimieren. Und >> selbst wenn nicht, lernt man dabei etwas. > > Das mit lernen ist OK, aber mit optimieren bestimmt nicht. Ich wollte mit meiner Aussage niemanden angreifen oder behaupten, dass ich als 'Amateur' "so kurz mal" alles besser machen könnte. Aber ist es so schlimm, wenn man an einem Thema weiterforschen möchte? Zudem kann es ja sein, dass für spezielle Zwecke ein anderer Ansatz optimaler ist. Wie dem auch sei, ich entschuldige mich, dass ich etwas verbessern wollte...
>Aus meiner Sicht nicht. Das Wissen und die Erfahrungen, die ich dadurch >gemacht habe, sind -mir selbst zumindest- viel mehr wert. Dann mach halt und freu dich wenn es geht. Erwarte aber keine Hilfe oder Beifall wenn es bereits elegantere Lösungen gibt. Warum sollte jemand Zeit für dich verschwenden für eine möglichst umständliche Lösung mit einem TTL Grab?
Ludwig B. schrieb: > Wie dem auch sei, ich entschuldige mich, dass ich etwas verbessern > wollte... Nicht gleich beleidigt sein, war nicht bose gemeint... Ich sagte ja, dass es mit lernen OK ist. Aber was kann man da gross verbessern wenn der WS2812 max. 800KHz kann ? Da langweilt sich ein ARM zu Tode. EDIT: Was ich sagen wollte: 24bit * 1.25us = 30us 100Hz Refresh = 10ms 10ms / 30us = 333 LEDs Deswegen werden die WS2812 in Modulen a 256 LEDs zusammengebaut. Anders macht es keinen Sinn, irgendeine animation uberhaupt zu versuchen.
:
Bearbeitet durch User
holger schrieb: > Dann mach halt und freu dich wenn es geht. > Erwarte aber keine Hilfe oder Beifall wenn es bereits elegantere > Lösungen gibt. Warum sollte jemand Zeit für dich verschwenden für eine > möglichst umständliche Lösung mit einem TTL Grab? Beifall erwarte ich gewiss keinen, wieso sollte ich auch? Die Hilfe, die ich in diesem Beitrag bekommen habe, ist aus meiner Sicht eine sehr große. Auch wenn es hauptsächlich Ratschläge waren, es nicht so zu machen, wie ich es vorhabe, fand ich es hilfreich. Die Aussage, niemand wolle Zeit für mich "verschwenden" finde ich in einem Forum allerdings unangebracht. Marc Vesely schrieb: > Nicht gleich beleidigt sein, war nicht bose gemeint... Keine Angst, das bin ich gewiss nicht! :) Ich bin dankbar für die Meinungen!
Marc Vesely schrieb: > EDIT: > > Was ich sagen wollte: > 24bit * 1.25us = 30us > 100Hz Refresh = 10ms > 10ms / 30us = 333 LEDs > > Deswegen werden die WS2812 in Modulen a 256 LEDs zusammengebaut. > Anders macht es keinen Sinn, irgendeine animation uberhaupt zu > versuchen. Ich werde - bedingt durch die Installation - 20 Strips mit je 40 LEDs parallel betreiben, ich könnte also deutlich schneller aktualisieren, alles über 100Hz macht für mich aber keinen Sinn. Zudem werden die LEDs hinter diffusen Röhren verbaut, sodass man die einzelnen Pixel und somit auch fast alle Animationen abgesehen von Farbverläufen nicht mehr als solche erkennt.
Ludwig B. schrieb: > Die Aussage, niemand wolle Zeit für mich "verschwenden" finde ich in > einem Forum allerdings unangebracht. Vielleicht bin ich gar nicht gemeint, trotzdem: Das Forum hat mehr davon, wenn Du die vorhandenen 99%-Lösungen optimierst, als wenn Du versuchst, neue 30%-Lösungen zu diskutieren. Ludwig B. schrieb: > später auch mit 1MHz Hat jemand die 1MHz verstanden?
:
Bearbeitet durch User
Torsten C. schrieb: > Vielleicht bin ich gar nicht gemeint, trotzdem: Das Forum hat mehr > davon, wenn Du die vorhandenen 99%-Lösungen optimierst, als wenn Du > versuchst, neue 30%-Lösungen zu diskutieren. Bezog sich auf den Kommentar: holger schrieb: > Erwarte aber keine Hilfe oder Beifall wenn es bereits elegantere > Lösungen gibt. Warum sollte jemand Zeit für dich verschwenden für eine > möglichst umständliche Lösung mit einem TTL Grab? Torsten C. schrieb: > Hat jemand die 1MHz verstanden? Ich wollte damit zum Ausdruck bringen, dass ich gerne unabhängig vom Prozessortakt und unabhängig von Hardware-Komponenten des µC die LEDs betreiben würde. Mir ist klar, dass jeder zwiete µC auf dem Markt UART und DMA besitzt, womit deine Umsetzung einsatzbereit wäre und, dass die LEDs mit höheren Taktraten und/oder Inline-ASM auch per Bitbanging betrieben werden können. Aber wenn ein Anfänger damit erstmal nicht umgehen möchte, ist die Lösung ohne jegliche Hardware-Komponenten eventuell eine Hilfe.
Ludwig B. schrieb: > Zudem werden die LEDs hinter diffusen Röhren verbaut, sodass man die > einzelnen Pixel und somit auch fast alle Animationen abgesehen von > Farbverläufen nicht mehr als solche erkennt. Ja, ich dachte an Video. Wie gesagt, ich habe 2 LED-Stripes je 4m (eigentlich 4m + 3m) und die schafft der Tiny85 ohne Probleme. Naturlich nicht mit 16 Mio Farben, aber 256 Farben sind eigentlich mehr als genug, vor allem, da ich diese dann auch nach einem bestimmten Schema verandern kann, die der Tiny von der SD liest. Mein Punkt ist: Lieber das, was man hat, maximal ausnutzen als unnotig versuchen, etwas zu verbessern, was schon an ihre Grenzen angelangt ist. WS2812 wird nicht schneller als 800KHz, also lieber versuchen diese 800KHz auszureizen, als auf der anderen Seite (beim ARM) etwas zu verbessern, was gar keiner Verbesserung bedarf.
Marc Vesely schrieb: > Mein Punkt ist: > Lieber das, was man hat, maximal ausnutzen als unnotig versuchen, etwas > zu verbessern, was schon an ihre Grenzen angelangt ist. > WS2812 wird nicht schneller als 800KHz, also lieber versuchen diese > 800KHz auszureizen, als auf der anderen Seite (beim ARM) etwas zu > verbessern, was gar keiner Verbesserung bedarf. Ich kann diesen Punkt voll und ganz verstehen! Mein Szenario war nur: Ludwig B. schrieb: > Mir ist klar, dass jeder zwiete µC auf dem Markt UART und DMA besitzt, > womit deine Umsetzung einsatzbereit wäre und, dass die LEDs mit höheren > Taktraten und/oder Inline-ASM auch per Bitbanging betrieben werden > können. > > Aber wenn ein Anfänger damit erstmal nicht umgehen möchte, ist die > Lösung ohne jegliche Hardware-Komponenten eventuell eine Hilfe. Für das Grundkonzept werde ich 2,3 Gatter und ein Schieberegister verbraten, kein allzu großer Verlust. Danach kehre ich vielleicht zur Softwarelösung zurück, oder ich bleib bei meiner Version... Bis dahin auf jeden Fall vielen Dank für die Ratschläge und die Zeit, die Sie/ihr sich/euch für mich genommen habt!
Ludwig B. schrieb: > Für das Grundkonzept werde ich 2,3 Gatter und ein Schieberegister > verbraten Für das gleiche Geld bekommst Du einen kompletten µC! Ludwig B. schrieb: > Bis dahin auf jeden Fall vielen Dank für die Ratschläge und die Zeit, > die Sie/ihr sich/euch für mich genommen habt! Bitte, bis hierhin gern geschehen. Man nennt das auch "Beratungs-Resistent". Für mich ist hier Schluss ⇒ Thread nicht mehr beobachten. Ludwig B. schrieb: > Torsten C. schrieb: >> ... > Bezog sich auf den Kommentar: ... Da weißt Du wohl mehr als ich. Oder auch nicht? Falls darauf noch eine Antwort kommt, werde ich sie nicht mehr wahrnehmen. Falls es wichtig ist ➜ PN
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.