Hallo zusammen,
viel Zeit ist vergangen, aber ich habe es endlich geschafft den MY9268 per FPGA anzusteuern.
Ein WIZ811MJ Modul empfängt ArtNet Pakete vom PC, der Spartan3E FPGA auf dem Nexys Board macht die Verwaltung (ArtPollReply, etc) und das Timing für den MY9268.
Neni hatte es im Dezember schon angesprochen, ein "Problem" sind die unterschiedlichen Wiederholraten für ArtNet Pakete und Greyscale-Zyklen des MY9268, die nicht unbedingt ganzzahlige vielfache voneinander sind.
Ich habe den 50MHz Takt des FPGA auf 12,5MHz geteilt, und damit dauert ein Greyscale-Zyklus für den MY9268 etwa 23ms.
In Madrix kann man die Widerholrate für die Ausgabe auf die Millisekunde genau einstellen (minus das, was Switche, Netwerkkarte und Betriebssystem, etc damit machen)
Ausserdem braucht es eine kleine Pause im Greyscale Zyklus wenn die P-FETs die nächste Zeile anschalten, und mit dieser Pause kann man nochmal an der Gesamtzeit feinregeln.
Möglichkeit 1 nun: Es wird immer ein Greyscale Zyklus für jedes Paket ausgegeben. Im Idealfall kommt das neue Paket exakt am Ende der Greyscale-Ausgabe. Dauert es länger, sind die LEDs mehr oder weniger lang dunkel, und dauert es kürzer muss der aktuelle Zyklus abgebrochen werden. Allerdings kummulieren sich dabei auch keine Differenzen.
Möglichkeit 2: Die Greyscalezyklen werden kontinuierlich ausgegeben wobei die Daten kontinuierlich aus einem Dual-Port RAM gelesen werden. Dieser RAM wird asynchron befüllt. Damit tauchen allerdings "Mischbilder" auf, die vor allem bei strobo-Effekten störende gelbe oder rote Pixel erzeugen, wenn eine RGB-Gruppe "zerrissen" wird.
Möglichkeit 3: Der von Neni angesprochene Verzicht auf Teile der Auflösung und Abbruch des Greyscale-Zyklus nach n subframes, dies aber ~10 mal pro empfangenem Paket... Ich sehe hier aber im Moment keinen Vorteil gegenüber der ersten Lösung, wenn die Greyscale-Zeit minimal länger ist, als die Zeit zwischen 2 frames, und jedesmal ein (konstant langer) Teil des letzten Subframes abgeschnitten wird?
Weiterhin schalten die von mir im Test verwendeten P-FETs (IRLML6401) nicht schnell genug wieder aus, weswegen sich das Bild einer Scanzeile leicht auf die restlichen "verschmiert". Ich habe meine Hausaufgaben in Sachen MOSFET-Treiber noch nicht gemacht, aber vermutlich braucht es mehr als nur einen FPGA-Pin hinter einem 200Ohm Serienwiderstand um das Gate des FET zu treiben? Kann mir jemand eine bestimmte Lösung empfehlen, um den FET innerhalb von <1us zu sperren, oder ist das unrealistisch, und ich muss zwischen den einzelnen Scanzeilen deutlich mehr Zeit einplanen, um die Zeilen umzuschalten?
Aktuell ist das Sperrverhalten eher exponentiell, mit einer Zeitkonstanten im Millisekunden-Bereich!!!
Hier jedenfalls ein kleines Video, zu dem doch recht beeindruckenden Chip, der im Beispiel 40 Stück 3528 RGB LEDs im 5mm Raster bei gut 40Hz Widerholrate treibt.
Das nächste Ziel ist ein nahtloses Platinenlayout, was aber nicht einfach ist, denn die Zeilen/spaltenstruktur auf den beiden Kupferlayern übersäht die Platine mit Durchkontaktierungen, was es schwer macht auf der Rückseite den MY9268 und die Treiber-FETs unterzubringen... Evtl. passt aber irgendein SMD-Steckverbinder zwischen die ganzen Vias, und eine zweite Huckepack-Platine trägt dann den Rest und auch die Befestigungsmöglichkeiten? Hier klappt sowas ja auch...
Edit: vergessen: hier die VHDL Sourcefiles dazu. Der SPI-Master ist von Lothar Miller entliehen.
MY9268.zip
www.youtube.com/watch?v=rSllEykR15o
Viele Grüße
Andre