Digi-Dot-Booster am Arduino – ganz einfach

Nach all den Experimenten mit  dem Digi-Dot-Booster am Raspberry Pi und dem STM32 Nucleo Board war irgendwann klar, dass auch an Arduino kein Weg vorbei führt. Auf der Produktseite vom Digi-Dot-Booster gibt es schon viele Beispiele für die Arduino Plattform, mit der man schnell verschiedene Effekte zauben kann. Dann habe ich einen genauen Blick auf den Code geworfen und sah da Ver­bes­se­rungs­po­ten­zi­al. So ist die Arduino DD-Booster-Library entstanden.

Die Arduino Plattform soll vor allem Neulingen die Programmierung von Mikrocontrollern erleichtern. Die Arduino Programme (Sketches) haben eine einfache Struktur: die Funktion setup() dient der Initialisierung beim Start und die Funktion loop() ist der Körper des Programms – eine Schleife, die periodisch aufgerufen wird.

So sollen im Sketch nach Möglichkeit auch nur die wichtigsten Ausdrücke stehen, die den Ablauf des Programms bestimmen, und alles andere kann in eine Bibliothek ausgelagert werden. Genau das wird mir der DD-Booster-Library erreicht.
Die Bibliothek kapselt die ganze SPI Bus Kommunikation inkl. dem Datenprotokoll mit dem Digi-Dot-Booster und stellt für die Steuerung einfache Funktionen zur Verfügung.

Der Anschluss ist bereits im Datasheet vom Digi-Dot-Booster dokumentiert und sollte daher keine Probleme bereiten.

Die Bibliothek kann direkt über den eingebauten Library Manager installiert werden.

Der Library Manager ist über Sketches/Include Library/Manage Libraries... ereeichbar

Der Library Manager ist über Sketch/Include Library/Manage Libraries… erreichbar

Im Sucheingabefeld dd-booster eintippen, in der Liste den Eintrag auswählen und den Button "Intall" klicken.

Im Sucheingabefeld dd-booster eintippen, in der Liste den Eintrag auswählen und per „Install“ Button die Installation einleiten.

Der Code der Bibliothek liegt auf GitHub. Dort ist ebenfalls die Dokumentation abgelegt. Verbesserungen, neue Beispiele oder sonstige Anmerkungen sind wie immer willkommen.

Neben der Kapselung der Befehle, die der DD-Booster unterstützt, enthält die Bibliothek weitere nützliche Funktionen. Die oft gebrauchten Funktionen clearLed() und clearAll schalten eine LED bzw. alle LEDs aus, in dem sie die Farbe auf RGB(0,0,0) setzen. Die Funktion setGradient() berechnet und setzt einen Farbverlauf zwischen zwei LEDs von einer Farbe in die andere. Mit dieser Funktion ist das Beispiel WaterDrop umgesetzt.

Die Verwendung der Library ist recht einfach und gut dokumentiert, hier folgt auch eine kurze Anleitung dazu anhand des Blinker-Beispiels. Das TurnSignal Beispiel kann nach der Installation der Bibliothek direkt aufgerufen werden.

Library_examples

Für die Steuerung des Digi-Dot-Boosters wird zunächst ein Objekt der Klasse DDBooster erzeugt. Dabei wird die SPI Schnittstelle initialisiert und auf 12 MHz, MSB first, mode 0 eingestellt. 12 MHz ist der maximal mögliche Wert und je nach Arduino Version wird von der Plattform automatisch entschieden, ob dieser Wert erreicht werden kann. Ansonsten wird der jeweils mögliche niedrigerer Wert gewählt.

Standardmäßig verwendet die Bibliothek den SS Pin der SPI Schnittstelle für die Steuerung der ChipSelect Leitung. Falls jemand einen anderen digitalen Pin dazu verwenden möchte, kann mit der Funktion configurePins() die Bibliothek entsprechend konfigurieren. Der erste Parameter legt dabei den neuen ChipSelect Pin fest, der zweite definiert welcher Pin für einen Hardware Reset des DD-Boosters mittels der Funktion reset() verwendet wird. Dazu muss der entsprechende digitale Pin mit dem RESET Pin des DD-Boosters verbunden werden. Ohne explizite Zuweisung des Pins für den Reset hat der Aufruf von reset() keine Auswirkung.

Als Nächstes muss dem DD-Booster mitgeteilt werden, wie viele LEDs er ansteuern soll – gültig Werte sind von 0 bis 256. Das wird mit der Funktion init() gemacht. Für das Beispiel werden 20 LEDs auf einem ws2812 Stripe festgelegt. Zuvor werden global noch zusätzliche Variablen definiert: led_count für die Anzahl der LEDs, index für die aktuelle Position der angesteuerten LED und color definiert die zu verwendende Farbe. Nach dem init() Aufruf werden alle LEDs ausgeschaltet, um einen „sauberen“ Stand zu haben. Das wird mit den Funktionen clearAll()und show() erreicht. Die Methode show()spielt eine große Rolle, denn erst nach ihrem Aufruf werden alle vorherigen Änderungen auch übernommen und die LEDs letztendlich angesteuert. Letzte Zeile in der setup() Funktion setzt für die nachfolgenden Aufrufe die zu verwendende Farbe der LEDs.

Die ganze „Magie“ passiert nun in der loop() Funktion. Bei jedem Aufruf wird jeweils für eine LED an der aktuellen Position die Farbe gesetzt und per show() zur Anzeige gebracht. Danach wird untersucht, ob die aktuelle Position der letzten Stelle in der LED-Reihe entspricht. Bei 20 LEDs wäre das 19, da die Zählung immer mit 0 beginnt. Falls das der Fall ist, wird der Index wieder auf 0 (die erste LED) zurückgesetzt und alle LEDs ausgeschaltet. Zusätzlich wird eine Pause von 500 Millisekunden zwischen der Durchläufen eingelegt. Da die Funktion clearAll() intern die Farbe auf RGB(0,0,0) setzt, um alle LEDs auszuschalten, muss das Farbregister des DD-Boosters erneut mit der richtigen Farbe befüllt werden. [An der Stelle wäre es wahrscheinlich sinnvoll, wenn die Bibliothek das Wiederherstellen des Farbregisters nach dem Aufruf der clear-Methoden automatisch selbst macht. Das wird für die nächste Version angepasst.]
Und falls die aktuelle Position das Ende nicht erreicht hat, wird sie einfach um eins erhöht, damit beim erneuten loop-Durchlauf die nächste LED gesetzt wird. Eine Pause von 10ms am Ende legt fest wie schnell der Blinker blinkt.

Mit der Bibliothek werden zwei Beispiele mitgeliefert: WaterDrop und das gerade besprochene TurnSignal. Künftig sind weitere Beispiele und evtl. auch Funktionen geplant. Die Aktualisierung geschieht dann einfach über den Library Manager der Arduino Entwicklungsumgebung.

Zum Schluss noch die beiden Beispiele als Videos.

 

Dieser Beitrag wurde unter LED-Technik, Projekte veröffentlicht. Setze ein Lesezeichen auf den Permalink.

9 Antworten auf Digi-Dot-Booster am Arduino – ganz einfach

  1. Folker Stange Folker Stange sagt:

    Ich will auch solche Blinker am Auto – sehr nice !

  2. Erich sagt:

    Hallo miteinander,
    bin absoluter Neuling und hab mich am Digi-Dot-Booster und Water Drop versucht.
    Davor hab ich FirstLight zum Laufen gebracht, bei den beiden neuen Beispielen bekomme ich eine Fehlermeldung beim Kompilieren:

    C:\Users\Erich\Documents\Arduino\libraries\DIGI-DOT-BOOSTER_Library\src/DDBooster.h:11:17: fatal error: SPI.h: No such file or directory

    mit Google komm ich da nicht weiter, vielleicht kann mir ja hier jemand weiterhelfen
    Danke

  3. Gamadril sagt:

    Das scheint ein Bug in der Arduino IDE zu sein. Bibliotheken werden nur dann verwendet zum Bauen, wenn sie auch im Sketch referenziert werden. Hinzufügen von #include am Anfang vom Sketch sollte helfen. Ich werde die beiden Beispiele entsprechend anpassen für die nächste Version.

  4. Erich sagt:

    Danke, aber leider scheint das nichts zu bringen: #include

  5. Gamadril sagt:

    Da wurde leider ein wichtiger Teil „verschluckt“. Es muss heißen:
    #include <SPI.h>

  6. Gamadril sagt:

    @Erich: Ich habe gerade Arduino 1.6.9 unter Windows XP frisch installiert und die Beispiele ohne Probleme kompiliert bekommen. Evtl. helfen ein paar Infos zu Deiner Umgebung und Installation bei der Fehlersuche weiter.

  7. Erich sagt:

    ja da hab ich was verschluckt, aber nur in der Meldung.
    #include habe ich so eingefügt:

    #include
    #include
    // create booster object
    DDBooster booster;

    OS: Windows 10
    Board: SparkFun Pro Micro

    Fehlermeldung:
    Arduino: 1.6.9 (Windows 10), Board: „SparkFun Pro Micro, ATmega32U4 (5V, 16 MHz)“

    C:\arduino-1.6.8\ARDUINO\arduino-builder -dump-prefs -logger=machine -hardware „C:\arduino-1.6.8\ARDUINO\hardware“ -hardware „C:\Users\Erich\AppData\Local\Arduino15\packages“ -hardware „C:\Users\Erich\Documents\Arduino\hardware“ -tools „C:\arduino-1.6.8\ARDUINO\tools-builder“ -tools „C:\arduino-1.6.8\ARDUINO\hardware\tools\avr“ -tools „C:\Users\Erich\AppData\Local\Arduino15\packages“ -built-in-libraries „C:\arduino-1.6.8\ARDUINO\libraries“ -libraries „C:\Users\Erich\Documents\Arduino\libraries“ -fqbn=sparkfun:avr:promicro:cpu=16MHzatmega32U4 -ide-version=10609 -build-path „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp“ -warnings=all -prefs=build.warn_data_percentage=75 -verbose „C:\Users\Erich\Documents\Arduino\DigiDotBooster\DigiDotBooster.ino“
    C:\arduino-1.6.8\ARDUINO\arduino-builder -compile -logger=machine -hardware „C:\arduino-1.6.8\ARDUINO\hardware“ -hardware „C:\Users\Erich\AppData\Local\Arduino15\packages“ -hardware „C:\Users\Erich\Documents\Arduino\hardware“ -tools „C:\arduino-1.6.8\ARDUINO\tools-builder“ -tools „C:\arduino-1.6.8\ARDUINO\hardware\tools\avr“ -tools „C:\Users\Erich\AppData\Local\Arduino15\packages“ -built-in-libraries „C:\arduino-1.6.8\ARDUINO\libraries“ -libraries „C:\Users\Erich\Documents\Arduino\libraries“ -fqbn=sparkfun:avr:promicro:cpu=16MHzatmega32U4 -ide-version=10609 -build-path „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp“ -warnings=all -prefs=build.warn_data_percentage=75 -verbose „C:\Users\Erich\Documents\Arduino\DigiDotBooster\DigiDotBooster.ino“
    „C:\arduino-1.6.8\ARDUINO\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10609 -DARDUINO_AVR_PROMICRO -DARDUINO_ARCH_AVR -DUSB_VID=0x1b4f -DUSB_PID=0x9206 ‚-DUSB_MANUFACTURER=“Unknown“‚ ‚-DUSB_PRODUCT=“SparkFun Pro Micro“‚ „-IC:\Users\Erich\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.11\cores\arduino“ „-IC:\Users\Erich\Documents\Arduino\hardware\sparkfun\avr\variants\promicro“ „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp\sketch\DigiDotBooster.ino.cpp“ -o „nul“
    „C:\arduino-1.6.8\ARDUINO\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10609 -DARDUINO_AVR_PROMICRO -DARDUINO_ARCH_AVR -DUSB_VID=0x1b4f -DUSB_PID=0x9206 ‚-DUSB_MANUFACTURER=“Unknown“‚ ‚-DUSB_PRODUCT=“SparkFun Pro Micro“‚ „-IC:\Users\Erich\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.11\cores\arduino“ „-IC:\Users\Erich\Documents\Arduino\hardware\sparkfun\avr\variants\promicro“ „-IC:\Users\Erich\Documents\Arduino\libraries\DIGI-DOT-BOOSTER_Library\src“ „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp\sketch\DigiDotBooster.ino.cpp“ -o „nul“
    „C:\arduino-1.6.8\ARDUINO\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=atmega32u4 -DF_CPU=16000000L -DARDUINO=10609 -DARDUINO_AVR_PROMICRO -DARDUINO_ARCH_AVR -DUSB_VID=0x1b4f -DUSB_PID=0x9206 ‚-DUSB_MANUFACTURER=“Unknown“‚ ‚-DUSB_PRODUCT=“SparkFun Pro Micro“‚ „-IC:\Users\Erich\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.11\cores\arduino“ „-IC:\Users\Erich\Documents\Arduino\hardware\sparkfun\avr\variants\promicro“ „-IC:\Users\Erich\Documents\Arduino\libraries\DIGI-DOT-BOOSTER_Library\src“ „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp\sketch\DigiDotBooster.ino.cpp“ -o „C:\Users\Erich\AppData\Local\Temp\build6c0929f6e38f656d85afd5327fcfedcc.tmp\preproc\ctags_target_for_gcc_minus_e.cpp“
    In file included from C:\Users\Erich\Documents\Arduino\DigiDotBooster\DigiDotBooster.ino:2:0:

    C:\Users\Erich\Documents\Arduino\libraries\DIGI-DOT-BOOSTER_Library\src/DDBooster.h:11:17: fatal error: SPI.h: No such file or directory

    #include

    ^

    compilation terminated.

    Bibliothek DIGI-DOT-BOOSTER_Library in Version 1.0.0 im Ordner: C:\Users\Erich\Documents\Arduino\libraries\DIGI-DOT-BOOSTER_Library wird verwendet
    exit status 1
    Fehler beim Kompilieren für das Board SparkFun Pro Micro.

  8. Erich sagt:

    es wird schlimmer !
    Das Board „SparkFun Pro Micro“ funktioniert jetzt nur mehr wenn ich Adruinu Yun als Board einstelle! ???

  9. Gamadril sagt:

    Habe leider kein Windows 10 zum Testen, habe aber das Board bei mir konfiguriert und das TurnSignal Beispiel mit Erfolg kompilieren lassen. Ich kann es mir nur so erklären, dass die SPI Bibliothek bei Dir aus irgendeinem Grund nicht mitinstalliert wurde, evtl. beim Update von 1.6.8 auf 1.6.9 – der Ordner Name deutet darauf hin, dass da mal eine alte Version war. Versuch mal die 1.6.9 Version ohne Installer (https://downloads.arduino.cc/arduino-1.6.9-windows.zip) zu starten, die Board-Config und die DD-Booster Bibliothek zu installieren und mal testen, ob es dann geht.

Schreibe einen Kommentar