-         

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

Thema: Software für LED Cube

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    30
    Beiträge
    379

    Software für LED Cube

    Anzeige

    Hallo liebe Roboter Gemeinde!

    Ich hab mir jetzt einen 3x3x3 LED Cube gebaut und die einzelnen LED`s per Matrix verschaltet. Es sind also alle Kathoden in der wagerechten und alle Anoden in der Senkrechten miteinerander verbunden. Durch diese anordnung brauche ich für 9 LED`s nur 6 Ports am µC und kann jede LED einzeln ansteuertn.

    Mein eigentliches Problem ist aber die Programmierung. Ich habe mir jetzt 2 Subroutinen geschrieben jeweils für LED_AN und LED_AUS. Die Subroutinen werden mit 3 Parametetn aufgerufen in Form von der X, Y und Z Koordinate. Durch dieses vorgehen wird das Programm aber riesig werden, da ich ja jeden Fall respektieren muss. Ich poste mal kurz meinen Ansatz des Codes für die Sub LED_AN den ich noch im Kopf habe (Bin leider grade auf der Arbeit):

    Code:
    Sub LED_AN(X as INTEGER, Y as INTEGER, Z as INTEGER)
    IF X=1 THEN
      IF Y= 1 THEN
    
        IF Z=1 THEN
          PORTA.0 = 1
          PORTB.0 = 1
        END IF
    
        IF Z=2 THEN
          PORTA.1 = 1
          PORTB.1 = 1
        END IF
    
        IF Z=3 THEN
          PORTA.2 = 1
          PORTB.2 = 1
        END IF
    
      END IF
    
      IF Y= 2 THEN
    
        IF Z=1 THEN
          PORTC.0 = 1
          PORTD.0 = 1
        END IF
    
        IF Z=2 THEN
          PORTC.1 = 1
          PORTD.1 = 1
        END IF
    
        IF Z=3 THEN
          PORTC.2 = 1
          PORTD.2 = 1
        END IF
    
      END IF
    
    END IF
    END SUB
    Die Portnamen und Nummern sind rein willkürlich gewählt da ich die "echten" nicht im Kopf habe.

    Es muss doch eine einfacherer Möglichkeit geben als die ganzen möglichen Kombinationen mit If abfragen ineinander zu verschachteln oder? Hat da eventuell jemand einen Tipp für mich?


    Edit: Mir kommt grade noch eine Idee: Gibt es sowas wie 3 Dimensionale Arrays in Bascom? Das wäre mit Sicherheit eine der einfacheren Lösungen!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo oZe,

    die Variablen als Integer zu definieren ist wohl etwas übertrieben, als Byte reicht völlig aus.

    Du könntest x,y und z auch als Zahl übergeben (z. B. 321 oder 001) wobei die erste Stelle den X-Wert und die letzte den y-Wert darstellt. Dann kannst du mit select-case arbeiten. Wird zwar auch viel Code, ist aber übersichtlicher.

    Bascom kann nur eindimensionale Arrays.
    Gruß, Stefan

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    30
    Beiträge
    379
    Hey das ist natürlich noch ne Idee. Damit komm ich auf jedenfall besser durch.
    Jetzt ist noch die Frage ob das Codemäßig die Bascom-Demo "überfordert" aber das wird sich dann ja rausstellen.
    Mit dem Array wär das ganze natürlich noch schöner zu lösen aber wenns das nicht gibt dann kann man nix machen


    Danke für den Tipp!

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    mehrdimenional is mit Bascom nicht.
    schau aber mal da:
    http://www.roboternetz.de/wissen/ind...onale_Tabellen

    btw: Schau dir mal den Befehl "SELECT" an.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo oZe,

    Ich hab mir jetzt einen 3x3x3 LED Cube gebaut und die einzelnen LED`s per Matrix verschaltet. Es sind also alle Kathoden in der wagerechten und alle Anoden in der Senkrechten miteinerander verbunden. Durch diese anordnung brauche ich für 9 LED`s nur 6 Ports am µC und kann jede LED einzeln ansteuertn.
    3x3x3 sind doch 27 und nicht nur 9?
    Afaik könntest du mit 6 Ports nur eine Ebene mit 3x3x1 = 9 oder einen Würfel mit 2x2x2 = 8 LEDs ansteuern.

    Kannst du deine Elektrik nochmal erklären?

    Gruß, Michael

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn ich das richtig verstanden habe, braucht er:
    x --> 3 Pin
    y --> 3 Pin
    z --> 3 Pin
    ---------------
    9 Pins
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    30
    Beiträge
    379
    Ok zugegeben ich bin nicht der Meister sowas in Worte zu fassen aber ich versuch es noch mal:

    Der Cube besteht aus 3x3x3 = 27 LED`s

    Die X und die Y Achse sind jeweils per Matrix verschaltet (Auf X sind die Kathoden zusammengelötet und auf Y die Anoden). Somit habe ich immer 9 LED`s zusammen die über 6 Pins angesteuert werden können. Diesen Aufbau habe ich 3 mal gebaut für die Z Achse. Insgesamt brauche ich also 18 Pins vom µC um auf alle LED`s zugriff zu haben.

    Noch mal in anderen Worten: Es gibt 3 Schichten aus jeweils 9 LED`s, die per Matrix verschaltet sind.

    Ich hoffe das ist jetzt verständlicher gewesen als meine erste Beschreibung

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    30
    Beiträge
    379

    Das Programm

    So jetzt bin ich grade mal zuhause und habe die Software zur Hand von daher poste ich die jetzt schon mal.

    Leider funktioniert das nicht so wie ich will. Normalerweise sollte jetzt LED 111 angehen (also x=1 y=1 z=1). Es gehen aber LED 111 und LED 112 an...

    An der Hardware liegt es nicht (also keine lötbrücken o.ä.). Es liegt irgendwie an der Sub. Wenn ich den befehl LED_an(111) auskommentiere liegen alle Ports auf den gewünschten Zuständen (PA und PC auf 0 und PB und PD auf 1). Wo liegt mein Fehler?

    Code:
    $regfile = "m16def.dat"                                     'Mega 16 Def
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $baud = 9600
    
    
    Config Porta = Output
    Config Portb = Output
    Config Portc = Output
    Config Portd = Output
    
    Porta = 0
    Portc = 0
    
    Portd = 1
    Portb = 1
    
    Declare Sub Led_an(byval Led As Integer)
    Declare Sub Led_aus(byval Led As Integer)
    
    
    Do
    
    Call Led_an(111)
    
    Loop
    
    
    End
    
    
    Sub Led_an(led As Integer)
    
    Select Case Led
    
        Case 111 :
                   Porta.0 = 1
                   Portd.0 = 0
        Case 112 :
                   Porta.0 = 1
                   Portb.7 = 0
        Case 113 :
                   Porta.0 = 1
                   Portb.6 = 0
        Case 121 :
                   Porta.1 = 1
                   Portd.0 = 0
        Case 122 :
                   Porta.1 = 1
                   Portb.7 = 0
        Case 123 :
                   Porta.1 = 1
                   Portb.6 = 0
        Case 131 :
                   Porta.2 = 1
                   Portd.0 = 0
        Case 132 :
                   Porta.2 = 1
                   Portb.7 = 0
        Case 133 :
                   Porta.2 = 1
                   Portb.6 = 0
    
    
    
    
        Case 211 :
                   Porta.3 = 1
                   Portd.3 = 0
        Case 212 :
                   Porta.3 = 1
                   Portd.2 = 0
        Case 213 :
                   Porta.3 = 1
                   Portd.1 = 0
        Case 221 :
                   Porta.4 = 1
                   Portd.3 = 0
        Case 222 :
                   Porta.4 = 1
                   Portd.2 = 0
        Case 223 :
                   Porta.4 = 1
                   Portd.1 = 0
        Case 231 :
                   Porta.5 = 1
                   Portd.3 = 0
        Case 232 :
                   Porta.5 = 1
                   Portd.2 = 0
        Case 233 :
                   Porta.5 = 1
                   Portd.1 = 0
    
    
    
    
    
        Case 311 :
                   Porta.6 = 1
                   Portd.6 = 0
        Case 312 :
                   Porta.6 = 1
                   Portb.5 = 0
        Case 313 :
                   Porta.6 = 1
                   Portb.4 = 0
        Case 321 :
                   Porta.7 = 1
                   Portd.6 = 0
        Case 322 :
                   Porta.7 = 1
                   Portb.5 = 0
        Case 323 :
                   Porta.7 = 1
                   Portb.4 = 0
        Case 331 :
                   Portc.7 = 1
                   Portd.6 = 0
        Case 332 :
                   Portc.7 = 1
                   Portb.5 = 0
        Case 333 :
                   Portc.7 = 1
                   Portb.4 = 0
    
    End Select
    
    End Sub
    
    
    
    
    Sub Led_aus(led As Integer)
    
    Select Case Led
    
        Case 111 :
                   Porta.0 = 0
                   Portd.0 = 1
        Case 112 :
                   Porta.0 = 0
                   Portb.7 = 1
        Case 113 :
                   Porta.0 = 0
                   Portb.6 = 1
        Case 121 :
                   Porta.1 = 0
                   Portd.0 = 1
        Case 122 :
                   Porta.1 = 0
                   Portb.7 = 1
        Case 123 :
                   Porta.1 = 0
                   Portb.6 = 1
        Case 131 :
                   Porta.2 = 0
                   Portd.0 = 1
        Case 132 :
                   Porta.2 = 0
                   Portb.7 = 1
        Case 133 :
                   Porta.2 = 0
                   Portb.6 = 1
    
    
    
    
        Case 211 :
                   Porta.3 = 0
                   Portd.3 = 1
        Case 212 :
                   Porta.3 = 0
                   Portd.2 = 1
        Case 213 :
                   Porta.3 = 0
                   Portd.1 = 1
        Case 221 :
                   Porta.4 = 0
                   Portd.3 = 1
        Case 222 :
                   Porta.4 = 0
                   Portd.2 = 1
        Case 223 :
                   Porta.4 = 0
                   Portd.1 = 1
        Case 231 :
                   Porta.5 = 0
                   Portd.3 = 1
        Case 232 :
                   Porta.5 = 0
                   Portd.2 = 1
        Case 233 :
                   Porta.5 = 0
                   Portd.1 = 1
    
    
    
    
    
        Case 311 :
                   Porta.6 = 0
                   Portd.6 = 1
        Case 312 :
                   Porta.6 = 0
                   Portb.5 = 1
        Case 313 :
                   Porta.6 = 0
                   Portb.4 = 1
        Case 321 :
                   Porta.7 = 0
                   Portd.6 = 1
        Case 322 :
                   Porta.7 = 0
                   Portb.5 = 1
        Case 323 :
                   Porta.7 = 0
                   Portb.4 = 1
        Case 331 :
                   Portc.7 = 0
                   Portd.6 = 1
        Case 332 :
                   Portc.7 = 0
                   Portb.5 = 1
        Case 333 :
                   Portc.7 = 0
                   Portb.4 = 1
    
    End Select
    
    End Sub

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo,

    ich hab es nur mal überflogen, aber so werden, wenn ich es richtig gesehen habe, Port A und B auf 1 gesetzt, C und D auf 0. Ist das so gewollt?
    Gruß, Stefan

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.04.2006
    Ort
    Dortmund
    Alter
    30
    Beiträge
    379
    Ja das ist so gewollt, da ich als Treiber einmal ein NPN Transistor Array benutze und einmal ein PNP Transistor Array. Wenn ich jetzt LED 111 einschalten will bekommt diese über PA1 Masse und über PB7 +5V. An PortA hängt das NPN Array daher muss ich dort auf 1 Schalten. An PortB hängt das PNP Array. Daher muss ich dort dann auf 0 Schalten.

    Zum besseren Verständnis anbei der (zugegeben ziemlich unaufgeräumte) Schaltplan. K5 und K4 sind blos dummies für einen eventuellen taster für eine spätere erweiterung (Muster umschalten).
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken cube.jpg  

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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