- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 26

Thema: LED Matrix möglichst effizient ansteuern

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26
    Hi, danke für die schnelle Antwort,

    der Code:
    Code:
    $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
    Ich habe es zig mal überprüft, alle Zeilen und Spalten belegungen stimmen

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Obwohl die Arrays mit dem Index 1 starten, ein Byte besteht auch bei Bascom aus Bit0 bis Bit7:

    Temp = Bildspeicher(spalte)
    If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2
    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?

    http://www.google.de/search?q=JTAG+i...+ausgeschaltet

    Version 2:
    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
    ')
    (ungetestet)
    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!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26
    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)

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Prima, Glückwunsch. Danke für die Blumen. :)

    Das Bild ist aber insgesamt um 1 nach oben verschoben
    Bei welcher Programmversion? In der ersten Version würde das genau passen:

    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!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26
    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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26
    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...

Ähnliche Themen

  1. Möglichst kleiner, möglichst schneller Linux-PC gesucht
    Von bjoerng im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 11
    Letzter Beitrag: 22.06.2010, 20:56
  2. Eine LED-Matrix 5x7 ansteuern
    Von Tryan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 66
    Letzter Beitrag: 01.03.2009, 17:42
  3. 10V aus 3,3 - möglichst ohne IC?
    Von Zachso im Forum Elektronik
    Antworten: 17
    Letzter Beitrag: 16.02.2008, 11:28
  4. LED-Matrix, wie Ansteuern?
    Von tholan im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 27.04.2006, 18:24
  5. Geht das mit dem L298 auch effizient?
    Von zennehoy im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.03.2005, 11:11

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress