56 lines
1.5 KiB
C
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);
|
|
}
|
|
}
|
|
}
|