Hallo,
Kokusnuss schrieb:
so hab bzw. so ähnlich hab ichs auch gemacht.^^ Mir gehts ja auch nicht um das strickte Darstellen, sondern um das komplette rein und rausshiften. Ich krieg das nur hin, dass es entweder rein oder rausscrollt.
Sorry mein Fehler.
Da ich gerade für ein paar Tage im Krankenhaus liege, habe ich viel Zeit totzuschlagen.
Ich habe mir nocheinmal ein Programm überlegt wie es gehen könnte.
Das Prinzip des folgenden Programm´s ist, dass das erste Byte aus dem Textarray das die
vorgegebene Spalte enthält berechnet und diese plus die nächsten 3 Byte in ein Array
umkopiert wird. Dieses Array wird durch eine Long-Variable überlagert und dadurch ist
das Schieben aller 4 Byte auf einmal Möglich.
Nun wird nur noch der Spalte entsprechend die Bits in dieser Variable nach Rechts
geschoben, damit die auszugebenden Bits Rechtsbündig stehen. Da nur 24 Bit an die
Hardware ausgegeben werden sollen interessieren die Höherwertigen Bits nicht. Nun
werden die 24 Bit auf die Hardware raus geschoben.
Das passiert nun mit allen 8 Zeilen. Danach kann wieder eine neue Spalte vom
übergeordneten Programm vorgegeben werden.
Es wird natürlich sinnvoll sein, bevor eine neue Spalte vorgegeben wird, dass die aktuelle
Ausgabe für eine gewisse Zeit wiederholt wird, da sonst der Text nur so durch die Matrix
flutscht. Mit der Wiederholrate wird auch die Scrollgeschwindigkeit festgelegt.
Da kann man auch schöne Effekte erzielen.
Zum Beispiel: beim Reinscrollen beschleunigen und zum Ende hin wieder abbremsen.
(Effekt wie beim Handy.)
Dieses Beispiel habe ich auf 20 Byte Breite Bitmuster (Text) eingestellt. Kann jederzeit geändert werden.
Damit aber ein Kompletter Text beginnend mit Leertext und endend mit Leertext,
durch die Matrix durchgeschoben werden kann müssen die ersten 3 Byte jeder Zeile Nullbyte sein.
Zusätzlich werden am Ende des Array´s noch 4 Nullbyte benötigt.
Das ist leider eine Verschwendung von 8 * 3 + 4 Byte. Dafür ist das Programm einfacher.
Somit können bei diesem Beispiel die Spalten 0-160 adressiert werden.
Hier ein Textmuster. (Das ist kein Code.)
Zur besseren Darstellung ist - => 0, # => 1 und 0 muss permanennt 0 sein.
Code:
NrByte 20 6 5 4 3 2 1 -> Z1
NrByte 40 26 25 24 23 22 21 -> Z2
.
.
NrByte 160 146 145 144 .3 .2 141 -> Z8
NrByte 164 .3 .2 161 -> Z9
Z1 #------- ... -#------ -#--##-- -##---#- 00 00 00000000
Z2 ##------ ... -#------ -#-#--#- #--#-##- 00 00 00000000
Z3 #-#----- ... -#------ -#----#- ---#--#- 00 00 00000000
Z4 #--#---- ... --#----- #---##-- --#---#- 00 00 00000000
Z5 #--#---- ... --#--#-- #-----#- -#----#- 00 00 00000000
Z6 #-#----- ... --#-#-#- #--#--#- #-----#- 00 00 00000000
Z7 ##------ ... ---#---# ----##-- ####-### 00 00 00000000
Z8 #------- ... -------- -------- -------- 00 00 00000000
Z9 00000000 00 00 00000000
^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | |
Spalte 159 152 ... 40 32 24 16 8 0
Spalte 160
Hier nun das Programm:
Code:
Const Zoffset = 20 'Zeilenoffset (Anzahl der Byte im Textarray) auf 20 Byte eingestellt
Const Zlaenge = Zoffset * 8 'Zeilenlänge = Spaltenanzahl pro Zeile
Const Anz =(zoffset * 8) + 4
Dim Text(anz) As Byte 'Bitmuster der Zeile 1-8 des Auszugebenden Textes + 4 Nullbyte
Dim Spalte As Word 'hier wird die erste Spalte die Ausgegeben werden soll vorgegeben (0-160)
Dim Nrbyt As Word 'zum Berechnen des 1. Auszugebenden Byt aus dem TextArray
Dim Nrbit As Byte 'zum Berechnen des 1. Auszugebenden Bit aus dem Textarray
Dim Ausgabe As Long 'hier stehen am Ende die 24 Spalten Rechtsbündig zur Ausgabe bereit
Dim Ausgbyte(4) As Byte At Ausgabe Overlay 'Die einzelnen Elemente der Variable Ausgabe
Dim I As Byte
Dim K As Word
Dim Y As Word
Dim Z As Word
'<= Programm zur Veränderung der Var "Spalte"
'<= Begin zusätzliche Schleife für x Wiederholungen
Spalte = 17
If Spalte <= Zlaenge Then 'Nur bearbeiten wenn der Spaltenwert innerhalb der Grenzen liegt
Nrbyt = Spalte
Shift Nrbyt , Right , 3 'Byteadresse aus dem Textarray berechnen
Nrbit = Spalte Mod 8 'Bitversatz im Textarray berechnen
Y = Zlaenge - 1
For Z = 0 To Y Step Zoffset 'Schleife um alle 8 Zeilen zu bearbeiten
Waitms 1 'Rund 100Hz Wiederholrate um Flimmerfrei zu sein
'Nur hier für den Test relevant, da in der Schleife die Ausgabe erfolgt.
For I = 1 to 4
K = Nrbyt + I 'Byteoffset im Textarray berechnen
K = K + Z '-
Ausgbyte(i) = Text(k) 'Addressiertes Byte dem Ausgabestring zuweisen
Next I
Shift Ausgabe , Right , Nrbit 'um den Bitoffset verschieben, damit die adressierte Spalte Rechts steht
Shiftout Data_4094 , Clock_4094 , Ausgabe , 0 , 24 'Ausgabe an die Matrix
NEXT Z
Endif
'<= Ende zusätzliche Schleife für x Wiederholungen
Wie schon Oben erwähnt über das Programm gehört für den Test noch eine Schleife
um die Ausgabe öfter zu wiederholen, sonst sieht man nur ein kurzes aufflackern.
Durch kontinuierliche Veränderung der Variable "Spalte" wird nun Bitweise
Vor oder Rckwärts gescrollt.
Ich hoffe ich hab nicht zu viele Fehler eingebaut, da ich kein BASCOM habe und
dadurch nicht Testen kann.
LG