Hallo,
ich arbeite gerade an einem Matrixskript, welches neben FlipDot eben auch LED enthält. Per setvar kann man zwischen 19x126, 19x112 und 16x112 wechseln, aber bei 16x112 LED habe ich das Problem, dass auf der ST1 zu genau drei Zeilen zu wenig übertragen werden.
Ich habs hier zur Verdeutlichung mal eingefärbt.
Ich hab mich skriptmäßig an anderen LED Matrizen orientiert und das funktioniert auch super bei den 19-zeiligen Anzeigen.
Bei 16x112 sieht der Bereich entsprechend so aus:
'Wenn 16x112
(L.L.Matrix_Res) 2 =
{if}
(L.L.Matrix_Modul) 0 =
{if}
0 s0
' Linie: 448 Pixel -> 111000000 -> 6, 7, 8
(M.L.Matrix_PrintBitmapPixel256)
(M.L.Matrix_PrintBitmapPixel128)
(M.L.Matrix_PrintBitmapPixel64)
' Ziel: 1344 -> 10101011000 -> 3, 4, 6, 8, 10
(M.L.Matrix_PrintBitmapPixel1024)
(M.L.Matrix_PrintBitmapPixel256)
(M.L.Matrix_PrintBitmapPixel64)
(M.L.Matrix_PrintBitmapPixel16)
(M.L.Matrix_PrintBitmapPixel8)
{endif}
(L.L.Matrix_Modul) 1 =
{if}
1 s0
' Linie: 448 Pixel -> 111000000 -> 6, 7, 8
(M.L.Matrix_PrintBitmapPixel256)
(M.L.Matrix_PrintBitmapPixel128)
(M.L.Matrix_PrintBitmapPixel64)
' Seite: 1792 -> 11100000000 -> 8, 9, 10
(M.L.Matrix_PrintBitmapPixel1024)
(M.L.Matrix_PrintBitmapPixel512)
(M.L.Matrix_PrintBitmapPixel256)
{endif}
{endif}
Alles anzeigen
Also hier wird erst geguckt, ob die Auflösung 16x112 (hier 2) ist und dann die normale Prozedur, dass ich vorne die Auflösungen in binär umwandle, die Stellen der 1 rückwärts und nullbasiert zähle, das dann 2^X nehme und dann meinen Makroaufruf reinmache. Dann dasselbe nochmal für Seite, bzw. Linie heck. Ich hab die ganzen Zahlen nochmals überprüft und da hat sich kein Fehler eingeschlichen.
Ich glaube, dass die Problematik beim tatsächlichen Übertragen liegt.
'X und Y berechnen:
'l0: Ebene (vorne/Seite)
'l1: X
'l2: Y
(L.L.Matrix_RefreshCursor) (L.L.Matrix_HxW) % (L.L.Matrix_Height) / trunc s1
(L.L.Matrix_RefreshCursor) (L.L.Matrix_HxW) % (L.L.Matrix_Height) % s2
Wenn man da mal für HxW und Height konkrete Werte einsetzt, verhält sich das natürlich alles etwas anders, weil die Ergebnisse dieser Berechnungen in den Registerplätzen 1 und 2 gespeichert werden, die dann beim STDrawRect aufgerufen werden.
'Pixel zeichnen:
1
l1 (L.L.Matrix_PixelFactor) * s4
l2 l0 (L.L.Matrix_Height) * + (L.L.Matrix_PixelFactor) * s5
l4 (L.L.Matrix_PixelFactor) + 2 -
l5 (L.L.Matrix_PixelFactor) + 2 -
(M.V.STDrawRect)
Der PixelFactor ist 8.
Ich hoffe, jemand kennt sich damit gut aus und kann mir helfen
Viele Grüße
Moin,
also das Problem hat sich jetzt gelöst.
Der Fehler bestand beim Auslesen des aktuellen Pixels.
0 = Texturindex
l1 = X
l2 = Y
l0 = Ebene (vorne/seite, hier Seite, also 1)
Die Y-Koordinate wird ja wiefolgt berechnet:
l2 + (l0*19)
Mit eingesetzten Beispielwerten:
4 + (1*19)
Also 4+19, weil l0=1, wenn l0=0 (Front), dann wäre es ja +0, also würde er oben bleiben, und nicht um 19 Pixel nach unten verschieben.
Weil ich jetzt hier eine 16-zeilige Anzeige habe und keine 19-zeilige, muss dort statt l0*19 eben l0*22 stehen, damit er schon drei Zeilen weiter unten anfängt, den Pixel auszulesen. Würde er weiter oben anfangen, macht er die letzten drei Zeilen nicht mit, weil ich dafür nicht genug Makroaufrufe pro Frame habe.