Software und Inbetriebnahme
Achtung:
Aktuelle Informationen zur LED Stripe finden Sie unter www.ledstripe.net/!
Software
Die Software für die LED-Stripe-Platine ist als Quellcode und in kompilierter Form als hex-Datei verfügbar. Entwickelt und getestet wurde die Software unter Linux mit dem frei verfügbaren Compiler avr-gcc in der Version 4.3.4 und der avr-libc Version 1.6.7. Die hex-Datei ist die fertig übersetzte Software und kann direkt zur Programmierung des Mikrocontrollers verwendet werden. Zum Programmieren kann z.B. das freie Tool avrdude verwendet werden.
Seit Version 1.2 gibt es neben der UART/RS232-Schnittstelle alternativ die Möglichkeit die Platine als I2C-Slave zu verwenden. Im Quellcode gibt es in der Datei main.h zwei Defines (USE_UART und USE_TWI bzw. USE_TWI_SLAVE und USE_TWI_MASTER), die festlegen, welche Schnittstelle verwendet werden soll. Wird die Zeile „#define USE_UART 1“ einkommentiert, wird UART/RS232 verwendet. Entsprechend wird die I2C-Schnittstelle durch Einkommentieren der jeweiligen TWI-Defines (TWI=Two Wire Interface) aktiviert. Es kann jeweils nur eine der beiden Möglichkeiten gewählt werden. Für beide Schnittstellen gibt es eine fertig übersetzte hex-Datei. Weitere Änderungen sind in der Datei version.txt im Quellcode-Archiv nachzulesen.
Seit Version 2.0 gibt es die Möglichkeit alle Einstellungen und die Programmierung eigener Lichteffekte mit dem PC-Programm LED Stripe Tool vorzunehmen.
Eine Liste mit den Änderungen zwischen den Versionen gibt es in der Datei version.txt im Quellcode-Archiv.
LED-Stripe Firmware Quellcode Version 2.3
LED-Stripe Firmware UART Hex-Datei Version 2.3
LED-Stripe Firmware I2C Hex-Datei Version 2.3 (ungetestet)
(alte Versionen:
Quellcode Version 2.2, UART Hex-Datei Version 2.2, I2C Hex-Datei Version 2.2,
Quellcode Version 2.1, UART Hex-Datei Version 2.1, I2C Hex-Datei Version 2.1,
Quellcode Version 1.2 (tar.bz2), Quellcode Version 1.2 (zip), UART Hex-Datei Version 1.2, I2C Hex-Datei Version 1.2,
Quellcode Version 1.1 (tar.bz2), Quellcode Version 1.1 (zip), Hex-Datei Version 1.1)
Fuse-Einstellungen
Damit die Software richtig läuft, müssen die Fuses-Bytes des Mikrocontrollers wie folgt gesetzt werden:
Low-Fuse-Byte | |
---|---|
CKDIV8 = unprogrammed | Clock-Teiler aus |
CKOUT = unprogrammed | Clock-Ausgang aus |
SUT1 = programmed | Start-Up-Zeiten für BOD |
SUT0 = programmed | Start-Up-Zeiten für BOD |
CKSEL3 = programmed | 8 MHz internal RC oscillator |
CKSEL2 = programmed | 8 MHz internal RC oscillator |
CKSEL1 = unprogrammed | 8 MHz internal RC oscillator |
CKSEL0 = programmed | 8 MHz internal RC oscillator |
.
High-Fuse-Byte | |
---|---|
RSTDISBL = unprogrammed | Reset ein |
DWEN = unprogrammed | DebugWire aus |
SPIEN = programmed | Programmierung per SPI ein |
WDTON = unprogrammed | Watchdog aus |
EESAVE = programmed | EEProm bei Chip-Erase erhalten |
BODLEVEL2 = unprogrammed | Brown-Out-Detection ein (4,3V) |
BODLEVEL1 = programmed | Brown-Out-Detection ein (4,3V) |
BODLEVEL0 = programmed | Brown-Out-Detection ein (4,3V) |
Mit avrdude können die Fuses wie folgt richtig gesetzt werden:
avrdude -p attiny84 -c <programmer> -P <port> -U lfuse:w:0xC2:m -U hfuse:w:0xD4:m
(z.B. mit der SerCon von Mikrokopter: avrdude -p attiny84 -c ponyser -P /dev/ttyS0 -U lfuse:w:0xC2:m -U hfuse:w:0xD4:m)
Beschreibung der UART-Schnittstelle
(Folgende Beschreibung trifft nur auf die Firmware-Version 1.2 zu! Ab Version 2.0 benutzen Sie bitte das LED Stripe Tool zum Konfigurieren der LED Stripe-Platine.)
Die UART-Schnittstelle kann nur verwendet werden, wenn die Software mit UART-Unterstützung kompiliert bzw. die entsprechende hex-Datei verwendet wird.
Die LED-Stripe-Platine kann über die serielle Schnittstelle konfiguriert werden. Zum Anschluss an den PC ist dafür ein entsprechender Pegelwandler notwendig, der die 5V-Pegel auf RS232-konforme Pegel umsetzt. Die Übertragung arbeitet mit einer Baudrate von 9600 Baud ohne Flusskontrolle (8N1, 8 Datenbits, ohne Paritätsbit, 1 Stopp-Bit). Die gesendeten Kommandos müssen mit einem Linefeed (LF, n) oder Carriage-Return + Linefeed (CR+LF, rn) abgeschlossen werden. Die eingestellten Parameter werden im EEProm des Mikrocontrollers dauerhaft gespeichert und beim Start automatisch geladen.
Folgende Kommandos werden bis jetzt unterstützt:
mode <ziffer>: Stellt den Lichteffekt ein. Dabei sind folgende Werte möglich:
0: kein Effekt, alle LEDs aus:
1: Modus zum Testen der einzelnen LEDs. Es werden für einige Sekunden jeweils alle roten, grünen und blauen LEDs angeschaltet. In diesem Modus müssen jeweils alle LEDs mit der gleichen Farbe leuchten – bleibt eine LED dunkel, liegt ggf. ein Defekt oder Lötfehler vor.
2: Lauflicht mit Richtungswechsel. Eine LED läuft jeweils bis zum Ende und wechselt dann die Richtung (Farbe einstellbar).
3: Lauflicht zum Anschluss hin. Eine LED läuft in Richtung des Stromanschlusses und beginnt wieder von vorne (Farbe einstellbar).
4: Lauflicht vom Anschluss weg. Eine LED läuft vom Stromanschluss weg und beginnt wieder von vorne (Farbe einstellbar).
5: Dreifarbiges Lauflicht in Rot, Grün und Blau. Das Lauflicht läuft vom Stromanschluss weg.
6: Dreifarbiges Lauflicht in Rot, Grün und Blau. Das Lauftlicht läuft zum Stromanschluss hin.
7: Blendet kurz die folgenden Farben kurz ein- und wieder aus: Rot, Grün, Blau, Gelb, Magenta, Cyan, Weiß (in dieser Reihenfolge, dann wieder von vorn).
9: Visualisierung der Akkuspannung als Bar-Graph. Je voller der Akku, desto mehr LEDs sind eingeschaltet. Bei vollem Akku (Schwellwert per akkuv-Kommando einstellbar) sind alle LEDs grün. Fällt die Spannung soweit, dass nur noch vier LEDs an sind, wechselt die Farbe zu rot. Bei leerem Akku (Schwellwert per akkul-Kommando einstellbar) blinken alle LEDs rot.
auto: Aktiviert den automatischen Kurzdurchlauf durch alle Lichteffekte. Der letzte Effekt ist die Visualisierung der Versorgungsspannung als Bar-Graph und wird bis zum manuellen Wechsel des Lichteffekts (mode-Kommando) oder Neustart des Mikrocontrollers angezeigt.
info: Zeigt die Software-Version sowie die eingestellten Werte an.
akkul <Spannung in Millivolt>: Setzt die Schwellwert-Spannung für einen leeren Akku. Fällt die Versorgungsspannung unter diesen Wert, wird ein leerer Akku durch blinkende LEDs signalisiert (sofern aktiviert, siehe akkuwarn-Kommando). Außerdem wird diese Spannung als untere Grenze für die Visualisierung der Akkuspannung via Bar-Graph-Anzeige verwendet. Die übergebene Spannung muss kleiner als der Schwellwert für einen vollen Akku sein (siehe akkuv-Kommando).
akkuv <Spannung in Millivolt>: Setzt die Schwellwert-Spannung für einen vollen Akku. Dieser Wert wird für die Visualisierung der Akkuspannung via Bar-Graph-Anzeige verwendet (entspricht alle LEDs an). Die übergebene Spannung muss größer als der Schwellwert für einen leeren Akku sein (siehe akkul-Kommando).
akkuwarn <ziffer>: Aktiviert (bei ziffer=1) oder deaktiviert (bei ziffer=0) die automatische Signalisierung eines leeren Akkus unabhängig vom Lichteffekt. Bei aktivierter Einstellung blinken unabhängig vom eingestellten Effekt alle LEDs rot, sobald die Akkuspannung unter dem Schwellwert für einen leeren Akku (siehe akkul-Kommando) fällt. Wird diese Option abgeschaltet, so erfolgt keine Akku-Warnung.
color <RGB>: Einstellen der Lauflicht-Farbe. Der Parameter RGB gibt die Farbe an und muss aus drei Ziffern zwischen 0 und 8 (Helligkeiten jeweils für die Farben Rot, Grün und Blau) bestehen. Beispiel: ‚color 880‘ für helles Gelb.
dim <ziffer>: Ermöglicht das Dimmen/Abdunkeln der Helligkeit. Dadurch kann die Helligkeit der Lichteffekte beeinflusst werden. Es sind Werte von 0-7 möglich (0 = kein Dimmen, 7 = maximale Dimmung). (ab Software-Version 1.2)
speed <delay>: Setzt die Geschwindigkeit der Laufeffekte. Der Parameter delay gibt dabei die Wartezeit in Millisekunden zwischen den einzelnen LED-Schritten an. Ein großer Wert verlangsamt den Effekt, ein kleiner macht ihn schneller.
twi 0x??: Setzt die I2C-Adresse (TWI = two wire interface). Die 7-Bit-Adresse ist dabei als Hexzahl anstelle der Fragezeichen einzutragen (>0 und <127). Durch Ändern der Slave-Adresse können mehrere Platinen an einen I2C-Bus angeschlossen werden. Standard-Adresse ist: 0x69. (ab Software-Version 1.2)
Beschreibung der I2C-Schnittstelle
Die I2C-Schnittstelle kann nur verwendet werden, wenn die Software mit I2C-Unterstützung kompiliert bzw. die entsprechende hex-Datei verwendet wird (ab Software-Version 1.2).
Die LED Stripe-Platine kann mit entsprechender Programmierung als I2C-Slave angesprochen werden. Ein I2C-Bus mit 5V Spannungspegel ermöglicht die Ansteuerung einer oder auch mehrerer LED Stripes durch einen I2C-Master. Dazu werden die beiden Leitungen SDA und SCL verwendet. Falls am Bus noch keine Pullup-Widerstände vorhanden sind, müssen ggf. R1 und R2 auf den Platinen bestückt werden. Die I2C-Adresse kann über die UART-Schnittstelle (nach Aufspielen der UART-Software) verändert werden und lautet standardmäßig 0x69. Die Kommunikation wurde erfolgreich mit einem I2C-Takt von 400 kHz (Fast Mode) getestet.
Über I2C können alle Einstellungen vorgenommen werden, die auch per UART-Schnittstelle verändert werden können (Ausnahme: die I2C-Adresse kann via I2C nicht verändert werden). Dabei gibt es für die veränderbaren Parameter jeweils zwei Versionen der Befehle: zum einmaligen Ändern und zum dauerhaften Ändern. Die Befehle mit dem Suffix _P speichern den geänderten Parameter dauerhaft im EEProm, ohne dieses Suffix wird die Änderung nicht gespeichert. Neben der Änderung der Einstellungen können per I2C auch direkt die Farben der einzelnen LEDs gesetzt werden. Auf diese Weise können mit mehreren LED Stripes an einem I2C-Bus sehr flexibel verschiedenste Lichtspielereien realisiert werden, indem ein I2C-Master alle LED Stripes entsprechend ansteuert (siehe Video unten).
Die I2C-Kommunikation läuft wie folgt ab: Der Master generiert eine Start-Bedingung und schreibt die Slave-Adresse (7 Bit) gefolgt vom Write-Bit (1) auf den Bus. Als nächstes folgt ein Kommando-Byte auf welches ggf. ein oder mehrere Datenbytes folgen können. Mit der Stopp-Bedingung endet die Übertragung. Das Kommando-Byte gibt an, welche Einstellung geändert werden soll und legt die Anzahl und das Format der Datenbytes fest. Die Einstellungen können per I2C nur geschrieben und nicht gelesen werden. Momentan kann nur die Akku-Spannung per I2C ausgelesen werden. Zum Lesen schreibt der Master zunächst den Befehl (wie oben beschrieben, ohne Datenbyte). Nach der Stopp-Bedingung muss dem Slave ein Moment Zeit für die Verarbeitung der Daten gegeben werden, bevor der Master wie folgt die Akkuspannung lesen kann: Generierung der Start-Bedingung, Senden der 7-Bit Slave-Adresse gefolgt vom Read-Bit (0), Lesen der zwei Datenbytes (= Akkuspannung in Millivolt) und Generierung einer Stopp-Bedingung.
Die folgende Auflistung beschreibt kurz die implementierte Befehle:
Schreibende Befehle
Alias / Kommando | Beschreibung |
---|---|
TWI_MODE / 1 TWI_MODE_P / 2 |
Einstellen des Lichteffekts (siehe UART-Beschreibung), 1 Datenbyte = Effekt (V1.2: 0-7/9, V2.0: 1-3) |
TWI_COLOR / 3 TWI_COLOR_P / 4 |
Lauflicht-Farbe setzen, 3 Datenbytes (rot, grün, blau, jeweils 0-8) (nur V1.2) |
TWI_AKKU_LEER / 5 TWI_AKKU_LEER_P / 6 |
Schwellwert für leeren Akku setzen, 2 Datenbytes (Schwellwert in Millivolt, MSB zuerst) |
TWI_AKKU_VOLL / 7 TWI_AKKU_VOLL_P / 8 |
Schwellwert für vollen Akku setzen, 2 Datenbytes (Schwellwert in Millivolt, MSB zuerst) |
TWI_AKKU_WARN / 9 TWI_AKKU_WARN_P / 10 |
Warnung bei leerem Akku (de-)aktivieren, 1 Datenbyte (1 = an, 0 = aus) |
TWI_SPEED / 11 TWI_SPEED_P / 12 |
Geschwindigkeit der Effekte setzen, 2 Datenbytes (Wartezeit zwischen den Schritten in Millisekunden, MSB zuerst) (nur V1.2) |
TWI_AUTO / 13 | automatischen Durchlauf durch alle Effekte starten, kein Datenbyte (nur V1.2) |
TWI_DIM / 14 TWI_DIM_P / 15 |
Einstellen der Dimmung/Abdunkelung, 1 Datenbyte (V1.2: 0-7, 0 = nicht dimmen, 7 = maximale Dimmung; V2.0: 0-6) |
TWI_DIRECT_COL / 16 | Direktes Setzen der LED-Farben, 18 Datenbytes (für jede der 12 LEDs jeweils 4 Bit (=Helligkeit 0-8) für die Farben Rot, Grün und Blau) |
TWI_CELLDETECTION_P / 17 | Automatische Erkennung der Akku-Zellenzahl, 1 Datenbyte (0 = aus, 1 = an) (nur V2.0) |
Lesende Befehle
Alias / Kommando | Beschreibung |
---|---|
TWI_READ_AKKU / 101 | Akku-Spannung lesen, 0 Datenbytes. Liefert als Antwort beim Lesen 2 Datenbytes (Akkuspannung in Millivolt, MSB zuerst) |
Demo-Video mit 5 LED Stripe-Platinen an einem I2C-Bus
Das folgende Video zeigt wie 5 LED Stripe-Platinen über den I2C-Bus von einem Master (ein ATmega8) angesteuert werden. Die Effekte werden dabei vom Master berechnet und via I2C an die Slaves gesendet. Die typischen Streifen im Bild werden durch die hellen LEDs bei der Aufnahme mit einer CCD-Kamera verursacht.