Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Bascom Code für Led-Cube


von Christopher U. (quadratus)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich arbeite gerade daran einen Led-Cube zu bauen.
Und mache mir momentan Gedanken über die Software.
Ich programiere wi oben schon zu lesen ist mit Bascom.

Im moment stellt sich mir das Problem,
wie ich die Verschiedenen Bilder die ich gerne in Arrays speichern 
wollte durchzähle!.


Hie mal der Code bisher.
Die LEDs werden übrigens über SPI-Schieberegister angesteuert.
Vier Stück an der Zahl (32 Bit). Wobei das letze Register für die Ebenen 
verantwortlich ist.


Liebe Grüße
Chris


======CODE================CODE===============CODE===============CODE==== 
==
======================================================================== 
==

    $regfile = "m162def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000



    '----------------------------------------------------------------------- 
--------------------------
    ' Ports auf Ausgang setzen
    '----------------------------------------------------------------------- 
--------------------------
      Config Spi = Hard , Data Order = Lsb , Master = Yes , Polarity = 
Low , Phase = 0 , Clockrate = 16



    '----------------------------------------------------------------------- 
--------------------------
    ' Variablen deklarieren
    '----------------------------------------------------------------------- 
--------------------------
   Dim Bild As Integer
   Dim Dauer As Integer
   Dim Ebene As Integer


   Dim Bild1(5) As Integer



    '----------------------------------------------------------------------- 
--------------------------
    ' Bilder
    '----------------------------------------------------------------------- 
--------------------------
    'Der Komplette Würfel leuchtet und es werden dazu die Ebenen 
durchgeschaltet

      Bild1(1) = 11111111111111111111111110000100
      Bild1(2) = 11111111111111111111111110001000
      Bild1(3) = 11111111111111111111111110010000
      Bild1(4) = 11111111111111111111111110100000
      Bild1(5) = 11111111111111111111111111000000

    '----------------------------------------------------------------------- 
--------------------------
    ' Hauptprogramm
    '----------------------------------------------------------------------- 
--------------------------
    Do



    For Bild = 0 To 10           ' Bilder durchzaehlen

      For Dauer = 0 To 27        ' Dauer des Bildes pro Durchlauf

        For Ebene = 1 To 5       ' 5 Ebenen durchmultiplexen


          Spiout Bild1(ebene) , 1      'Muster über spi ausgeben

    'Hier ist mein Proble, wie komme ich nun zum nächsten Array "Bild2" 
?


          Waitms 2  ' diese Ebene fuer 2 ms anzeigen ( ca. 500Hz)

        Next Ebene

      Next Dauer

    Next Bild

    Loop                                   ' Programm von vorne beginnen

    End

von mue-c (Gast)


Lesenswert?

> Dim Bild1(5) As Integer
> Bild1(1) = 11111111111111111111111110000100

Das passt nicht zusammen. Das Bascom sowas compiliert, ist Blödsinn.
Wenn du 32bit in einem Wert abspeichern willst, dann geht das über

Dim Bild1(5) As Long

Einen Binärwert zuweisen geht dann so

Bild1(1) = &B1111_1111_1111_1111_1111_1111_1000_0100 '_ ist nur 
Lesehilfe

> 'Hier ist mein Proble, wie komme ich nun zum nächsten Array "Bild2"

Was ist denn Bild2?
Bild1(2) wird durch die For-Schleife ausgegeben.
Wobei das wohl

SPIOut Bild1(ebene), 4

heißen muss, weil 4 Byte (1 Long) ausgegeben werden sollen.

von Christopher U. (quadratus)


Lesenswert?

Danke für die Antwort.
Ich habe die Vorschläge gleich mal in die Tat umgesetzt.
Hatte vorher schin "Dim Bild1(5) as Byte * 4" ausprobiert, hatte aber 
keinen Erfolg. Mit "Long" hat es Bascom aber gefressen :) .

Zu "Bild2" :
Bild2 ist noch nicht im Code Hinterlegt.
Aber im Prinzip soll es auch als Arry deklariert werden und dann, wenn
Bild1 in der Schleife abgearbeitet wurde an die Reihe kommen und dann 
Bild3 , 4, 5, usw.


Zu meinem Aufbau Bild1(1) soll Ebene1 meines Würfels und Bild1(2) Ebene2 
usw sein.

Danke nochmals
Chris

von mue-c (Gast)


Lesenswert?

> Bild2 ist noch nicht im Code Hinterlegt.
> Aber im Prinzip soll es auch als Arry deklariert werden und dann, wenn
> Bild1 in der Schleife abgearbeitet wurde an die Reihe kommen und dann
> Bild3 , 4, 5, usw.

dann lass den Index von Bild1 doch einfach weiterlaufen.
Da muss doch nicht unbedingt Bild2 stehen. Also so:

Dim Index As Byte
Dim Bild1(55) As Long

Bild1(1) = &B11111111111111111111111110000100
Bild1(2) = &B11111111111111111111111110001000
Bild1(3) = &B11111111111111111111111110010000
Bild1(4) = &B11111111111111111111111110100000
Bild1(5) = &B11111111111111111111111111000000
Bild1(6) = &B11111111111111111111111111000000
'...
Bild1(55) = &B11111111111111111111111111000000              '11 Bilder a 
5 Ebenen

    '----------------------------------------------------------------------- 
--------------------------
    ' Hauptprogramm
    '----------------------------------------------------------------------- 
--------------------------
Do
   Index = 0
   For Bild = 0 To 10                   ' Bilder durchzaehlen
      For Dauer = 0 To 27               ' Dauer des Bildes pro Durchlauf
         For Ebene = 1 To 5             ' 5 Ebenen durchmultiplexen
            Spiout Bild1(index + Ebene) , 4    'Muster über spi ausgeben
            Waitms 2       ' diese Ebene fuer 2 ms anzeigen ( ca. 500Hz)
         Next Ebene
      Next Dauer
      Incr Index
   Next Bild
Loop                                      ' Programm von vorne beginnen

Das Abspeichern der Bilder verbraucht ziemlich viel Platz im SRAM.
Alternativ kannst du die Bilder auch im Flash abspeichern (Data Befehl)

von Christopher U. (quadratus)


Lesenswert?

Stimmt eigentlich.... warum denk ich nur so kompliziert :)

Dacht es wäre vlt. übersichtlicher aber im Prinzip setze ich einfach 
alle 5 Zeilen einen Absatz und schon ist es wieder übersichtlich.

Spart zudem auch nochmal speicher, da die Deklarationen Wegfallen.

Das mit dem Flash hab ich in Bascom schon so eingestellt.

Für was hast du den Index eingebaut und was bedeutet "Incr"?

Ich nehme mal an um durch die Bilder durch zu zählen...
alle 5 Bilder wird Index um 1 erhöt, aber dann würde wenn das zweite 
Bild angezeigt werden soll das programm mit Bild1(2) beginnen und nicht 
mit Bild1(6) was ja der Anfang des 2ten Bildes wäre??

Danke für die Hilfe
Grüße Chris

von mue-c (Gast)


Lesenswert?

> Für was hast du den Index eingebaut und was bedeutet "Incr"?
Du willst ja eine gewisse Dauer durch die 5 Ebenen eines Bildes laufen 
und erst dann das nächste Bild aufrufen. Während der Zeit bleibt Index 
auf dem alten Wert. Erst nachdem Dauer hochgezählt hat, musst du zum 
nächsten Bild wechseln.
Incr bedeutet, um 1 erhöhen. Ist aber hier falsch. Du willst ja gleich 
um 5 erhöhen, also
Index = Index + 5

von mue-c (Gast)


Lesenswert?

Du kannst den Index auch weglassen und es so machen.

Do
   For Bild = 0 To 50 Step 5           ' Bilder durchzaehlen
      For Dauer = 0 To 27              ' Dauer des Bildes pro Durchlauf
         For Ebene = 1 To 5            ' 5 Ebenen durchmultiplexen
            Spiout Bild1(bild + Ebene) , 4    'Muster über spi ausgeben
            Waitms 2      ' diese Ebene fuer 2 ms anzeigen ( ca. 500Hz)
         Next Ebene
      Next Dauer
   Next Bild
Loop                                   ' Programm von vorne beginnen

von Christopher U. (quadratus)


Lesenswert?

Ok dann hatte ich das ja richtig verstanden.
Wird gleich in die Tat umgesetzt :) mal schauen ob das dann am Mittwoch 
klappt dann wird der Cube fertig verlötet das Board zum Ansteuern habe 
ich bereits fertig aufgebaut.

Vielen lieben dank für die Hilfe
Liebe Grüße Chris

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.