Alternative zu ws2801 lpd6803 tm.... u.s.w gesucht!

  • Dann schau' doch noch mal in der Umsortier-Routine nach, evtl. ist da was faul... oder ändere die mal testweise so, dass sie den gesamten Ausgabe-Puffer mit z.B. Rot füllt, ob dann alle LEDs rot werden - um festzustellen, ob evtl. an der Ausgaberoutine was faul ist, oder beim DMX-Empfang...


    ich kann das hier halt leider schlecht nachvollziehen, was da passiert, da kein TLC5947 da... evtl. ist ja auch DMX+ und DMX- vertauscht, das führt auch oft dazu, dass er zwar *irgendwas* empfängt, aber eben keine richtigen Daten, also dann flackern und falsche Werte...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ach, noch was zu diesen Mehrfachposts - bei diesem zeitlichen Abstand ist das OK, bzw. besser so, sonst können Infos verloren gehen - siehe dazu auch gerade so nen Fall hier, die letzten beiden Absätze...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hallo,


    mittlerweile kann ich die TLC's über DMX kontrollieren. Allerdings funktionieren sie halt noch im 8bit-Modus, da keine Gamma-Korrektur u.s.w vorhanden ist. Und das war ja nicht der Sinn der Sache, sonst haette man einen 2801 oder sogar nen mega nehmen können für die 8 RGB leds mit 8 bit. Werde aber versuchen demnaechst eine zu implementieren.


    Noch wichtiger für mich ist jetzt die Frage, ob man den 5947 multiplexen könnte. So dass man dann 24 RGB leds mit einem TLC rausbekommen kann. Somit würden die Kosten pro Pixel ziemlich runtergehen. Da brauechte ich unbedingt einen Code-Beispiel wie man Multiplexen mit ASM realisieren könnte. Hab schon einige Beispiele mit C recherchiert. Leider ist C für mich ein grosses Raetsel. Wo ich jetzt grad in ASM drin bin, will ich natürlich nicht gleich die Sprache wechseln.


    Was vielleicht probleme machen könnte, waer dass der 5947 keinen PWM greyscale Eingang hat. Der 5940 hat naemlich extra so n Eingang, und viele im Web haben das ja auch benutzt um die 5940's zu multpilexen.


    Kann mir da jemand weiterhelfen?

  • Hallo leddie,


    das Problem ist, dass du die GS-Clock bzw. den PWM-Zyklus beim TLC5947 nicht mit der Zeilenumschaltung beim Multiplexing synchronisieren kannst. Der interne Oszi des TLC5947 ist ein RC-Oszi, d.h. er wird nie allzu genau bei den angegebenen 4 MHz liegen. Wenn du nun mit XLAT und BLANK (vor einem Zeilenwechsel) die PWM abbrichst, wird das immer mitten während eines laufenden PWM-Zyklus geschehen, da eben keine Synchronisation möglich ist.
    Wenn die PWM-Frequenz nun so hoch wäre, dass pro Zeile sehr viele komplette Zyklen durchlaufen werden, würde ein einzelner unterbrochener Zyklus nicht allzu stark ins Gewicht fallen. Bei einer GS-Clock von ca. 4 MHz und einer 12 Bit PWM ist die PWM-Frequenz aber 'lediglich' ca. 977 Hz. Bei drei Zeilen (3 x 8 = 24 RGB-LEDs) musst du eine Zeilenumschaltfrequenz von mindestens 300 Hz haben, damit die Bildwiederholfrequenz >= 100 Hz ist (das absolute minimum). D.h. du hättest maximal drei volle PWM-Zyklen pro Zeile. Wenn einer davon dann nicht vollständig ist bzw. der vierte bereits angefangen hat beim Abbruch, kann das durchaus zu deutlich sichtbaren Artefakten in der Darstellung führen.


    Eine Möglichkeit, das Problem etwas zu entschärfen, wäre, nicht die vollen 12 Bit für die PWM zu nutzen, sondern nur die unteren 11 Bit (das oberste Bit MUSS dann immer 0 sein). Dann kannst du eine Zeilenanzeigezeit wählen, welche genügend oberhalb der theoretischen Zeit für die 11 Bit (2048 GS-Clocks) liegt, dass sie sich über der maximalen Dauer (bei laut Datenbalatt niedrigster Clock-Frequenz) inerhalb der Variationsbreite des RC-Oszis und deutlich unterhalb der Dauer für 12 Bit befindet. Da so nach den 2048 GS-Clocks alle Ausgänge abgeschaltet werden und für die Dauer der Zeile abgeschaltet bleiben, bleibt die Zeilen-Anzeige linear zum PWM-Wert. Die Variationbreite zwischen dem Ende der 2048 GS-Clocks und der erfolgten Zeilenumschaltung beeinflusst dann lediglich die Gesamthelligkeit leicht.


    Gruss
    Neni

  • Wie immer super erklärt, Neni :thumbup:


    und nicht nur aus dem Grund würde ich das mit dem Multiplexen sein lassen - ist halt auch irgendwie "doof", jetzt hat man schon ne schön hohe PWM-Frequenz, und dann per Multiplexen wieder auf 100 Hz-Geflimmer runter drücken, ist ja auch Schmarrn...


    ausserdem muss man für die selbe Helligkeit dann den Strom erhöhen, und der TLC wird schon bei 20 mA an allen Ausgängen recht warm...


    dafür nimmt man ja eben solche LED-Treiber, dass man sich den Aufwand mit Multiplexen etc. sparen kann - ca. 3 Euro pro 8 RGB-LEDs finde ich nun auch nicht soo teuer, dafür dass es dann ne ordentliche Lösung mit ca. 1 kHz PWM und 12 Bit Auflösung ist...


    Eddie, Du musst das ja deswegen nicht *insgesamt* 3 mal bauen, ein µC reicht, Du kannst mit der SW auch mehrere TLC5947 ansteuern, diese einfach lt. Datenblatt kaskadieren, und dann die Pixel-Anzahl in der Ausgaberoutine entsprechend erhöhen...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Erstmal Vielen dank für die Antworten.

    das Problem ist, dass du die GS-Clock bzw. den PWM-Zyklus beim TLC5947 nicht mit der Zeilenumschaltung beim Multiplexing synchronisieren kannst.

    Genau daran hatte ich meine Zweifel. Danke Neni für die hervorragende Erklaerung!


    und dann per Multiplexen wieder auf 100 Hz-Geflimmer runter drücken,

    Naja, mit 10 oder 11 Bit sollte das ja nicht unbedingt auf 100Hz runterkommen oder? Wenn ja, hat es natürlich kein Sinn.


    ausserdem muss man für die selbe Helligkeit dann den Strom erhöhen, und der TLC wird schon bei 20 mA an allen Ausgängen recht warm...

    Ja das mit dem Strom erhöhen kann mann bei den TLC echt vergessen. Gebe im moment auch max. 3.5V an die Teile. Sobald man den Ground-Pad an die Platine lötet kann man bissl mehr so bis 5V geben. Aber die löterei für Bastler ist auch nicht so einfach. Dann lieber 3.5V...

    Eddie, Du musst das ja deswegen nicht *insgesamt* 3 mal bauen, ein µC reicht, Du kannst mit der SW auch mehrere TLC5947 ansteuern, diese einfach lt. Datenblatt kaskadieren, und dann die Pixel-Anzahl in der Ausgaberoutine entsprechend erhöhen...

    Das weiss ich natürlich schon, sonst haette es ja keinen Sinn gegeben. Alle acht pixel nen uC zu benutzen waer jetzt für mein Budget überhaupt nicht gut. :)


    Meine gedanken werden inzwischen auch klarer. Eine "Eiwomisa" mit den led treibern kann mann wohl nicht nur mit einem modell bekommen. Ich denke für ne günstige 8 bit geschichte die jetzt nicht eine Matrix sein soll, müsste man die ws2801 nehmen. Für 12 bit dann ne 5947, und für ne Matrix halt dann die Matrix Platine von Pepe mit den 5940 drauf.


    Jetzt bitte ich euch noch um einen Rat, wie ich vorangehen soll, um die vollen 12 Bits von der 5947 auszunutzen. Im moment funktioniert die SW ja mit Bitshifting, also 8bit auf 12 bit geshiftet ;) Reicht da jetzt ein Gamma Lookup table damit die 12bit rausgeben? Oder muss man da noch was anderes im Code machen?

  • Erstmal vielen Dank für das Lob Pesi und leddie :) .


    Naja, mit 10 oder 11 Bit sollte das ja nicht unbedingt auf 100Hz runterkommen oder? Wenn ja, hat es natürlich kein Sinn.


    Nein, das nicht. Aber du solltest bedenken, dass bei mehr Zeilen auch die Bildwiederholfrequenz wiederum sinkt. Und bei 'nur' drei Zeilen würde ich kein Multiplexing einsetzen, denn die Kosten für zwei zusätzliche TLC5947 sind wirklich nicht so hoch, dass sich Multiplexing da noch lohnen würde. Erst wenn du mehrere 64 RGB-LED-Module ( 8x8 ) planen würdest, würde ich mir Multiplexing überlegen, aber da würde ich dann ganz andere Treiber als den TLC5947 nehmen.


    Gruss
    Neni

  • Erst wenn du mehrere 64 RGB-LED-Module ( 8x8 ) planen würdest, würde ich mir Multiplexing überlegen, aber da würde ich dann ganz andere Treiber als den TLC5947 nehmen.

    Selbstverstaendlich denke ich an mehrere (20-30) 64 RGB-Modulen. Ich versuche ja nur die kosten pro pixel zu senken. Ist auf jeden Fall ein Unterschied, wenn ich für ein Pixel nun 0.40€ oder 0.05€ bezahlen muss, wenn ich einen Video Led Display machn will :)


    Welchen Treiber würdest du denn fürs Multiplexen Vorschlagen, damit die auch ungefaehr im 12Bit Rang mitspielen? (Im Multiplex Betrieb)

  • Naja, mit 10 oder 11 Bit sollte das ja nicht unbedingt auf 100Hz runterkommen oder?

    Hat mit der Auflösung nix zu tun - der TLC macht ja immer seine12 Bit mit ca. 1 kHz, egal was Du ihm fütterst...


    das Verhältnis bleibt also, wenn Du die 1.000 Hz durch 3 Reihen teilst, und dann noch 3 TLC-PWM-Zyklen pro Multiplex-Schritt haben willst (finde ich eh' schon grenzwertig), dann kommen halt 100 Hz. Wiederholfrequenz für die ganze Matrix raus - egal ob Du 11 Bit oder 2 Bit *nutzt*


    kann ja jeder machen wie er will, aber wenn ich schon 12 Bit bei 1 kHz hätte, würde ich die nicht auf 11 Bit "kastrieren" (damit's überhaupt noch läuft) und mit 100 Hz-Geflimmer leben wollen - aber Geschmäcker sind halt verschieden... ;)


    Reicht da jetzt ein Gamma Lookup table damit die 12bit rausgeben?

    genau - Du nutzt ja dann nicht alle 4.096 Stufen aus, sondern nur 256 Werte aus dieser Menge, die aber eben logarithmisch abgestuft sind... einfach ne Tabelle mit 256 12-Bit-Werten, in der Du dann nachschaust...


    Ist auf jeden Fall ein Unterschied, wenn ich für ein Pixel nun 0.40? oder 0.05? bezahlen muss

    Was für LEDs benutzt Du denn da, dass die unter 5 Cent/Stück kosten...?


    Wie auch immer, ne 1.920-Pixel-Matrix mit 12 Bit ist halt nicht für dreimarkfuffzig zu haben, ich habe mein Matrix-Projekt mit TLC5947 deswegen ja auch aufgegeben... :( - mir reichen dann die 8 Bit auch für alles, was man so üblicherweise an Animationen macht, und wirklich Filme schauen o.ä. ist mit 1.920 Pixel (oder z.B. 384 x 256 bei 24 Modulen 6x4) ja auch kein Genuss.... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Was für LEDs benutzt Du denn da, dass die unter 5 Cent/Stück kosten...?

    Hatte die leds erstmal nicht mitgerechnet. Pro led würde es dann 0.25 € cent extra kosten. Immerhin ist da noch ein unvermeidliches Preisunterschied: 0.65 ohne multiplex & 0.37 mit multiplex (inkl. smd5050 RGB Leds) Also die haelfte! Bei 5000 Pixel ist der Unterschied schon fast 2000 €! Nur allein wegen Multiplex...

    Wie auch immer, ne 1.920-Pixel-Matrix mit 12 Bit ist halt nicht für dreimarkfuffzig zu haben

    Das ist mir schon klar. :) Auf die idee bin ich aber erst gekommen, nachdem ich Pepe's Matrix Board gesehen habe. Schliesslich multiplext er die 5940'er Serie und hat trotzdem 12 Bit! (Wenn das wirklich so ist)


    Übrigens will ich jetzt auf diesem Display dann nicht Avatar oder sowas in HD Qualitaet anschauen :D Ein paar schöne Bilder mit nicht unbedingt hoher auflösung würde mir dabei reichen...

  • Als 24-Kanal-Typen mit 12 Bit PWM kannst du dir ja mal den TLC5951 anschauen. Der sollte so ziemlich alle Anforderungen erfüllen. Allerdings ist seine Strom-Ausgabe bei 40 mA pro Kanal begrenzt. Etwas mehr Power können die 16-Kanaligen 12 - 16 Bit Typen der TLC5940er Serie abliefern. Diese eignen sich aber nicht so nicht so gut für 8x8-RGB-Anordnungen, sondern dann eher für 16x8-RGB, wie sie im Übrigen auch Pepe_1981 verwendet.


    Mein persönlicher Favorit (für meine Zwecke) ist der TLC5971 (12 Kanal, 16 Bit), wie ich schon mal geschrieben habe. Damit plane ich momentan 16x16-RGB-Module (4 TLC5971 pro Modul), wobei ich 'nur' 9 Bit PWM nutze (ergibt sich aus der Art, wie der TLC5971 die PWM erzeugt: Stichwort ES-PWM). Damit mache ich eine 7 Bit auf 9 Bit Gamma-Korrektur mit dem 'alten' Apple Mac Gamma von 1,8. Allerdings sind meine Module für eine komplett andere Anwendung vorgesehen, als das reine Streamen und Anzeigen von RGB-Daten (e.g. Video-Display). Bei mir ist dann auch eine sehr hohe Bildwiederholfrequenz deutlich wichtiger als die Bittiefe der PWM.


    Wie auch immer, your mileage may vary, je nach Anwendung und Zweck.


    PS (auch Pesi:( Die verwendete Bittiefe beim TLC5947 beeinflusst schon die Zeilen- und Bildwiederholfrequenz, eben weil man mittels XLAT und BLANK die PWM zum Bsp. bei verwendeten 11 Bit (untere Bits) schon nach (zeitmässig etwas mehr als) 2048 Clocks rücksetzen und dann schon die nächste Zeile darstellen kann (vorausgesetzt die Daten für die nächste Zeile können in einer Zeilendauer übertragen werden). Der Vorteil dabei ist eben, dass man so den ungenauen Zeitpunkt der automatischen Zykluswiederholung vermeidet bzw. auslässt und relativ sicher einen vollständigen 11-Bit Zyklus (und nur diesen einen; der Rest bis zum Rücksetzen und Zeilenumschaltung ist einfach low bzw. Ausgänge abgeschaltet) pro Zeile hat. Aber wie schon gesagt, bei mehr Zeilen kommt man mit dem TLC5947 und seinen maximalen 4 MHz GS-Clock sowieso schnell an seine Grenzen.

  • ja, hm, irgendwie ging das aus diesem Thread nicht hervor, dass Du dann die TLCs auch noch multiplexen willst - da war zuerst nicht die Rede davon (oder hab' ich's überlesen..?), sonst hätte ich wohl gleich was anderes vorgeschlagen...


    andere Idee: wenn das dann letztlich von der Funktion also das selbe wird wie die Boards von Pepe, warum nimmst Du nicht gleich die...? - dann kann er da insg. mehr fertigen lassen, wodurch es dann für Euch beide unter'm Strich billiger wird... und Du sparst Dir nen Haufen Arbeit, weil Layout und SW ja schon fertig sind...


    Die verwendete Bittiefe beim TLC5947 beeinflusst schon die Zeilen- und Bildwiederholfrequenz, eben weil man mittels XLAT und BLANK die PWM zum Bsp. bei verwendeten 11 Bit (untere Bits) schon nach (zeitmässig etwas mehr als) 2048 Clocks rücksetzen und dann schon die nächste Zeile darstellen kann

    ach, jetzt verstanden, Du meinst also, dass man wirklich genau *einen* PWM-Zyklus pro Zeile nimmt..? - und eben keinen vollständigen, sondern den nach der gewünschten Bittiefe + etwas Toleranz dann jedes Mal "abwürgt"...?


    aber trotzdem, der Aufwand, und dann evtl. trotzdem nur 200 Hz bei 9 Bit, da kann man dann ja gleich wieder was anderes nehmen - oder eben nen besser geeigneten TLC, wenn man denn so einen multiplexen will...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ja, genau so Pesi, Abwürgen ist das richtige Wort dafür ;) . Es ist dann eben nicht mehr so schädlich, dass man das Zyklusende nicht genau treffen kann, wenn man sicherstellen kann, dass man einen vollen Zyklus hat. Beim dann maximal möglichen Wert von 7FF werden die Ausgänge dann sowieso ausgeschaltet. Man hat also einen linearen Zusammenhang für die 11 Bit (0 - 7FF) ohne Fehlzyklus. Die zusätzlichen Clocks bis zum Reset und Zeilenumschaltung wirken sich dann zwar als leichte Reduzierung der Gesamthelligkeit, aber nicht mehr als sonst mögliche Fehldarstellungen (Blitze, Aussetzer etc.) aus.


    EDIT: Ja, so sehe ich das auch Pesi, das hier wäre einfach ne Notlösung, wenn man unbedingt auf den TLC5947 angewiesen ist. Sonst würde ich auch dringend dazu raten auf eben nen anderen TLC (wie die oben erwähnten Typen) auszuweichen.

  • ja, hm, irgendwie ging das aus diesem Thread nicht hervor, dass Du dann die TLCs auch noch multiplexen willst - da war zuerst nicht die Rede davon (oder hab' ich's überlesen..?), sonst hätte ich wohl gleich was anderes vorgeschlagen...

    Nein, habe auch vorher nicht vorgehabt die 5947'er zu multiplexen. Erst nachdem ich Pepe's Boards gesehen habe, habe ich gedacht, dass wir dann die 5947'er vielleicht auch multiplexen können, wenn wir schon dabei sind. Deshalb habe ich ja hier gefragt, ob überhaupt sowas möglich ist. Natürlich würde ich dann wenn es geklappt haette, den Multiplex Betrieb mit den 5947'er bevorzugen, da man ja mehr Kanaele multiplexen kann als die mit den 5940 und wir haetten ja schon DMX Empfang!


    andere Idee: wenn das dann letztlich von der Funktion also das selbe wird wie die Boards von Pepe, warum nimmst Du nicht gleich die...? - dann kann er da insg. mehr fertigen lassen, wodurch es dann für Euch beide unter'm Strich billiger wird... und Du sparst Dir nen Haufen Arbeit, weil Layout und SW ja schon fertig sind...

    Klar, daran habe ich auch schon gedacht, als mir klar wurde dass mit den 5947 das multiplexen nicht so reibungslos klappen würde, wie schon mit den Boards von Pepe. Da ich aber jetzt schon mit Dir seit Wochen wegen der DMX-Routine rumbastle, wollte ich doch gleich die 5947 benutzen. Pepe's HW ist ja ein Arduino und da kenn ich mich überhaupt nicht aus, wie man da jetzt ne DMX-Routine im Arduino Plattform einbindet. Habe mal Pepe vor ein paar Tagen schon angeschrieben, ob er lust haette seine Platinen DMX kompatibel zu machen. Dann waer das natürlich ne Super Lösung. Mann könnte dann seine Platinen einfach direkt mit nem USB-DMX interface oder mit nem Artnet-Knoten füttern.


    EDIT: Ausser der Multiplex Geschichte, denke ich, dass allein die 24 kanaele vom 5947, die wir jetzt endlich über DMX kontrollieren können und bald 12bit haben werden ausreichend für viele Projekte ist. Ich werde die sicherlich da einsetzen wo ich jetzt nicht unbedingt einen Video Display brauche. Effekte mit echtem 12Bit sehen bestimmt auch sehr geil aus, auch wenn die Pixel-Kosten jetzt nicht so günstig sind, aber man vielleicht nicht so engen Pixel-Pitch baucht.