Für Halloween: Beleuchtetes Kürbis-Gesicht mit Nano-Axe-Board

Seite 4: Picaxe-Firmware

Inhaltsverzeichnis

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.

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.

So sieht der Kürbis im Dunklen aus.

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.

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)