Pages

04 June, 2024

UInt16_t multiplication, SAM D21/DA1 microcontroller [closed]

I need to modify code on this microcontroller, because our old lights used servo PWM and the new lights use power PWM.
/**
* Convert a value from 0 to 255 to a 1.0 ms
* to 2.0 ms positive PWM cycle based on
* the clock configuration of the TC.
*/
void pwm_lamp_update(int index, uint8_t lamp_user)
{
uint16_t lamp = 0;
lamp = (240 * (uint16_t)lamp_user);
if (0 == index)
{
//lamp0_intensity = ((1175 * (uint16_t) lamp_user) / 100) + 3008;
//lamp0_intensity = lamp0_intensity * 2;
}
else if (1 == index)
{
//lamp1_intensity = ((1175 * (uint16_t) lamp_user) / 100) + 3008;
//lamp1_intensity = lamp1_intensity * 2;
//lamp1_intensity = 240;
//lamp1_intensity = 65500;
//lamp1_intensity = 31680;
//lamp1_intensity = (240 * (uint16_t)lamp_user);
lamp1_intensity = lamp;
lamp1_intensity = 41520;
}
lamp_user = lamp_user;
}



lampx_intensity is an uint16_t.


The first two lines of the if statements are code that creates a servo PWM type signal. I am trying to make a power PWM signal.


I find that if I hard code a number everything works fine. Anytime that I use a variable I don't get any output.


In the example above, even 'lamp1_intensity = lamp;' fails. I see a valid value for lamp1_intensity. The live microcontroller is not throwing any errors that I see. The light is not working and there isn't any PWM signal when it fails.


The microcontroller is an AT03259 SAM D21/DA1.

No comments:

Post a Comment

Thanks