Files
microchip-application-bmd38…/elite_dac.c
T

56 lines
1.5 KiB
C

#include "elite_dac.h"
#include "edc.h"
static bool DACReset;
void VoutGainControl(uint8_t VOUTLevel)
{
switch (VOUTLevel)
{
case 0:
// VOUT gain level = 0, using 240K resister
break;
case 1:
// VOUT gain level = 1, using 15K resister
break;
case 2:
// VOUT gain level = 2, using 15K resister
break;
default:
// default using 15K resister
break;
}
}
int32_t User2Real(uint16_t usr_code)
{
/* transfer usr_code to real voltage value (mV) */
return (int32_t)((usr_code - 25000) / 5);
}
void AutoGainChangeVout(uint32_t *p_VoutGainLv, int32_t usr_code)
{
int32_t RealVolt = (usr_code - 25000) * 200; // (usr_code - 25000) / 5 * 1000 [1uV]
// switch to 1 level volt(small) 15K
// switch to 2 level volt(large) 240K
if (*p_VoutGainLv == VOUT_GAIN_15K)
{
if (RealVolt > DAC_VOUT_GAIN_LARGE_BOUNDARY || RealVolt < -1 * DAC_VOUT_GAIN_LARGE_BOUNDARY)
{
// switch to 2 level volt(large)
*p_VoutGainLv = VOUT_GAIN_240K;
VoutGainControl(edc.instru.VoutGainLv);
}
}
else if (*p_VoutGainLv == VOUT_GAIN_240K)
{
if (RealVolt < DAC_VOUT_GAIN_SMALL_BOUNDARY && RealVolt > -1 * DAC_VOUT_GAIN_SMALL_BOUNDARY)
{
// switch to 1 level volt(small)
*p_VoutGainLv = VOUT_GAIN_15K;
VoutGainControl(edc.instru.VoutGainLv);
}
}
}