Durchaus möglich, dass mein Code nicht funktioniert. Wie ist deine Matrix jetzt angeschlossen? Wie sieht das komplette Programm aus? Wir sollten uns Spalte für Spalte und Zeile für Zeile vorantasten.
Durchaus möglich, dass mein Code nicht funktioniert. Wie ist deine Matrix jetzt angeschlossen? Wie sieht das komplette Programm aus? Wir sollten uns Spalte für Spalte und Zeile für Zeile vorantasten.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hi, danke für die schnelle Antwort,
der Code:
Ich habe es zig mal überprüft, alle Zeilen und Spalten belegungen stimmenCode:$regfile = "m16def.dat" $crystal = 16000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Porta = Output Config Portb = Output Config Portc = Output Config Portd = Output Declare Sub Zeilensetzen Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0 Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte) Dim X As Byte , Y As Byte Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word Spalte = 1 Do Select Case Spalte Case 1 : Reset Portb.5 Zeilensetzen Set Portb.4 Case 2 : Reset Portb.4 Zeilensetzen Set Portb.3 Case 3 : Reset Portb.3 Zeilensetzen Set Portb.2 Case 4 : Reset Portb.2 Zeilensetzen Set Portb.1 Case 5 : Reset Portb.1 Zeilensetzen Set Portb.0 Case 6 : Reset Portb.0 Zeilensetzen Set Porta.7 Case 7 : Reset Porta.7 Zeilensetzen Set Porta.6 Case 8 : Reset Porta.6 Zeilensetzen Set Porta.5 Case 9 : Reset Porta.5 Zeilensetzen Set Portb.5 End Select If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1 Waitus 100 Select Case Zaehler Case 1000 : For X = 0 To 8 ' diagonale Set_pixel X , X Next X Case 2000 : For X = 0 To 10 ' waagrecht Set_pixel X , 0 Set_pixel X , 8 Next X Case 3000 : For Y = 0 To 8 ' senkrecht Set_pixel 0 , Y Set_pixel 10 , Y Next X Case 4000 : For X = 1 To 11 ' alle an Bildspeicher(x) = &B11111111111 Next X Case 5000 : For X = 1 To 9 ' Bitmuster Bildspeicher(x) = &B11111111100 Next X Case 6000 : For X = 1 To 9 ' alle aus Bildspeicher(x) = 0 Next X Zaehler = 0 End Select Zaehler = Zaehler + 1 Loop End Sub Set_pixel(byval X As Byte , Byval Y As Byte) Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1 End Sub Sub Reset_pixel(byval X As Byte , Byval Y As Byte) Bildspeicher(x + 1).y = 0 End Sub Sub Zeilensetzen Temp = Bildspeicher(spalte) If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2 If Temp.2 = 1 Then Set Portd.1 Else Reset Portd.1 If Temp.3 = 1 Then Set Portd.0 Else Reset Portd.0 If Temp.4 = 1 Then Set Portc.7 Else Reset Portc.7 If Temp.5 = 1 Then Set Portc.6 Else Reset Portc.6 If Temp.6 = 1 Then Set Portc.5 Else Reset Portc.5 If Temp.7 = 1 Then Set Portc.4 Else Reset Portc.4 If Temp.8 = 1 Then Set Portc.3 Else Reset Portc.3 If Temp.9 = 1 Then Set Portc.2 Else Reset Portc.2 If Temp.10 = 1 Then Set Portc.1 Else Reset Portc.1 If Temp.11 = 1 Then Set Portc.0 Else Reset Portc.0 End Sub
Hallo
Obwohl die Arrays mit dem Index 1 starten, ein Byte besteht auch bei Bascom aus Bit0 bis Bit7:
Ich bin leider auch ziemlich ratlos. Scheinbar ist nur der Port C betroffen. Das einzige was mir dazu einfällt: JTAG ist nicht ausgeschaltet. Das würde allerdings nur PC2-5 betreffen. Wird an den "fehlerhaften" Pins etwas ausgegeben?Temp = Bildspeicher(spalte)
If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2
http://www.google.de/search?q=JTAG+i...+ausgeschaltet
Version 2:
(ungetestet)Code:$regfile = "m16def.dat" $crystal = 16000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Porta = &B11100000 ' PA7-PA5 sind Ausgang (Spalten 7-9) Config Portb = &B00111111 ' PB5-PB0 (Spalten 1-6) Config Portc = &B11111111 ' PC7-PC0 (Zeilen 0-7) Config Portd = &B00000111 ' PA2-PA0 (Zeilen 8-10) Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0? Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte) ' x von 0 bis 8, y von 0 bis 10 Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word Dim X As Byte , Y As Byte Zaehler = 0 Spalte = 1 ' Spalte ist Index im Array und startet deshalb mit 1! Do ' Anfang der späteren ISR ' alle Spalten aus Portb = Pinb And &B11000000 ' PB5-PB0 ausschalten Porta = Pina And &B00011111 ' PA7-PA5 ausschalten ' Zeilenpins der aktuellen Spalte setzen ' Zeile 0 bis 7 ist PC0 bis 7, Zeile 8 bis 10 ist PD0 bis 2 Temp = Bildspeicher(spalte) Portc = Temp And 255 ' Bits 0 bis 7 an PortC.0 bis .7 ausgeben Temp = Temp / 256 ' Bits 8-10 werden Bits 2-0 Portd = Temp And 7 ' Bits 7-3 ausblenden und Bits 2-0 an Port D ausgeben ' aktuelle Spalte einschalten Select Case Spalte Case 1 : Set Portb.4 Case 2 : Set Portb.3 Case 3 : Set Portb.2 Case 4 : Set Portb.1 Case 5 : Set Portb.0 Case 6 : Set Porta.7 Case 7 : Set Porta.6 Case 8 : Set Porta.5 Case 9 : Set Portb.5 End Select If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1 ' Ende der späteren ISR Waitus 100 Select Case Zaehler Case 1000 : For X = 0 To 8 ' diagonale Set_pixel X , X Next X Case 2000 : For X = 0 To 10 ' waagrecht Set_pixel X , 0 Set_pixel X , 8 Next X Case 3000 : For Y = 0 To 8 ' senkrecht Set_pixel 0 , Y Set_pixel 10 , Y Next X Case 4000 : For X = 1 To 11 ' alle an Bildspeicher(x) = &B11111111111 Next X Case 5000 : For X = 1 To 9 ' Bitmuster Bildspeicher(x) = &B11111111100 Next X Case 6000 : For X = 1 To 9 ' alle aus Bildspeicher(x) = 0 Next X Zaehler = 0 End Select Zaehler = Zaehler + 1 Loop End Sub Set_pixel(byval X As Byte , Byval Y As Byte) Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1 End Sub Sub Reset_pixel(byval X As Byte , Byval Y As Byte) Bildspeicher(x + 1).y = 0 End Sub '( ' Wird nicht verwendet und soll nur die Zeilenbelegung zeigen. Durch die aufsteigenden Bits kann man die Bytes schneller ausgeben. Sub Zeilensetzen Temp = Bildspeicher(spalte) If Temp.0 = 1 Then Set Portc.0 Else Reset Portc.0 If Temp.1 = 1 Then Set Portc.1 Else Reset Portc.1 If Temp.2 = 1 Then Set Portc.2 Else Reset Portc.2 If Temp.3 = 1 Then Set Portc.3 Else Reset Portc.3 If Temp.4 = 1 Then Set Portc.4 Else Reset Portc.4 If Temp.5 = 1 Then Set Portc.5 Else Reset Portc.5 If Temp.6 = 1 Then Set Portc.6 Else Reset Portc.6 If Temp.7 = 1 Then Set Portc.7 Else Reset Portc.7 If Temp.8 = 1 Then Set Portd.0 Else Reset Portd.0 If Temp.9 = 1 Then Set Portd.1 Else Reset Portd.1 If Temp.10 = 1 Then Set Portd.2 Else Reset Portd.2 End Sub ')
Geändert von radbruch (25.10.2011 um 09:26 Uhr) Grund: Version 2 angehängt
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich hab mit nem Code JTAG deaktiviert, jetzt gehts!
Du bist ein GENIE!
Ganz ganz großen Dank an dich
gruß nxtman
Edit: Das Bild ist aber insgesamt um 1 nach oben verschoben, weißt du warum?
Geändert von nxtman95 (25.10.2011 um 16:43 Uhr)
Hallo
Prima, Glückwunsch. Danke für die Blumen. :)
Bei welcher Programmversion? In der ersten Version würde das genau passen:Das Bild ist aber insgesamt um 1 nach oben verschoben
If Temp.1 = 1
Die Pixel der ersten Reihe werden in Bildspeicher(x).0 gespeichert, weil die Zählung der Bits eines Bytes bei 0 beginnt. Wenn du bei .1 startest wird die oberste Zeile "verschluckt". (des hab ich aber weiter oben schon mal angedeutet...)
Gruß
mic
Geändert von radbruch (25.10.2011 um 18:05 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hatte (bzw. habe noch) die erste, habe jetzt anstatt Temp.1 = 1 Temp.2 = 1 gemacht funktioniert jetzt alles suuuper!
Jetzt gehts an die Texte und Animationen![]()
Ich lasse das mit der 9x11 Matrix erstmal in Raum stehen und baue mir erstmal eine 8x8 Matrix, die Programmierung der 9x11 Matrix is mir nämlich fürs erste zu umständlich und kompliziert...
Lesezeichen