Skip to content
This repository was archived by the owner on Jun 9, 2025. It is now read-only.

Commision Short Adress #1

Description

@kemaldede

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 );
        
    }

}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions