I made a design for a Dali slave like described in AN11174. I use the LPC1114FBD48/302,1 µC. During the first operation when I was sending the first commands from the Dali Master I observed two things, which are not good:
1. When I send dim levels to the Dali Slave, which are lower than 170 (decimal on Dali wires), the program "rounds-up" the value to 170 in the Dali_DimCurve lookup table. Usually a value or 170 does correspond to 10% duty cycle in the Dali standard. Since my LED-driver is able to make duty cycles of 1% and even lower of course I want to use the range between the lowest possible value and 10%. In the app_config.h I set the DALI_PHYSICAL_MIN_LEVEL to 1 and also to 0 but this does not change the explained behaviour. So today I have two opportunities:
a) I take a standard Dali_DimCurve and accept that all the dim values under 170 are "rounded-up" to 170 resulting in a 10% duty cycle for my LED-driver. So I loose aproximately 2/3 (170/254) of visible (subjective) dimming range.
b) I modify the DimCurve lookup table so that the value 170 corresponds to 1% duty cycle (or even less). So I get the full dimming range of my LED-driver but I loose approximately 2/3 of my dimming resolution.
I'm interested in opportunity c which does not round up the communicated Dali values. So I would be able to use the full range from 0-254 and of course the full resolution since the Dali_DimCurve has not to be modified to get lower duty cycles. But how to get to this aim?
2. When the Slave is put off via the Dali master and afterwards the dim level directly set to 50% (for example) the corresponding pwm pin does not ramp up smoothly to 50%. Instead of this, the pwm ramps up and down chaotically for some moments resulting my LED in flashing around. The duty cycle then remains at some level <> 50%. After sending the same request once again, the slave reacts like expected: it smoothly ramps up to 50% duty cycle. Also setting a new duty cycle outgoing from a dim level > 0% works well. The issue can only be observed when coming from 0% (e.g. off). I think I need some hints/help to avoid this ugly behavior.