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
> 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.
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
> 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)
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
> 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.