Hallo zusammen,
ich hatte letzens den schicken CRE-Podcast zum fnordlicht (CRE067) gehört. Und da ich auch ziemlich was übrig habe für so Lichtspielereien (leider nur als Konsument und nicht als Macher), hab ich mir erstmal den Bausatz bestellt und zusammengelötet.
Hardwareseitig (sprich das Löten) war auch alles kein Problem.
Jetzt wollt ich aber auch mal das Basisscript ändern und etwas damit rumspielen.
Nach der Doku von Sebastian liegt das Demoscript ja in testscript.h unter colorchange_red. Jetzt hab ich gesehen, dass darunter noch andere Scripts stehen. Als ersten Schritt wollte ich also erstmal alle zusammen packen und so eine schön lange Farbfolge bekommen. Ich hab also die Sachen aus colorchange_red_blue, green_flash usw. in colorchange_red gepackt. So siehts jetzt bei mir aus:
static const uint8_t colorchange_red[] PROGMEM = { MACRO_FADE_CHANNEL(CHANNEL_RED, 255, 0x200),
MACRO_WAIT(_BV(CHANNEL_RED)|_BV(CHANNEL_GREEN)|_BV(CHANNEL_BLUE)), MACRO_FADE_CHANNEL(CHANNEL_RED, 0, 0x040), MACRO_FADE_CHANNEL(CHANNEL_GREEN, 255, 0x040), MACRO_WAIT(_BV(CHANNEL_RED)|_BV(CHANNEL_GREEN)|_BV(CHANNEL_BLUE)), MACRO_FADE_CHANNEL(CHANNEL_GREEN, 0, 0x040), MACRO_FADE_CHANNEL(CHANNEL_BLUE, 255, 0x040), MACRO_WAIT(_BV(CHANNEL_RED)|_BV(CHANNEL_GREEN)|_BV(CHANNEL_BLUE)), MACRO_FADE_CHANNEL(CHANNEL_BLUE, 0, 0x040), MACRO_FADE_CHANNEL(CHANNEL_RED, 255, 0x040), MACRO_WAIT(_BV(CHANNEL_RED)|_BV(CHANNEL_BLUE)), MACRO_FADE_CHANNEL(CHANNEL_RED, 0, 0x040), MACRO_FADE_CHANNEL(CHANNEL_BLUE, 255, 0x040), MACRO_WAIT(_BV(CHANNEL_RED)|_BV(CHANNEL_BLUE)), MACRO_FADE_CHANNEL(CHANNEL_BLUE, 0, 0x040), MACRO_FADE_CHANNEL(CHANNEL_RED, 255, 0x040), MACRO_FADE_CHANNEL(CHANNEL_GREEN, 255, 0xf00), MACRO_WAIT(_BV(CHANNEL_GREEN)), MACRO_FADE_CHANNEL(CHANNEL_GREEN, 0, 0x100), MACRO_WAIT(_BV(CHANNEL_GREEN)), MACRO_SET_CHANNEL(CHANNEL_GREEN, 150), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_GREEN, 0), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 255), MACRO_SET_CHANNEL(CHANNEL_GREEN, 0), MACRO_SET_CHANNEL(CHANNEL_BLUE, 0), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 0), MACRO_SET_CHANNEL(CHANNEL_GREEN, 255), MACRO_SET_CHANNEL(CHANNEL_BLUE, 0), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 0), MACRO_SET_CHANNEL(CHANNEL_GREEN, 0), MACRO_SET_CHANNEL(CHANNEL_BLUE, 255), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 128), MACRO_SET_CHANNEL(CHANNEL_GREEN, 0), MACRO_SET_CHANNEL(CHANNEL_BLUE, 0), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 0), MACRO_SET_CHANNEL(CHANNEL_GREEN, 128), MACRO_SET_CHANNEL(CHANNEL_BLUE, 0), MACRO_SLEEP(125), MACRO_SET_CHANNEL(CHANNEL_RED, 0), MACRO_SET_CHANNEL(CHANNEL_GREEN, 0), MACRO_SET_CHANNEL(CHANNEL_BLUE, 128), MACRO_SLEEP(125), MACRO_JUMP(-47) };
Die Frage ist nun, wie kriege ich dieses Script in den Atmel? Ich dachte, mit "gcc static_scripts.c" (bzw. avr-gcc ...) könnte ich es einfach kompilieren.
Bei dem ersten Versuch ists natürlich schon daran gescheitert, dass einige Dateien nicht gefunden wurden (für libc ?), aber da konnte mir Sebastians Doku auch weiterhelfen (Makefile anpassen).
Aber ich bekomme immernoch nur die folgenden Meldungen:
treboriks@treboriks-desktop:~/Desktop/fnordlicht_software/firmware/c/fnordlicht-ng-0.2$ avr-gcc static_scripts.c In file included from static_scripts.c:28: config.h:40:2: error: #error please define F_CPU! config.h:45:2: error: #error "this cpu isn't supported yet!" In file included from static_scripts.h:36, from static_scripts.c:32: /usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/io.h:332:6: warning: #warning "device type not defined" In file included from static_scripts.h:38, from static_scripts.c:32: /usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/eeprom.h:172:3: error: #error "No write enable bit known for this device's EEPROM."
Wie soll ich denn die CPU definieren? Irgendwo hab ich gelesen, das #define F_CPU 1000000 für die Atmels der Standartwert wäre, aber damit spar ich mir nur den Felher: please define CPU. Unterstützt wird dieser Wert wohl auch nicht.
Wo ich gucken kann, was es mit den anderen Fehlern auf sich hat, weiss ich auch nich, weil ich nicht ausmachen kann, wofür die /../../ stehen. /4.2.1/ hat mehrere Unterverzeichnisse, in denen anscheinend gepackte Dateien liegen, bei Versuch diese zu öffnen, erscheint in der Konsole aber die Fehlermeldung: ERROR: Communication problem with ark, it probably crashed.
Ist der Weg, den ich verfolge denn überhaupt der richtige Ansatz oder lieg ich schon grundsätzlich falsch und sollte bevor ich mich weiterwage erst C, den Umgang mit Linux und den ganzen Abhängigkeiten untereinander lernen?
Was die einzelnen Befehle in dem Demoscript bewirken, kann ich mir schon denken (bis auf die genaue Bedeutung der Geschindigkeiten (0x...), hier scheint wohl, je höher der Wert, desto schneller).
Mein Problem is nur (vorerst), wie bring ichs dem fnordlicht bei? Wär toll, wenn mich jemand erleuchten könnte. Ich will mich in der nächsten Zeit zwar eh mehr mit der Funktionsweise des fnordlicht befassen, aber wenigstens die Farbabläufe würd ich vorher schon ändern können.
Vielen Dank, wenn ihr bis hierher durchgehalten habt. Ciao treb _______________________________________________________________________ Jetzt neu! Schützen Sie Ihren PC mit McAfee und WEB.DE. 30 Tage kostenlos testen. http://www.pc-sicherheit.web.de/startseite/?mc=022220
Hi Robert,
* Robert treboriks@web.de wrote:
Hardwareseitig (sprich das Löten) war auch alles kein Problem.
Wunderbar. Dann bist du schonmal ueber die erste Huerde drueber :)
Die Frage ist nun, wie kriege ich dieses Script in den Atmel? Ich dachte, mit "gcc static_scripts.c" (bzw. avr-gcc ...) könnte ich es einfach kompilieren.
Das ist richtig, allerdings kann der Atmel nur mit dem Farbscript alleine nicht viel anfangen, es fehlt der Rest der Firmware. Damit alles korrekt kompiliert und zusammengelinkt wird, gibt es fuer das Programm 'make' ein Script, 'Makefile', was bei meiner Firmware auch dabeiliegt. Du musst also nur noch 'make' im Verzeichnis der Firmware aufrufen, und das Programm erledigt den Rest.
Das Kompilieren und Linken ist kein so ganz einfacher Prozess, wenn das Programm, was am Ende rauskommen soll, in mehrere C-Dateien unterteilt ist, deshalb laesst man das besser ein Programm tun ;)
Raus kommt dann eine Datei namens 'fnordlicht.hex', die muesstest du auf den Atmel flashen, zum Beispiel ueber die serielle Schnittstelle (und einen Pegelkonverter, hast du einen?).
Probier mal, die .hex-Datei zu erzeugen, dann schauen wir weiter.
Gruss, - fd0