Für Halloween: Beleuchtetes Kürbis-Gesicht mit Nano-Axe-Board
Seite 4: Picaxe-Firmware
Unsere
Software zum Herunterladen
ist voreingestellt für die Verwendung des APA102-Streifens mit sechs LEDs und kommt in zwei Varianten: Im Beispiel Halloween.bas läuft eine kleine Animation ab, in der zuerst das Kürbisgesicht schrittweise voll erleuchtet wird und anschließend mit den Augen zwinkert. Hier können eigene Effekte nach Lust und Laune programmiert werden. Im zweiten Beispiel Halloween_Zufall.bas erfolgt eine zufällige Steuerung der Farben und Wartezeiten zwischen den LED-Umschaltvorgängen mittels des random
-Befehls. Bis auf diesen Unterschied sind die Programme ansonsten gleich aufgebaut. Wer das Projekt mit einem anderen Picaxe-Chip als dem 08M2 nachbaut, muss noch die Pinbezeichnungen im Programm ändern.
Datenübertragung und LED-Streifen festlegen
Zu Beginn der Programme werden die beiden Pins für Daten und Takt der LEDs definiert, angelehnt an die SPI-Einheit im Picaxe. Der Taktaushang CLK liegt fix am Pin C.1 des 08M2. Der Datenausgang SDO ist normalerweise an C.0 herausgeführt – dieser Pin ist allerdings auch der serielle Ausgang, über den Debugausgaben mit den Befehlen debug
oder sertxd
ablaufen. Um diese Funktion weiter nutzen zu können, mappen wir SDO auf den Pin C.4 um. Dies erfolgt über das Bit APFCON_SFR
, das wir im Unterprogramm initSpi
mit dem Befehl pokesfr
konfigurieren.
Der LED-Typ (APA102 oder WS2801) wird mit #define APA102
bzw. #define WS2801
angegeben. Im Code ist beides vorbereitet, sodass die falsche Angabe gelöscht oder mit ;
auskommentiert werden kann. Bei symbol NUMBER_OF_LEDS
wird die Gesamtanzahl der LEDs eingetragen, hier 6
. Falls die LEDs zu grell leuchten, kann mit symbol LED_DEFAULT_BRIGHTNESS
die Helligkeit mit hexadezimalen Angaben angepasst werden: Der Wert 0xFF
bedeutet volle Helligkeit.
Farbmuster übertragen
Um den LEDs im Programmablauf einfacher unterschiedliche Farbwerte zuteilen zu können, haben wir noch mit #define
die Bezeichnungen LED_AUGE_1
bis LED_MUND
vergeben. Falls die Verdrahtung der LEDs in anderer Reihenfolge erfolgt ist, können in diesen Defines
die Nummern angepasst werden.
Die Farbwerte für die LEDs werden zunächst nur per bptr
-Zugriff im RAM des Picaxe abgespeichert. Um die vorbereiteten Werte an die LEDs zu übertragen, muss das Makro UPDATE_AND_WAITTIME(t
) aufgerufen werden, das als Parameter t
die anschließend gewünschte Wartezeit in Millisekunden erwartet. Ab dem Label main
ist zu sehen, wie die Ablaufkette aussieht: es werden die gewünschten Änderungen im LED-Muster über die oben genannten Defines
im RAM gesetzt, wobei die Werte unveränderter LEDs im RAM erhalten bleiben. Anschließend werden die Änderungen mit UPDATE_AND_WAITTIME(t)
auf die LEDs übertragen.
Um das fertige Programm auf den Picaxe-Chip zu spielen, gibt es verschiedene Programmierumgebungen, die wir im Sonderheft "Picaxe Special" genauer erklären.
(hch)