APPLICATION NOTE Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide Atmel AVR XMEGA E Features • • DALI stack compliant with IEC62386 LED modules standard DALI data encoding and decoding with USART and XCL modules on Atmel® AVR® XMEGA® E Introduction DALI stands for Digital Address Lighting Interface which is lighting control protocol defined in the technical standard IEC62386. The demo software is created to demonstrate DALI slave solution of LED modules based on Atmel AVR XMEGA E device. This document describes the basic architecture and the application programming interfaces (API) of the demo software. The Atmel AT04022: DALI Slave with XMEGA E – Hardware User Guide application note describes the reference design hardware in detail. Figure 1. DALI Slave Demo of LED Modules. For this reference design, the hardware design files (schematic, BoM and PCB gerber) and software source code can be downloaded from Atmel website. The provided hardware documentation can be used with no limitations to manufacture the reference hardware solution for the design. 42177B−XMEGA−01/2014 Table of Contents 1. Overview .............................................................................................. 3 2. Software Architecture ........................................................................... 3 2.1 Application ........................................................................................................ 4 2.2 Service .............................................................................................................. 5 2.3 Drivers ............................................................................................................... 7 3. Main API Introduction ........................................................................... 7 3.1 Application Layer API Introduction .................................................................... 7 3.1.1 Main.c file............................................................................................ 8 3.1.2 Dali_ac.c file ....................................................................................... 8 3.1.3 Dali_bit.c file ....................................................................................... 8 3.1.4 Dali_tc.c file ........................................................................................ 8 3.2 Service Layer API Introduction .......................................................................... 8 3.2.1 Dali_frame.c file .................................................................................. 8 3.2.2 Dali_cmd.c file .................................................................................... 9 4. Software Package Content .................................................................. 9 5. Memory Usage ................................................................................... 11 6. Conclusion ......................................................................................... 11 Appendix A. DALI Command Set ...................................................... 12 Appendix B. Revision History ............................................................ 15 Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 2 1. Overview The application demo acts as slave connected to DALI bus. DALI master sends commands and DALI slave responds the commands, especially the lighting control commands. In some cases, the slave sends back information that master inquires. DALI power supplies the DALI bus power. It can be a stand-alone power supply unit or it can be integrated into any master or slave connected to the DALI bus. Figure 1-1 shows the typical DALI master-slave structure connected to the bus. Figure 1-1. DALI System Structure. DALI Bus DALI Power DALI Master DALI Slave DALI slave receives and transmits the DALI data through the bus. If lighting control commands are received, DALI slave shall adjust the LED lighting through the PWM output. It also contains constant current supply part to support the LEDs. Figure 1-2. DALI Slave with XMEGA E Block Diagram. DC power Constant current supply LDO ATXMEGA E LEDs DALI BUS DALI interface 2. Software Architecture The software is developed based on layer structure as Atmel ASF that makes it more convenient to port between different Atmel device platforms. The software is composed of three layer parts as below: • • • Application Service Drivers Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 3 Figure 2-1. DALI Slave Software Architecture. Application Service DALI stack Drivers 2.1 Application The whole system runs in an infinite loop. After start up, it initializes the parameters and configures microcontroller modules. In main loop the system processes DALI stack, encoding and decoding DALI data sequentially. Then it goes into sleep mode. After woken up by interrupt, it will run again. Figure 2-2. Application Flowchart. Start up Initialize variables , modules Process DALI stack Process DALI data transmission Power management Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 4 DALI data encoding and decoding are implemented by XMEGA E USART and XCL modules. For details of this process refer to the application note Atmel AT03335: Manchester Transceiver Using the USART and XCL Modules on XMEGA E. Microcontroller hardware sources are configured to implement constant current source for LED lighting. Analog comparator compares the input voltage with internal constant voltage and is configured as event source. Event resulted from analog comparator acts on timer PWM output via fault extension. PWM output switches the hardware buck transformer. In this way constant voltage can be ensured at analog comparator input point and then constant current source is generated. For hardware design details, refer to the application schematic. Figure 2-3. Buck LED Driver. Decrease/Increase PWM Peripheral Event System Higher/Lower 2.2 Analog Comparator Vref Service Service realizes the DALI slave stack. It processes frame sequence timing and implements DALI commands. State machine is used to process DALI frame. Firstly DALI slave goes into idle state and implements state initialization. After this, the slave shall go to forward frame state immediately and wait for DALI frame arrival. If DALI frame is received, it should be processed. Then according to frame information, the state machine goes to next repeat state, backward state or idle state. In DALI standard definition, a configuration command shall be received twice within 100ms to reduce the probability of incorrect reception. If received correctly twice, the configuration command should be executed and then DALI slave goes to idle state. Otherwise the DALI slave goes into idle state. A backward frame shall only be sent after the reception of a query command or a write memory command. Depending on the command the backward frame shall be either a ‘Yes’ / ‘No’ or 8-bit information.If backward frame is ‘No’, the DALI slave should not react (idle line). Otherwise DALI slave should send the answer to master and after this it shall go to idle mode. Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 5 Figure 2-4. Frame State Transition. Next repeat frame new frame Idle Forward frame need repeat need answer Back frame After DALI slave receives a forward frame, it should decode the two bytes of address and data. The address type includes short address, group address, broadcast or special commands. Address and data compose the command code. For every command code, the corresponding DALI function should be executed. Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 6 Figure 2-5. Commands Process Flowchart. Y Short address? N Y Group address? N Is me? N Y Y Broadcast? Y Direct ARC? N Process direct arc N N Special commands? Y Common commands Process common commands 0-223 N Y Y Process special commands 256275 Process extended commands 224255 Extended commands ? N Exit 2.3 Drivers The software utilizes the drivers in the ASF (Atmel Software Framework), which is integrated in Atmel Studio. The drivers include TC, USART, XCL, EDMA, etc. 3. Main API Introduction 3.1 Application Layer API Introduction Table 3-1. Application Layer File Names. Source file Header file main.c dali_top.h dali_ac.c dali_ac.h dali_bit.c dali_bit.h dali_tc.c dali_tc.h Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 7 3.1.1 Main.c file • main() function The entry point of the application is the main( ) function. The main( ) function must contain two mandatory parts. One initializes the system variables and configures microcontroller modules. The other implements DALI slave function in the infinite loop. The main( ) function implementation shows as below: int main(void) { Initialization code; while (1) { DALI slave implementation code; } } 3.1.2 Dali_ac.c file • 3.1.3 3.1.4 Dali_bit.c file • dali_bit_init( ) function Initialze the USART and XCL modules for encoding and decoding DALI data. • dali_bits_tx( ) function This function transmits DALI data depending request from service. • dali_bits_rx( ) function This function receives DALI data from EDMA channel linked with USART module. After received, the data should be transferred to service. Dali_tc.c file • 3.2 dali_ac_init( ) function Initialize analog comparator module as part of buck transformer. dali_tc_init() function This function initializes TCC4, TCC5 and TCD5 modules. TCC4 is used for PWM output and timer of LED dimming. TCC5 serves as switch of buck transformer with PWM output. TCD5 is used for DALI frame sequence timing. Service Layer API Introduction Table 3-2. 3.2.1 Service Layer File Names. Source file Header file dali_frame.c dali_frame.h dali_cmd.c dali_cmd.h Dali_frame.c file • dali_frame_init( ) function This function initializes the variables used in DALI stack. • dali_frame_process_state( ) function DALI frame timing is implemented through state machine. Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 8 3.2.2 4. Dali_cmd.c file • dali_cmd_direct_arc_power_control( ) function This function implements DALI direct arc power control command. • dali_cmd_process_common( ) function This function processes the DALI common commands from 0 to 223. • dali_cmd_process_extended_application( ) function This function processes the DALI application extended commands from 224 to 255. Commands 224 to 254 are defined in part 207 of IEC62386 standard. Optional features in command 240 are not supported here. • dali_cmd_process_special( ) function This function processes the DALI special commands from 256 to 275. Software Package Content The directory structure of the software package is shown as follows: ├─ASF │ ├─common │ │ ├─boards │ │ │ └─user_board │ │ ├─services │ │ │ ├─clock │ │ │ │ └─xmega │ │ │ ├─gpio │ │ │ │ └─xmega_gpio │ │ │ ├─ioport │ │ │ │ └─xmega │ │ │ └─sleepmgr │ │ │ └─xmega │ │ └─utils │ │ ├─interrupt │ │ └─make │ └─xmega │ ├─drivers │ │ ├─ac │ │ ├─cpu │ │ ├─edma │ │ ├─nvm Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 9 │ │ ├─pmic │ │ ├─sleep │ │ ├─tc45 │ │ ├─usart │ │ └─xcl │ │ │ └─utils └─docsrc │ ├─assembler │ ├─bit_handling │ └─preprocessor ├─config └─dali ├─dali_ac ├─dali_bit ├─dali_lib │ ├─dali_command │ ├─dali_frame │ └─dali_hal └─dali_timer • ASF: In this folder Atmel software framework provides the module drivers of microcontroller. • config: Provide board, clock, EDMA and USART configuration files. • dali: Provide the DALI application and service files. • dali_ac, dali_bit, dali_timer In these folders, provide corresponding application files. • dali_lib DALI stack is available in this folder. y dali_frame Provide the DALI frame process files. y dali_cmd Provide DALI command implementation files. y dali_hal Hardware abstraction layer, including a complete set of APIs for using hardware resources by DALI stack that is convenient for rapid design-in and smooth integration with varied peripherals. Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 10 5. Memory Usage Building with Atmel Studio 6.1 and compiler optimization level O1, the XMEGA E5 memory usage is: 13846 bytes of CODE memory; 144 bytes of DATA memory; 453 bytes of EEPROM memory. With compiler optimization level Os, the CODE memory reduces to 11882 bytes. 6. Conclusion This document shows the implementation of DALI slave taking advantage of XMEGA E resources. It describes the basic software architecture, flowcharts and the application programming interfaces (API), gives a description of the software package contents. Memory usage illustrates how much RAM, EEPROM and Flash this demo application consumes. Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 11 Appendix A. DALI Command Set Command number Command name – DIRECT ARC POWER CONTROL 0 OFF 1 UP 2 DOWN 3 STEP UP 4 STEP DOWN 5 RECALL MAX LEVEL 6 RECALL MIN LEVEL 7 STEP DOWN AND OFF 8 ON AND STEP UP 9 ENABLE DAPC SEQUENCE 10 – 15 Reserved 16 – 31 GO TO SCENE 32 RESET 33 STORE ACTUAL LEVEL IN THE DTR 34 – 41 Reserved 42 STORE THE DTR AS MAX LEVEL 43 STORE THE DTR AS MIN LEVEL 44 STORE THE DTR AS SYSTEM FAILURE LEVEL 45 STORE THE DTR AS POWER ON LEVEL 46 STORE THE DTR AS FADE TIME 47 STORE THE DTR AS FADE RATE 48 – 63 Reserved 64 – 79 STORE THE DTR AS SCENE 80 – 95 REMOVE FROM SCENE 96 – 111 ADD TO GROUP 112 – 127 REMOVE FROM GROUP 128 STORE DTR AS SHORT ADDRESS 129 ENABLE WRITE MEMORY 130 – 143 Reserved 144 QUERY STATUS 145 QUERY CONTROL GEAR 146 QUERY LAMP FAILURE 147 QUERY LAMP POWER ON 148 QUERY LIMIT ERROR 149 QUERY RESET STATE 150 QUERY MISSING SHORT ADDRESS 151 QUERY VERSION NUMBER 152 QUERY CONTENT DTR Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 12 153 QUERY DEVICE TYPE 154 QUERY PHYSICAL MINIMUM LEVEL 155 QUERY POWER FAILURE 156 QUERY CONTENT DTR1 157 QUERY CONTENT DTR2 158 – 159 Reserved 160 QUERY ACTUAL LEVEL 161 QUERY MAX LEVEL 162 QUERY MIN LEVEL 163 QUERY POWER ON LEVEL 164 QUERY SYSTEM FAILURE LEVEL 165 QUERY FADE TIME/FADE RATE 166 – 175 Reserved 176 – 191 QUERY SCENE LEVEL (SCENES 0-15) 192 QUERY GROUPS 0-7 193 QUERY GROUPS 8-15 194 QUERY RANDOM ADDRESS (H) 195 QUERY RANDOM ADDRESS (M) 196 QUERY RANDOM ADDRESS (L) 197 READ MEMORY LOCATION 198 – 223 Reserved 224 – 254 See parts 207 of DALI Standard 255 QUERY EXTENDED VERSION NUMBER 256 TERMINATE 257 DATA TRANSFER REGISTER (DTR) 258 INITIALISE 259 RANDOMISE 260 COMPARE 261 WITHDRAW 262 – 263 Reserved 264 SEARCHADDRH 265 SEARCHADDRM 266 SEARCHADDRL 267 PROGRAM SHORT ADDRESS 268 VERIFY SHORT ADDRESS 269 QUERY SHORT ADDRESS 270 PHYSICAL SELECTION 271 Reserved 272 ENABLE DEVICE TYPE X 273 DATA TRANSFER REGISTER 1 (DTR1) 274 DATA TRANSFER REGISTER 2 (DTR2) Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 13 275 WRITE MEMORY LOCATION 276 – 349 Reserved Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 14 Appendix B. Revision History Doc. Rev. Date Comments 42177B 01/2014 Updated memory usage as source code is modified 42177A 08/2013 Initial document release Atmel AT03922: DALI Slave with XMEGA E – Software User’s Guide [APPLICATION NOTE] 42177B−XMEGA−01/2014 15 Atmel Corporation Atmel Asia Limited Atmel Munich GmbH Atmel Japan G.K. 1600 Technology Drive Unit 01-5 & 16, 19F Business Campus 16F Shin-Osaki Kangyo Building San Jose, CA 95110 BEA Tower, Millennium City 5 Parkring 4 1-6-4 Osaki, Shinagawa-ku USA 418 Kwun Tong Road D-85748 Garching b. Munich Tokyo 141-0032 Tel: (+1)(408) 441-0311 Kwun Tong, Kowloon GERMANY JAPAN Fax: (+1)(408) 487-2600 HONG KONG Tel: (+49) 89-31970-0 Tel: (+81)(3) 6417-0300 www.atmel.com Tel: (+852) 2245-6100 Fax: (+49) 89-3194621 Fax: (+81)(3) 6417-0370 Fax: (+852) 2722-1369 © 2014 Atmel Corporation. All rights reserved. / Rev.: 42177B−XMEGA−01/2014 Atmel®, Atmel logo and combinations thereof, AVR®, Enabling Unlimited Possibilities®, XMEGA®, and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others. Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN THE ATMEL TERMS AND CONDITIONS OF SALES LOCATED ON THE ATMEL WEBSITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS AND PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and products descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.