Lightcube/Firmware

Aus C3MAWiki

Wechseln zu: Navigation, Suche
An diesem Projekt wurde bereits gearbeitet, momentan kann sich jedoch aufgrund eines Mangels an Zeit, Lust oder Geld niemand damit beschäftigen. Wenn du das Projekt übernehmen möchtest oder Fragen dazu hast, wende dich an TheMaverick.

Hier ist meine funktionierende Firmware für den Cube. Der Code wurde mit Bascom / Ponyprog auf den AVR gespeichert.

$regfile = "m32def.dat"                                     'AVR Chip configuration
$crystal = 16000000                                         'AVR soll auf 16MHz laufen
 
Baud = 28800                                                'Serielle Schnittstelle auf 28.800 Baud setzen
 
Config Porta = OUTPUT                                       'Kanäle auf Output setzen
Config Portb = OUTPUT
Config Portc = OUTPUT
 
DECLARE SUB Activate_led(BYVAL Led AS STRING)
DECLARE SUB Demomovie(BYVAL Demo AS STRING , BYVAL D_speed AS STRING )
 
DIM Eingabe AS STRING * 364
DIM I AS INTEGER
DIM Leds(64) AS STRING * 3
DIM Count AS INTEGER
DIM Typsetzer AS Byte                                       'typ 0 = led, 1 = speed, 2 = demo
DIM Waiter AS INTEGER
DIM Speed AS STRING * 3
DIM Schnitt AS STRING * 1
DIM Movie AS STRING * 1
 
DO
   INPUT Eingabe                                            'Texteingabe für die Darstellung erwarten
 
   IF Left(eingabe , 1) = "a" AND Right(eingabe , 1) = "z" THEN
 
      'Variablen zur¸cksetzen start
      Speed = ""
      Waiter = 0
      Typsetzer = 0
      FOR I = 0 TO Count
         Leds(i) = ""
      NEXT I
      Count = 0
      Movie = ""
      'Variablen zur¸cksetzen ende
 
      FOR I = 0 TO LEN(eingabe) STEP 1
         Schnitt = Mid(eingabe , I , 1)
         SELECT CASE Schnitt
            CASE "x"
               Typsetzer = 0                                'auf led setzen
               Count = Count + 1
            CASE "a"
               'Typsetzer = 0                                'auf led setzen
 
            CASE "m"
               Typsetzer = 2                                'auf demo setzen
 
            CASE "s"
               Typsetzer = 1                                'auf speed setzen
 
            CASE "z"
               'Typsetzer = 0                                'auf led setzen
               EXIT FOR
 
            CASE ELSE
               IF Typsetzer = 1 THEN                        'wenn speed dann
                  Speed = Speed + Mid(eingabe , I , 1)
               ELSEIF Typsetzer = 2 THEN
                  Movie = Movie + Mid(eingabe , I , 1)
               ELSE                                         'wenn led dann
                  Leds(count) = Leds(count) + Mid(eingabe , I , 1)
               END IF
         END SELECT
      NEXT I
   END IF
 
   Waiter = VAL(speed)
   
   IF Waiter < 1 THEN
      Waiter = 1
   END IF
 
   WHILE Ischarwaiting() = 0
      IF LEN(movie) > 0 THEN
 
         CALL Demomovie(movie , Speed)
 
      ELSE
 
         FOR I = 0 TO Count STEP 1
 
            IF LEN(leds(i)) > 0 THEN
               CALL Activate_led(leds(i))                   'led anzeigen, 3 Zahlen ¸bergeben als string z.B.: 123
               Waitms Waiter
            END IF
 
            IF 0 <> Ischarwaiting() THEN
               EXIT FOR
               EXIT WHILE
            END IF
 
         NEXT I
 
      END IF
   WEND
   Porta = 0
   Portb = 0
   Portc = 0
LOOP
 
SUB Activate_led(BYVAL Led AS STRING * 3)
 
   DIM Istx_s AS STRING * 1
   DIM Istx AS Byte
   DIM Isty_s AS STRING * 1
   DIM Isty AS Byte
   DIM Istz_s AS STRING * 1
   DIM Istz AS Byte
 
   Porta = 0
   Portb = 0
   Portc = 0
 
   Istx_s = Mid(led , 1 , 1)                                'erste Ziffer auslesen
   Istx = VAL(istx_s) - 1
 
   Isty_s = Mid(led , 2 , 1)                                'zweite Ziffer auslesen
   Isty = VAL(isty_s) - 1
 
   Istz_s = Mid(led , 3 , 1)                                'dritte Ziffer auslesen
   Istz = VAL(istz_s) - 1
 
   Porta.istx = 1
   Portb.isty = 1
   Portc.istz = 1
 
END SUB
 
'//// DEMOMOVIES ////////////////////////////////////////////////////////////////////
 
SUB Demomovie(BYVAL Demo AS STRING , BYVAL D_speed AS STRING * 3)
   DIM Demomovie AS INTEGER
   Demomovie = VAL(demo)
 
   DIM Demospeed AS INTEGER
   Demospeed = VAL(d_speed)
 
   SELECT CASE Demomovie
      CASE 1
         FOR I = 0 TO 7
            Porta = 0
            Portb = 0
            Portc = 0
 
            Porta.i = 1
            Portb.i = 1
            Portc.i = 1
 
            IF 0 <> Ischarwaiting() THEN
               EXIT FOR
               EXIT FUNCTION
               EXIT FOR
               EXIT WHILE
            END IF
 
            Waitms Demospeed
 
            IF 0 <> Ischarwaiting() THEN
               EXIT FOR
               EXIT FUNCTION
               EXIT FOR
               EXIT WHILE
            END IF
 
         NEXT I
      CASE 2
         DIM Demo2image(56) AS STRING * 3
         Demo2image(1) = "111"
         Demo2image(2) = "222"
         Demo2image(3) = "333"
         Demo2image(4) = "444"
         Demo2image(5) = "555"
         Demo2image(6) = "666"
         Demo2image(7) = "777"
         Demo2image(8) = "888"
 
         Demo2image(9) = "788"
         Demo2image(10) = "688"
         Demo2image(11) = "588"
         Demo2image(12) = "488"
         Demo2image(13) = "388"
         Demo2image(14) = "288"
         Demo2image(15) = "188"
         Demo2image(16) = "277"
         Demo2image(17) = "366"
         Demo2image(18) = "455"
         Demo2image(19) = "544"
         Demo2image(20) = "633"
         Demo2image(21) = "722"
         Demo2image(22) = "811"
 
         Demo2image(23) = "821"
         Demo2image(24) = "831"
         Demo2image(25) = "841"
         Demo2image(26) = "851"
         Demo2image(27) = "861"
         Demo2image(28) = "871"
         Demo2image(29) = "881"
         Demo2image(30) = "772"
 
         Demo2image(31) = "663"
         Demo2image(32) = "554"
         Demo2image(33) = "445"
         Demo2image(34) = "336"
         Demo2image(35) = "227"
         Demo2image(36) = "118"
         Demo2image(37) = "218"
 
         Demo2image(38) = "318"
         Demo2image(39) = "418"
         Demo2image(40) = "518"
         Demo2image(41) = "618"
         Demo2image(42) = "718"
         Demo2image(43) = "818"
         Demo2image(44) = "727"
 
         Demo2image(45) = "636"
         Demo2image(46) = "545"
         Demo2image(47) = "454"
         Demo2image(48) = "363"
         Demo2image(49) = "272"
         Demo2image(50) = "181"
 
         Demo2image(51) = "171"
         Demo2image(52) = "161"
         Demo2image(53) = "151"
         Demo2image(54) = "141"
         Demo2image(55) = "131"
         Demo2image(56) = "121"
 
         FOR I = 1 TO 56
 
            CALL Activate_led(demo2image(i))
 
            IF 0 <> Ischarwaiting() THEN
               EXIT FOR
               EXIT FUNCTION
               EXIT FOR
               EXIT WHILE
            END IF
 
            Waitms Demospeed
 
            IF 0 <> Ischarwaiting() THEN
               EXIT FOR
               EXIT FUNCTION
               EXIT FOR
               EXIT WHILE
            END IF
 
         NEXT I
   END SELECT
 
END SUB
 
 
 
 
 
 
END

--TM 22:49, 2. Dez. 2006 (CET)

Meine Werkzeuge