-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: LED Matrix möglichst effizient ansteuern

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26

    Ausrufezeichen LED Matrix möglichst effizient ansteuern

    Anzeige

    Hallo Community,
    Ich habe mir eine 9 x 11 Pixel Led Matrix gebaut. Die matrix steht hochkant, funktionert mit Multiplexing (wie sonst ), und ist funktionstüchtig.
    Ich habe sie über ein Steckbrett mit meinem Atmel Evaluations-Board verbunden. Eingesteckt ist ein Atmega16.
    Nun ist meine Frage:
    Wie kann ich die Matrix möglichst leicht mit Bascom ansteuern? Da man ja in Bascom nur 4kb große Programme entwickeln kann und ich auch Animationen bzw. Texte über die Matrix laufen lassen will.
    kennt jemand eine gute Ansteuerung, oder sollte ich mir eine andere Programmiersprache lernen?

    Hoffe auf gute Antworten

    Gruß nxtman95

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Beschränkung auf 4 kBytes gilt bei Bascom nur für die kostenlose Testversion. Die richtige Version kann auch mehr Flash nutzen.
    9 x 11 Pixel ist vom Ausbau nicht gerade kompatibel mit 8 Bits / Byte. Es ist auch noch die Frage ob man die LEDs nur an/aus, oder auch in der Helligkeit steuern will. Für die Ansteuerung selber sollten auch 4 kBytes noch reichen, nur Animationen nehmen ggf. viel Platz ein. Texte Sind dagegen eher klein.

    Ob man mit Bascom glücklich wird, muss man selber wissen - dafür ist die Testversion mit 4 kB Limit da. Als eine Alternative gibt es C (z.B. GCC) oder mit etwas Umstand auch C++ .

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

    Um eine effiziente Ansteuerung entwickeln zu können sollte man zumindest den Schaltplan kennen.

    In C habe ich mal eine clevere Ansteuerung für eine 10x12-Matrix entwickelt die danach schreit nach Bascom portiert zu werden.

    Gruß

    mic

    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
    Hi, danke für die Antworten
    ich habe einen Plan von der "steuerplatine" von der Matrix gemacht, die sind aber mit Lochmaster gemacht. Die Kontakte zum mega16 verbinde ich über ein Steckbrett.


    Hier die Fotos:
    Klicke auf die Grafik für eine größere Ansicht

Name:	ledmatrix1.PNG
Hits:	42
Größe:	78,2 KB
ID:	20331
    Klicke auf die Grafik für eine größere Ansicht

Name:	ledmatrix2.PNG
Hits:	25
Größe:	84,1 KB
ID:	20332
    Klicke auf die Grafik für eine größere Ansicht

Name:	ledmatrix3.PNG
Hits:	25
Größe:	44,4 KB
ID:	20333



    Ich hab den Schaltplan jetzt in Lochmaster gemacht, weil ich nicht wusste, wie man das mit Splan macht. Habe auch nur die Demoversion davon...

    @radbruch: Das ist gut, wenn du es erlaubst, würde ich mir den Code mal angucken

    gruß nxtman95

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Oje.

    Durch das Steckbrett bist du relativ frei beim Belegen der Kontrollerpins. Optimal wären 1 1/2 komplette Ports für die Zeilen, oder zumindest 3 je aufeinander folgende Port-Nipples, also Pin0-Pin3 oder Pin4-Pin7. Dadurch kann man die Zeilen ohne grosse Berechnung ausgeben. Das Weiterschalten der Spalten ist nicht ganz so zeitkritisch, allerdings sind auch hier zusammenhängende Pins von Vorteil.

    Beim Bildspeicher würde ich ganze Bytes bevorzugen. Die 11 Zeilen würde ich in 3 Nipples zu je 4 Bits speichern, verteilt auf zwei Bytes oder einem 16-Bit-Wert.

    Code:
    Aufbau des Bildspeichers:
    
    0123 4567 8 | Spalte
    
    0000 0000 0 | Bit           \
    1111 1111 1 |                | Zeile
    2222 2222 2 |                | Pin 0-3
    3333 3333 3 |               /
    
    4444 4444 4 |               \
    5555 5555 5 |                | Zeile 4-7
    6666 6666 6 |                | Pin 4-7
    7777 7777 7 |               /
    
    8888 8888 8 | Bit           \ 
    9999 9999 9 |                | Zeile 
    1111 1111 1 |                | Pin 8-10
    0000 0000 0 |               /
    Bei der Ausgabe werden nacheinander die Spalten durchgeschaltet und pro Spalte jeweils alle Zeilenbits ausgegeben. Für unterschiedliche Helligkeiten der Bildpunkte kann man mehrere Bildspeicher als Farbebenen verwalten:


    http://www.roboternetz.de/community/...l=1#post494065

    Gruß

    mic

    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
    Das ist ne gute Idee
    Nur, wie lese ich das aus? Mit einer For ... next schleife?
    und, soll ich den Bildspeicher dann in ne externe Datei verlegen, sprich eine Textdatei?

    Gruß und danke für die gute Antwort von nxtman95

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Alter
    21
    Beiträge
    355
    @radbruch:

    Kann man die LED-Matrix aus dem Video irgendwo kaufen oder hast du dir die Platine selber gelayoutet und ätzen/bestücken lassen?

    MfG

    Torrentula
    MfG Torrentula

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

    Das ist die PingPong-Platine vom C. 120 LEDs mit einem 8MHz-Mega8:
    http://www.conrad.de/ce/de/product/902766/
    http://www.roboternetz.de/community/...mprogrammieren

    Zum Bildspeicher: Das Wort klingt zwar gewaltig, aber es handelt sich nur um neun 16-Bit-Werte die selbstverständlich im Ram des µC verwaltet werden. Der Aufbau eines Einzelbildes läuft etwa so: Alle Spalten aus, Zeilenbits für erste Spalte setzen, erste Spalte einschalten, kurz warten, alle Spalten aus, Zeilenbits für zweite Spalte setzen, zweite Spalte ein, kurz warten (später mal ist das der Abstand zwischen den ISR-Aufrufen), alle Spalten aus, ... , letzte Spalte an, kurz warten, letzte Spalte aus, Zeilenbits für erste Spalte setzen,...usw. immer schneller bis das Bild nicht mehr flimmert.

    Für den Anfang, um es mit Interrupts nicht ünnötig kompliziert zu machen, kann man das in der Hauptschleife programmieren:

    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $hwstack = 40
    $swstack = 16
    $framesize = 32
    
    Declare Sub Zeilensetzen
    
    Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word
    
    Bildspeicher(1) = &B01100001111
    Bildspeicher(2) = &B01100001111
    Bildspeicher(3) = &B10000001111
    Bildspeicher(4) = &B10000001111
    Bildspeicher(5) = &B01111110000
    Bildspeicher(6) = &B01111110000
    Bildspeicher(7) = &B10011110000
    Bildspeicher(8) = &B10011110000
    Bildspeicher(9) = &B01100001111
    Bildspeicher(10) = &B01100001111
    Bildspeicher(11) = &B10000001111
    
    Spalte = 1
    
    Do
       Select Case Spalte
          Case 1 : Reset Portc.7
                   Zeilensetzen
                   Set Portd.0
    
          Case 2 : Reset Portd.0
                   Zeilensetzen
                   Set Portd.1
    
          Case 3 : Reset Portd.1
                   Zeilensetzen
                   Set Portd.2
    
          Case 4 : Reset Portd.2
                   Zeilensetzen
                   Set Portd.3
    
          '...
    
          Case 9 : Reset Portd.7
                   Zeilensetzen
                   Set Portc.7
       End Select
    
       If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1
    
       Waitms 10
    
       'hier kann man dann das Bild zusammenbasteln
    
    Loop
    
    End
    
    Sub Zeilensetzen
       Temp = Bildspeicher(spalte)
       If temp.0 = 1 Then Set Porta.0 Else Reset Porta.0
       If temp.1 = 1 Then Set Porta.1 Else Reset Porta.1
       If temp.2 = 1 Then Set Porta.2 Else Reset Porta.2
       If temp.3 = 1 Then Set Porta.3 Else Reset Porta.3
    
       If temp.4 = 1 Then Set Portb.4 Else Reset Portb.4
       If temp.5 = 1 Then Set Portb.5 Else Reset Portb.5
    
       '...
    
       If temp.10 = 1 Then Set Portc.1 Else Reset Portc.1
       If temp.11 = 1 Then Set Portc.2 Else Reset Portc.2
    End Sub
    
    'Wenn die Pins aufeinanderfolgen ist es deutlich schlanker:
    'Sub Zeilensetzen
       'Porta = Bildspeicher(spalte) And 255
       'Portb = Bildspeicher(spalte) / 255 And 7
    'End Sub
    (Kompilierbar, aber ungetestet und eher symbolisch gedacht)

    Gruß

    mic
    Geändert von radbruch (22.10.2011 um 14:24 Uhr) Grund: Kleine Optimierung eingebaut

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    11.10.2011
    Beiträge
    26
    Danke für den Code,
    und wie kann ich jetzt das "Bild" anzeigen lassen, müssen die Ports nicht noch als Output konfiguriert werden?

    gruß nxtman95

  10. #10
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    ...müssen die Ports nicht noch als Output konfiguriert werden
    Klar müssen sie das. Da ich aber deine Pinbelegung nicht kenne, und es ja eigentlich deine Matrix ist, habe ich dir auch was zum Tippen übriggelassen.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 1 von 3 123 LetzteLetzte

Ä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, 21:56
  2. Eine LED-Matrix 5x7 ansteuern
    Von Tryan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 66
    Letzter Beitrag: 01.03.2009, 18:42
  3. 10V aus 3,3 - möglichst ohne IC?
    Von Zachso im Forum Elektronik
    Antworten: 17
    Letzter Beitrag: 16.02.2008, 12:28
  4. LED-Matrix, wie Ansteuern?
    Von tholan im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 27.04.2006, 19:24
  5. Geht das mit dem L298 auch effizient?
    Von zennehoy im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 03.03.2005, 12:11

Stichworte

Berechtigungen

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