BoondockDuck
19.06.2008, 10:49
Hi
ich habe ein 5*7 DotMatrix LED-Display über einen Max7221 an mein RN-Minicontrol-Board angeschlossen. (Anmerkung: Im Code steht Max7219, ich habe die Bezeichnung nur nicht geändert)
Das ganze funktioniert soweit auch, über eine etwas umständliche Spielerei habe ich es auch hinbekommen den Buchstaben "A" vertikal runter zu scrollen.
Mein Code steht ganz unten im Beitrag (das ist aber nicht der Code für das Scrollen)
Meine Bascon-Fähigkeiten begrenzen sich bis jetzt darauf bestehenden Code abzuändern, ich arbeite mich erst langsam ein. Mithilfe der Bascom Language Reference und Beispielen klappt es aber einigermaßen.
Kurz zur Erklärung des Max7221 falls er nicht bekannt ist. Das ist ein ganz praktischer Display-Driver für bis zu 64 LEDs der das ganze Multiplexing übernimmt. 64 einzelnde LEDs oder alternativ z.b. 8 7-Segmende-Anzeigen. Dazu hat er noch ein paar Zusatzfunktionen wie eine Einstellbare Displayhelligkeit, ist Kaskadierbar und anderes ... steht im Datenblatt schön beschrieben.
Programmiert wird er über eine 16-Bit Folge. Die ersten 8 Bit sind für die Adressierung, die zweiten 8 Bit für die Daten. (Wenn man zwei oder mehrere Max7221 Kaskadiert muss man jeweils 16Bit pro Chip mehr ausgeben.)
In dem Code ganz unten sieht man wie der Max vor der Do-Loop-Schleife initialisiert wird. In der Do-Loop-Schleife wird dann das "A" ausgegeben.
Was ich machen möchte: Ich habe in einem anderen Beispiel so einen Zeichensatz gefunden (habe die Werte jetzt nicht auf ihre Richtigkeit getestet). Ich habe mir den gesamten Code zwar durchgelesen aber nicht herausfinden können wie man es, wenn man z.b. Ein "A" ausgeben möchte, in Bascon Programmiert. Bzw. ich habe es schlicht nicht kapiert, die Schaltung dazu war auch ganz anderes. (Schieberegister anstatt Max)
Letzendlich möchte ich einen scrollenden (nach links/rechts) Text ausgeben.
Vom Prinzip her weiß ich wie das alles funktionieren soll.
Horizontales Scrollen indem man das erste Byte der 16-Bit-Folge pro Durchgang ein Bit addiert/subtrahiert (Mit einem Maximalen Wertebereich von 1-5, denn dann ist ja das Display "ende")
Vertikales Scrollen indem man das zweite Byte einfach mit ROTATE nach links/rechts verschiebt.
Ich kann das ganze nur von meiner Programmierfähigkeit her nicht sinnvoll in Verbindung mit sowas wie so einem Zeichensatz verbinden.
Und am schönsten wäre es natürlich wenn man das ganze über einen String machen könnte. Sprich man hat einen String in dem etwas steht und der soll dann automatisch zerlegt werden und auf dem Display ausgegeben und gescrollt werden ...
Kolpililziart.... find isch des. :-s
Schonmal Danke :D
Zeichensatz:
Data 0 , 126 , 9 , 9 , 9 , 126 'A
Data 0 , 127 , 73 , 73 , 73 , 54 'B
Data 0 , 62 , 65 , 65 , 65 , 34 'C
Data 0 , 127 , 65 , 65 , 65 , 62 'D
...
$regfile "m168def.dat"
$crystal = 16000000
Config Portd.5 = Output ' load(cs)
Config Portd.4 = Output ' clk
Config Portb.2 = Output ' din
Max_cs Alias Portd.5
Max_din Alias Portb.2
Max_clk Alias Portd.4
Set Max_cs ' cs, din, clk = high
Set Max_din
Set Max_clk
Dim Led_operation As Word
Declare Sub Max7219datenout(d As Word)
Led_operation = &B0000110000000001 ' normal operation mode
Call Max7219datenout(led_operation)
Led_operation = &B0000100100000000 ' decode mode none
Call Max7219datenout(led_operation)
Led_operation = &B0000101000001100 ' led intensity
Call Max7219datenout(led_operation)
Led_operation = &B0000101100000111 ' scan limit digit 0-7
Call Max7219datenout(led_operation)
Do ' Gibt "A" auf dem Display aus
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Led_operation = &B0000000101010101
Call Max7219datenout(led_operation)
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Led_operation = &B0000000101010101
Call Max7219datenout(led_operation)
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Loop
Sub Max7219datenout(d As Word)
Max_cs = 0
Shiftout Max_din , Max_clk , D , 1 , 16
Max_cs = 1
End Sub
ich habe ein 5*7 DotMatrix LED-Display über einen Max7221 an mein RN-Minicontrol-Board angeschlossen. (Anmerkung: Im Code steht Max7219, ich habe die Bezeichnung nur nicht geändert)
Das ganze funktioniert soweit auch, über eine etwas umständliche Spielerei habe ich es auch hinbekommen den Buchstaben "A" vertikal runter zu scrollen.
Mein Code steht ganz unten im Beitrag (das ist aber nicht der Code für das Scrollen)
Meine Bascon-Fähigkeiten begrenzen sich bis jetzt darauf bestehenden Code abzuändern, ich arbeite mich erst langsam ein. Mithilfe der Bascom Language Reference und Beispielen klappt es aber einigermaßen.
Kurz zur Erklärung des Max7221 falls er nicht bekannt ist. Das ist ein ganz praktischer Display-Driver für bis zu 64 LEDs der das ganze Multiplexing übernimmt. 64 einzelnde LEDs oder alternativ z.b. 8 7-Segmende-Anzeigen. Dazu hat er noch ein paar Zusatzfunktionen wie eine Einstellbare Displayhelligkeit, ist Kaskadierbar und anderes ... steht im Datenblatt schön beschrieben.
Programmiert wird er über eine 16-Bit Folge. Die ersten 8 Bit sind für die Adressierung, die zweiten 8 Bit für die Daten. (Wenn man zwei oder mehrere Max7221 Kaskadiert muss man jeweils 16Bit pro Chip mehr ausgeben.)
In dem Code ganz unten sieht man wie der Max vor der Do-Loop-Schleife initialisiert wird. In der Do-Loop-Schleife wird dann das "A" ausgegeben.
Was ich machen möchte: Ich habe in einem anderen Beispiel so einen Zeichensatz gefunden (habe die Werte jetzt nicht auf ihre Richtigkeit getestet). Ich habe mir den gesamten Code zwar durchgelesen aber nicht herausfinden können wie man es, wenn man z.b. Ein "A" ausgeben möchte, in Bascon Programmiert. Bzw. ich habe es schlicht nicht kapiert, die Schaltung dazu war auch ganz anderes. (Schieberegister anstatt Max)
Letzendlich möchte ich einen scrollenden (nach links/rechts) Text ausgeben.
Vom Prinzip her weiß ich wie das alles funktionieren soll.
Horizontales Scrollen indem man das erste Byte der 16-Bit-Folge pro Durchgang ein Bit addiert/subtrahiert (Mit einem Maximalen Wertebereich von 1-5, denn dann ist ja das Display "ende")
Vertikales Scrollen indem man das zweite Byte einfach mit ROTATE nach links/rechts verschiebt.
Ich kann das ganze nur von meiner Programmierfähigkeit her nicht sinnvoll in Verbindung mit sowas wie so einem Zeichensatz verbinden.
Und am schönsten wäre es natürlich wenn man das ganze über einen String machen könnte. Sprich man hat einen String in dem etwas steht und der soll dann automatisch zerlegt werden und auf dem Display ausgegeben und gescrollt werden ...
Kolpililziart.... find isch des. :-s
Schonmal Danke :D
Zeichensatz:
Data 0 , 126 , 9 , 9 , 9 , 126 'A
Data 0 , 127 , 73 , 73 , 73 , 54 'B
Data 0 , 62 , 65 , 65 , 65 , 34 'C
Data 0 , 127 , 65 , 65 , 65 , 62 'D
...
$regfile "m168def.dat"
$crystal = 16000000
Config Portd.5 = Output ' load(cs)
Config Portd.4 = Output ' clk
Config Portb.2 = Output ' din
Max_cs Alias Portd.5
Max_din Alias Portb.2
Max_clk Alias Portd.4
Set Max_cs ' cs, din, clk = high
Set Max_din
Set Max_clk
Dim Led_operation As Word
Declare Sub Max7219datenout(d As Word)
Led_operation = &B0000110000000001 ' normal operation mode
Call Max7219datenout(led_operation)
Led_operation = &B0000100100000000 ' decode mode none
Call Max7219datenout(led_operation)
Led_operation = &B0000101000001100 ' led intensity
Call Max7219datenout(led_operation)
Led_operation = &B0000101100000111 ' scan limit digit 0-7
Call Max7219datenout(led_operation)
Do ' Gibt "A" auf dem Display aus
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Led_operation = &B0000000101010101
Call Max7219datenout(led_operation)
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Led_operation = &B0000000101010101
Call Max7219datenout(led_operation)
Led_operation = &B0000000101111111
Call Max7219datenout(led_operation)
Loop
Sub Max7219datenout(d As Word)
Max_cs = 0
Shiftout Max_din , Max_clk , D , 1 , 16
Max_cs = 1
End Sub