GithubHelp home page GithubHelp logo

mikroelektronika / dali_2_click Goto Github PK

View Code? Open in Web Editor NEW
19.0 4.0 14.0 1.54 MB

Library for DALI module.

Home Page: https://www.mikroe.com/dali-2-click

C 77.69% C++ 17.58% Assembly 4.73%
mikrosdk mikroc clickboard dali

dali_2_click's Introduction

MikroE


DALI_2 Click

  • CIC Prefix : DALI2
  • Author : MikroE Team
  • Verison : 1.0.0
  • Date : Feb 2018.

Software Support

We provide a library for the DALI_2 Click on our LibStock page, as well as a demo application (example), developed using MikroElektronika compilers. The demo can run on all the main MikroElektronika development boards.

Library Description

Library implements DALI master functionalities.

Key functions :

  • void dali2_sendCmd(const uint8_t balAddress, const uint8_t cmd, const uint8_t cmdType, const uint8_t folType) - Executes DALI command
  • void dali2_masterInit() - Initializes master functionality
  • uint8_t dali2_masterStatus() - Returns master status

Examples Description

The application is composed of three sections :

  • System Initialization - Initializes GPIO pins for TX and RX
  • Application Initialization - Initializes driver, initializes DALI master functionality and configures timer
  • Application Task - (code snippet) - Application task is composed of three sequences, first sequence toggling light twice with delay of one second. Second sequence decreases intensity of light by 8 steps with delay of half second. Third sequence increases intensity of light by 8 steps with delay of half second.
void applicationTask()
{
    uint8_t counter;
    
    for (counter = 0; counter < 2; counter++)
    {
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_OFF, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 1000 );
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_RECALL_MAX_LEVEL, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 1000 );
    }
    
    for (counter = 0; counter < 8; counter++)
    {
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_DOWN, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 500 );
    }
    
    for (counter = 0; counter < 8; counter++)
    {
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_UP, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 500 );
    }
    
    current_state = dali2_masterStatus();
}

Note

This implementation of DALI master requires timer with exact 104 uS interrupt time. The MCU used for example must be cappable to execute void dali2_isr() function in time less than 104 uS. In theory it is usable on faster MCUs but before usage you should check does your MCU is cappable to acomplish dali2_isr function call for less than 104us.

The full application code, and ready to use projects can be found on our LibStock page.



dali_2_click's People

Contributors

kacaperendic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dali_2_click's Issues

reception of bytes is not checked

according to the spec if in 8 ticks more the one phase shift occurs it's a timing violation. this code does not check it at all, it hops from 2nd tick to the next 2nd tick of each bit.
also when preparing the byte from the byte array doesn't take into account the start bit.

Commision Short Adress

Hi. I can't commision the ballasts. Here is my code. I reconfigured the rst and int pins.
RST pin : C3
INT pin : A10

`#include "Click_DALI_2_types.h"
#include "Click_DALI_2_config.h"
#include "Click_DALI_2_timer.h"
#include "stdbool.h"
#include "stdint.h"

uint8_t current_state;
uint8_t numberOfBallasts = 0;
uint8_t counter;
char int_to_str[7];
char long_to_str[12];

uint32_t findDev(uint32_t base_addr, uint32_t pattern_addr, uint8_t shift_counter);
void setSearch(uint32_t addr);

void systemInit()
{
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_INT_PIN, _GPIO_OUTPUT );
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_RST_PIN, _GPIO_OUTPUT );

UART2_Init_Advanced(115200, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23);

}

void applicationInit()
{
dali2_gpioDriverInit( (T_DALI2_P)&_MIKROBUS1_GPIO );
dali2_masterInit();
dali2_configTimer();
}

void applicationTask()
{
for (counter = 0; counter < 2; counter++)
{
dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_OFF, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
Delay_ms( 1000 );
dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_RECALL_MAX_LEVEL, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
Delay_ms( 1000 );
}

for (counter = 0; counter < 8; counter++)
{
    dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_DOWN, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
    Delay_ms( 500 );
}

for (counter = 0; counter < 8; counter++)
{
    dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_UP, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
    Delay_ms( 500 );
}

}

uint8_t setDevAddress(uint8_t start_addr){

uint32_t addr_dev = 0xFF;

// UART2_Write_Text("Arama islemi basliyor....");
dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_RESET, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
Delay_ms( 100 );
dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_RESET, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND); // Balastlar resetleniyor
Delay_ms(100);
dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_OFF, _DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND); // Lambaları söndür
Delay_ms( 300 );

dali2_sendCmd(_DALI2_ADDRESS01,_DALI2_INITIALISE,_DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);   // Initialize komutu
Delay_ms(100);
dali2_sendCmd(_DALI2_ADDRESS01,_DALI2_INITIALISE,_DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
Delay_ms(100);
dali2_sendCmd(_DALI2_RANDOMISE_L,_DALI2_RANDOMISE_H,_DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);     // Ramdomize komutu
Delay_ms(100);
dali2_sendCmd(_DALI2_RANDOMISE_L,_DALI2_RANDOMISE_H,_DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);
Delay_ms(100);

while(1){
    addr_dev = findDev(0xFFFFFF, 0x800000,0);
                    
    if (addr_dev == 0xFFFFFFFF)       //Adreslemeden çıkılıyor
        break;
        
    UART2_Write_Text("Device Found!!!!");
    UART2_Write(13);
    UART2_Write(10);
    setSearch(addr_dev);   // Search komutu ile
    dali2_sendCmd(((start_addr << 1) | 0x01),_DALI2_PROGRAM_SHORT_ADDRESS, _DALI2_COMMAND,_DALI2_FOLLOWING_COMMAND); // Kısa adres programlandı
    Delay_ms(100);
    dali2_sendCmd(_DALI2_WITHDRAW_L, _DALI2_WITHDRAW_H, _DALI2_COMMAND,_DALI2_FOLLOWING_COMMAND);   // Kısa adresi atanan ballast arama döngüsünden çıkarılıyor
    Delay_ms(100);
    start_addr++;
    numberOfBallasts++;
}
dali2_sendCmd(_DALI2_TERMINATE_L_BITS, _DALI2_TERMINATE_H_BITS, _DALI2_BROADCAST_CMD,_DALI2_FOLLOWING_COMMAND);   // Terminate komutu
return start_addr;

}

uint32_t findDev(uint32_t base_addr, uint32_t pattern_addr, uint8_t shift_counter){

uint8_t ballast_response;

setSearch(base_addr);
dali2_sendCmd(_DALI2_COMPARE_L,_DALI2_COMPARE_H,_DALI2_BROADCAST_CMD, _DALI2_FOLLOWING_COMMAND);       // Compare komutu
Delay_ms(10);
ballast_response = dali2_getBallastResponse();

if(ballast_response){
    if (shift_counter == 24)
        return base_addr;
    else
        base_addr -= pattern_addr;
} 
else {
    if (shift_counter == 0){
        UART2_Write_Text("Device Not Found!!!");
        UART2_Write(13);
        UART2_Write(10);
        return 0xFFFFFFFF;
    }
    else if (shift_counter > 23){
        return (base_addr + 1);
    }
    else{
        base_addr += pattern_addr;
    }
        
}

if (shift_counter != 23){
    pattern_addr >>= 1;
}
            
shift_counter++;

base_addr = findDev(base_addr, pattern_addr, shift_counter);
return base_addr;

}

void setSearch(uint32_t addr){

 uint8_t searchAdrrH,searchAdrrM,searchAdrrL;
 char long_to_hex[9];
 searchAdrrH = ((addr >> 16) & 0xFF);
 searchAdrrM = ((addr >> 8) & 0xFF);
 searchAdrrL = (addr & 0xFF);
 
 LongIntToHex(addr,long_to_hex);
 UART2_Write_Text(long_to_hex);
 UART2_Write(13);
 UART2_Write(10);
 
 dali2_sendCmd(searchAdrrH,_DALI2_SEARCHADDRH,_DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
 Delay_ms(30);
 dali2_sendCmd(searchAdrrM,_DALI2_SEARCHADDRM,_DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
 Delay_ms(30);
 dali2_sendCmd(searchAdrrL,_DALI2_SEARCHADDRL,_DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
 Delay_ms(30);

}

void main()
{
uint8_t n_dev = 0;
systemInit();
applicationInit();
applicationTask();
n_dev = setDevAddress(0x00);

    while(1){
    
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_RECALL_MAX_LEVEL, _DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 1000 );

        for (counter = 0; counter < 8; counter++)
        {
            dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_DOWN, _DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
            Delay_ms( 500 );
        }

        for (counter = 0; counter < 8; counter++)
        {
            dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_UP, _DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
            Delay_ms( 500 );
        }
        
        dali2_sendCmd(_DALI2_ADDRESS01, _DALI2_OFF, _DALI2_COMMAND, _DALI2_FOLLOWING_COMMAND);
        Delay_ms( 1000 );
        
    }

}`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.