1 Einleitung
DALI, das Digital Addressable Lighting Interface, ist der Schlüssel zu moderner, digitaler Lichtsteuerung. Es ermöglicht die einfache Installation robuster, skalierbarer und flexibler Lichtnetzwerke. Als international standardisiertes Protokoll ist DALI in der IEC 62386-Norm definiert und wird durch neue Spezifikationen der DALI Alliance (Digital Illumination Interface Alliance, DiiA) kontinuierlich weiterentwickelt.
Die Entwicklung eines neuen Geräts, das die Anforderungen des DALI-Standards erfüllt und eine DALI-2-Zertifizierung erlangt, kann jedoch zeitaufwändig und komplex sein. Hier setzt der MBS DALI-Stack an: Er vereinfacht den Entwicklungsprozess, verkürzt die Markteinführungszeit erheblich und sorgt dafür, dass alle Anforderungen des Standards erfüllt werden – der Weg zur Zertifizierung wird dadurch deutlich einfacher.
Unser DALI-Stack wurde speziell für den Einsatz in eingebetteten Systemen entwickelt und vollständig in ANSI-C implementiert. Er bietet Entwicklern höchste Zuverlässigkeit und maximale Flexibilität.
Warum sollten man sich für den MBS DALI-Stack entscheiden?
Zeit und Aufwand sparen: Vereinfachter Entwicklungsprozess und reduzierte Markteinführungszeit.
Sicherer Standardkonformität: Müheloses Erfüllen der Anforderungen des DALI-Standards und schnelleres Erreichen der Zertifizierung schneller.
2 Allgemein
Architektur
Dieses Kapitel beschreibt den allgemeinen Aufbau des DALI-Stacks und seine Beziehung zu den notwendigen Komponenten.
µController
Der Mikrocontroller ist die Hardwarebasis für eine DALI-Anwendung und stellt alle notwendigen Ressourcen für die Nutzung des DALI-Stacks bereit. Bei der Auswahl des Mikrocontrollers sollten die Anforderungen an den DALI-Stack berücksichtigt werden.
Persistent Memory
Der DALI-Standard erfordert die Speicherung bestimmter Variablen in einem nichtflüchtigen Speicher. Typischerweise wird dazu ein externer EEPROM verwendet, der z.B. über I²C mit dem Mikrocontroller verbunden ist. Es sind auch andere Implementierungen denkbar, wie z.B. die Emulation des EEPROM im Flash-Speicher des Mikrocontrollers oder die Verwendung anderer Speicherkomponenten. Es ist jedoch zu beachten, dass diese Daten recht häufig gespeichert werden, und der gewählte Speicher muss dies verarbeiten können.
DALI-Interface Circuit
Die DALI-Schnittstellenschaltung stellt die Signalaufbereitung zwischen dem DALI-Bus und den GPIO-Pins des Mikrocontrollers dar. Sie muss so ausgelegt sein, dass sie die Anforderungen der IEC 62386-101 erfüllt.
I/O
Dieser Block stellt die GPIO-Pins des Mikrocontrollers dar, die mit der DALI-Schnittstellenschaltung verbunden sind. Es werden insgesamt zwei GPIO-Pins benötigt: einer ist als Ausgang und der zweite als Eingang konfiguriert. Bei der Verwendung des DALI-Low-Level-Treibers von MBS ist es wichtig, dass der Eingangspin auch Interrupts unterstützt. Dies können entweder Interrupts bei Pegelwechsel oder Interrupts für fallende und steigende Flanken sein.
Timer
Der DALI-Low-Level-Treiber benötigt einen Timer mit einer Auflösung von 1 µs (und einer Breite von 24 Bits) sowie den entsprechenden Timer-Elapsed-Interrupt. Der Timer dient als Zeitmesseinheit für den DALI-Low-Level-Treiber und wird verwendet, um die Bit-Timings von gesendeten und empfangenen Nachrichten zu erfassen. Der abgelaufene Interrupt ist typischerweise so konfiguriert, dass er alle 10 ms ausgelöst wird.
DALI_ll_hal / Microcontroller-spezifische HAL Funktionen
Da der DALI-Low-Level-Treiber plattformunabhängig ist, hat es sich als nützlich erwiesen, den Zugriff auf die Mikrocontroller-Hardware über eine sogenannte DALI-Low-Level-Hardware-Abstraktionsschicht (dali_ll_hal) einzurichten. Das beinhaltet den Zugriff auf den Ausgangspin über den Funktionszeiger xxx, den Aufruf einer spezifischen Funktion bei einer Pegeländerung des Eingangspins, den Zugriff auf den Timer-Zählerwert und das Setzen des Timers. Um dies effektiv zu tun, werden in der Regel mikrocontrollerspezifische HAL-Funktionen oder vom Hersteller bereitgestellte Bibliotheken verwendet.
DALI-LL
Der DALI-Low-Level-Treiber verarbeitet die Pegeländerungen am GPIO-Eingangspin und überprüft die Bit-Timings. Das Ergebnis ist ein DALI-Frame, der an das DALI-Framework der Benutzeranwendung weitergegeben wird.
DALI-Framework
Das DALI-Framework fungiert als Schnittstelle zwischen der DALI-Bibliothek und dem DALI-Low-Level-Treiber. Die Aufgabe des DALI-Frameworks ist es, die vom DALI-Bus empfangenen DALI-Nachrichten/Befehle an die DALI-Bibliothek weiterzuleiten und die DALI-Nachrichten/Befehle von der DALI-Bibliothek an den Low-Level-Treiber zur Übertragung zu übergeben. Darüber hinaus bietet das Framework die Schnittstelle zwischen der Benutzerapplikation und der DALI-Bibliothek.
User Application
Die Benutzerapplikation umfasst alle zusätzlichen Funktionalitäten des Gerätes, die die Grundfunktionalität des DALI-Stacks erweitern, sowie DALI-unabhängige Funktionalitäten.
DALI-LIB
Die DALI-LIB bezieht sich auf die Implementierung einzelner Teile des DALI-Standards und vereinfacht die Einhaltung seiner Anforderungen durch die Verwendung des Stacks. Die folgende Abbildung zeigt einen Überblick über die implementierten Teile innerhalb der DALI-LIB.
Allgemeiner Überblick über die Schnittstelle
Informationsfluss
Die Abbildung zeigt den allgemeinen Informationsfluss zwischen den verschiedenen Modulen.
Das Konzept des DALI-Stacks erlaubt es dem Anwender, einen eigenen Low-Level-Treiber entsprechend seiner Hardware-Anforderungen zu entwickeln oder zu nutzen, sofern er über die entsprechende Schnittstelle verfügt. Für viele Mikrocontroller hat es sich bewährt, den von MBS entwickelten plattformunabhängigen DALI-Low-Level-Treiber zu verwenden. Das offene Konzept hat allerdings dazu geführt, dass zwischen dem Low-Level-Treiber und der DALI-LIB eine Zwischenschicht existiert, die die Übertragung von Nachrichten zwischen diesen Modulen ermöglicht, die sich DALI-Framework nennen und die vom Anwender implementiert werden muss.
Funktionstypen
Der DALI-Stack bietet verschiedene Arten von Interface-Funktionen, um die Kommunikation mit der Benutzeranwendung und dem DALI-Framework herzustellen.
Es gibt zwei Typen:
direkt aufrufbare Funktionen und
Callback-Funktionen.
Direkt aufrufbare Funktionen dienen dazu, eine Instanz der DALI-LIB zu erzeugen, sie zu initialisieren, zu bedienen und Informationen abzufragen.
Im Gegensatz dazu dienen die Callback-Funktionen dazu, die Anwenderapplikation über bestimmte Ereignisse oder Anforderungen für weitere Aktionen zu informieren.
Direkt aufrufbare Funktionen
Function name | Description |
---|---|
dalilib_createinstance | Creates a new DALI-LIB instance and provides the corresponding reference, which is used for further actions. |
dalilib_init | The DALI-LIB instance is configured by calling this function. The information about what type of device it is, such as a control gear, control device, or input device, as well as the associated parameters, are passed as function parameter. |
dalilib_start | Starts the DALI-LIB instance by changing the respective state-variables. |
dalilib_stop | Stops the DALI-LIB instance by changing the respective state-variables and deletes all assosiate instance variables. |
dalilib_infoGet | Returns the Vendor ID. |
dalilib_versionGet | Returns the version number of the DALI stack. |
dalilib_receive | The call to this function is located in the DALI framework. If a DALI message or a status message is passed from the low-level driver to the DALI framework, it is forwarded to the DALI-LIB using this function. |
dalilib_timingHelper | This function is necessary for processing the messages passed from the low-level driver, as well as for the overall functionality of the DALI-LIB. It must be called in a 10ms cycle (see Requirements). |
dalilib_create_other_membank | In order to create a new memory bank, the DALI-LIB requires memory to be provided by the user application / DALI framework. This function serves as a direct interface for this purpose. |
dalilib_action | The DALI-LIB provides a variety of additional functions available through a mechanism called ACTION. The usage of ACTIONS is covered in the respective chapter. |
Callback Funktionen
Callback function name | Description |
---|---|
fAppReady | Signal to User Application that DALI stack instance is ready to operate. |
fAppSend | This function is called when a message needs to be sent by the DALI-LIB. In the DALI framework, the callback is usually invoked and then the corresponding DALI low-level driver routine (dalill_pushSendQueue) is used to pass the message to the low-level driver. |
fAppReAction | This callback is always invoked when the DALI-LIB needs information from the user application or a response to an event that cannot be handled by the DALI stack itself, such as controlling the PWM for the light output of an LED |
fAppLoadMem | This callback is typically invoked at power-up of the device or when specifically requested to load the persistent variables from NVM. |
fAppSaveMem | This callback is always invoked, when at least one persistent variable has been changed and the specified time has passed. User Appliction is responsible to save the data in a non volatile memory. |
fAppLog | In case an error occurs during processing within the DALI-LIB, the corresponding error message and description are communicated to the user application through this callback. |
Die Zuweisung der Callbacks erfolgt in der Instanz Konfiguration.
3 Anforderungen
Hardware Anforderungen
Allgemein
Signal-Konditionierung / DALI-Interface-Schaltung
Nichtflüchtiger Speicher z.B. EEPROM mit mindestens 526 Bytes
Microcontroller
Taktfrequenz mindestens 32Mhz
32Bit-CPU-Architektur (empfohlen)
zwei GPIO Pins:
1x Eingang (DALI_RX) - muss in der Lage sein, eine Unterbrechung entweder bei Pegelwechsel oder bei Erkennung einer fallenden und steigenden Flanke zu erzeugen
1x Eingang (DALI_TX).
ein Timer mit einer Auflösung von 1µs (Breite von mindestens 24 Bit) und der entsprechende Timer-Interrupt
Die Interrupts (DALI_RX) des Low-Level-Treibers müssen die gleiche und die höchste Priorität im System haben.
Speicher (R.A.M and FLASH) Anforderungen siehe unten:
Capability | CPU 32 Bit | CPU 16 Bit | ||
---|---|---|---|---|
Flash | RAM | Flash | RAM | |
All features active including D4i extensions | 88 kB | 11 kB | 34 kB | 9 kB |
All features active without D4i extensions (Delivery status) | 81 kB | 81 kB | 30,2 kB | 8 kB |
Device turned off (No more application controller possible only gears) | 62 kB | 81 kB | 22 kB | 7,2 kB |
Device turned off, no colour support (DT8) | 55 kB | 81 kB | 9 kB | 7 kB |
Software Anforderungen
System-Stack-Größe zwischen 1 und 1,5 kByte.
Der DALI-Stack (dali-lib) benötigt einen Low-Level-Treiber, um die DALI-Frames zu senden und zu empfangen.
MBS stellt dazu einen freien, plattformunabhängigen Low-Level-Treiber zur Verfügung.
Bei Verwendung des MBS DALI Low-Level-Treibers muss die Funktion dalill_processQueues mindestens alle 5ms von der Anwenderapplikation aufgerufen werden und darf nicht blockiert werden (z.B. durch Speicherung von persistenten Daten).
Der DALI-Stack stellt die Funktion dalilib_timingHelper zur Verfügung, die alle 10ms aufgerufen werden sollte, um die Funktionalität zu gewährleisten.
Bei Verwendung des MBS DALI Low-Level-Treibers gibt es eine Funktionalität, die diese Aufgabe unterstützt.
4 Lizenzierung und Lieferung
Lizenzierung
Model | Description |
---|---|
Library Leasing p.a. | The program library is provided for use for a limited time. |
Library Buyout | The program library is provided for permanent use. |
Source Buyout | The source code is provided for permanent use. |
Lieferung
DALI stack
Model | Description |
---|---|
Static library (1 | The customer receives the header file “libdali.h” as well as the pre-compiled object files of the DALI stack in the library file “xxx_dali_lib.a”. |
Source files (2 (3 | The customer receives the complete source code of the DALI stack. |
1) Driver is delivered as header file “dali_ll.h” and library file “xxx__dali_lowlevel.a” 2) Driver is delivered as source code 3) source code can be altered by the customer |
Beispielprojekte
Jede Lieferung enthält einfache Beispielprojekte, die die Anwendung des DALI-Stacks veranschaulichen und z.B. die Implementierung eines DT6-LED-Betriebsgeräts demonstrieren. Es handelt sich um vorgefertigte Beispiele. Die Beispielprojekte sind nicht für jeden Mikrocontroller-Typ geeignet.
5 Weiterführende Informationen für Anwendungsentwickler
Detaillierte Informationen über Stack Instance und API werden in der MBS Confluence Developer Area dokumentiert. Der Zugang wird in Kürze hier verfügbar sein.