Lightcube/Firmware
Aus C3MAWiki
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)