Exemplo n.º 1
0
void	FXAS21002C::set_onchip_lowpass_filter(int frequency_hz)
{
	int high = 256 / (800 / _current_rate);
	int med = high / 2 ;
	int low = med / 2;

	if (_current_rate <= 25) {
		low = -1;
	}

	if (_current_rate == 13) {
		med = -1;
		low = -1;
	}

	uint8_t filter = CTRL_REG0_BW_HIGH;

	if (frequency_hz == 0) {
		filter = CTRL_REG0_BW_HIGH;

	} else if (frequency_hz <= low) {
		filter = CTRL_REG0_BW_LOW;

	} else if (frequency_hz <= med) {
		filter = CTRL_REG0_BW_MED;

	} else if (frequency_hz <= high) {
		filter = CTRL_REG0_BW_HIGH;
	}

	set_standby(_current_rate, true);
	modify_reg(FXAS21002C_CTRL_REG1, CTRL_REG0_BW_MASK, filter);
	set_standby(_current_rate, false);
}
Exemplo n.º 2
0
int
FXAS21002C::set_samplerate(unsigned frequency)
{
	uint8_t bits = 0;

	unsigned last_rate = _current_rate;

	if (frequency == 0 || frequency == GYRO_SAMPLERATE_DEFAULT) {
		frequency = FXAS21002C_DEFAULT_RATE;
	}

	if (frequency <= 13) {
		_current_rate = 13;
		bits = CTRL_REG1_DR_12_5;

	} else if (frequency <= 25) {
		_current_rate = 25;
		bits = CTRL_REG1_DR_25HZ;

	} else if (frequency <= 50) {
		_current_rate = 50;
		bits = CTRL_REG1_DR_50HZ;

	} else if (frequency <= 100) {
		_current_rate = 100;
		bits = CTRL_REG1_DR_100HZ;

	} else if (frequency <= 200) {
		_current_rate = 200;
		bits = CTRL_REG1_DR_200HZ;

	} else if (frequency <= 400) {
		_current_rate = 400;
		bits = CTRL_REG1_DR_400HZ;

	} else if (frequency <= 800) {
		_current_rate = 800;
		bits = CTRL_REG1_DR_800HZ;

	} else {
		return -EINVAL;
	}

	set_standby(last_rate, true);
	modify_reg(FXAS21002C_CTRL_REG1, CTRL_REG1_DR_MASK, bits);
	set_standby(_current_rate, false);
	return OK;
}
Exemplo n.º 3
0
int
FXAS21002C::set_range(unsigned max_dps)
{
	uint8_t bits = CTRL_REG0_FS_250_DPS;
	float new_range_scale_dps_digit;
	float new_range;

	if (max_dps == 0) {
		max_dps = 2000;
	}

	if (max_dps <= 250) {
		new_range = 250;
		new_range_scale_dps_digit = 7.8125e-3f;
		bits = CTRL_REG0_FS_250_DPS;

	} else if (max_dps <= 500) {
		new_range = 500;
		new_range_scale_dps_digit = 15.625e-3f;
		bits = CTRL_REG0_FS_500_DPS;

	} else if (max_dps <= 1000) {
		new_range = 1000;
		new_range_scale_dps_digit = 31.25e-3f;
		bits = CTRL_REG0_FS_1000_DPS;

	} else if (max_dps <= 2000) {
		new_range = 2000;
		new_range_scale_dps_digit = 62.5e-3f;
		bits = CTRL_REG0_FS_2000_DPS;

	} else {
		return -EINVAL;
	}

	set_standby(_current_rate, true);
	_gyro_range_rad_s = new_range / 180.0f * M_PI_F;
	_gyro_range_scale = new_range_scale_dps_digit / 180.0f * M_PI_F;
	modify_reg(FXAS21002C_CTRL_REG0, CTRL_REG0_FS_MASK, bits);
	set_standby(_current_rate, false);

	return OK;
}
Exemplo n.º 4
0
void CLaserControl::OnLasercontrolAccept()
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	m_LaserControl_Settings.UpdateData(TRUE);
	//m_LaserControl_Settings.m_nIndex=2;

	m_LaserControl_Settings.SetTimer(1,100,NULL);

	set_laser_mode(m_LaserControl_Settings.m_LaserMode);
	switch(m_LaserControl_Settings.m_LaserMode)
	{
	case 0:
		set_standby(m_LaserControl_Settings.m_StandbyHalfPeriod,m_LaserControl_Settings.m_StanbyPulseLength);
		//set_standby(106,106);
		set_laser_pulses_ctrl(m_LaserControl_Settings.m_HalfPeriod,m_LaserControl_Settings.m_PulseLengthSignal);
		break;
	case 1:
	case 2:
	case 3:
	case 5:
		set_firstpulse_killer(m_LaserControl_Settings.m_FirstPulseKillerLengthSignal);
		set_qswitch_delay(m_LaserControl_Settings.m_QSwtchDelaySignal);
		break;
	default:
		break;
	}
//Update data
	m_LaserControl_Settings.UpdateData(TRUE);
	//laser
	CLaserScanDoc::s_LaserPower=m_LaserControl_Settings.m_LaserPower;
	CLaserScanDoc::s_LaserSetpoint=m_LaserControl_Settings.m_LaserSetpoint;
	CLaserScanDoc::s_Frequency=m_LaserControl_Settings.m_Frequency;
	//serial Port
	CLaserScanDoc::s_SerialPort_Number=m_LaserControl_Settings.m_SerialPort_Number;
	//CString CLaserScanDoc::s_SerialPort_Parameters=m_SerialPort_Parameters;
	CLaserScanDoc::s_nInputMode=m_LaserControl_Settings.m_nInputMode;
	//scan head output and input
	//CLaserScanDoc::s_LaserMode=m_LaserControl_Settings.m_LaserMode;
	CLaserScanDoc::s_HalfPeriod=m_LaserControl_Settings.m_HalfPeriod;
	CLaserScanDoc::s_FrequencySignal=m_LaserControl_Settings.m_FrequencySignal;
	CLaserScanDoc::s_PulseLengthSignal=m_LaserControl_Settings.m_PulseLengthSignal;
	CLaserScanDoc::s_FirstPulseKillerLengthSignal=m_LaserControl_Settings.m_FirstPulseKillerLengthSignal;
	CLaserScanDoc::s_QSwtchDelaySignal=m_LaserControl_Settings.m_QSwtchDelaySignal;
	//standby
	CLaserScanDoc::s_StandbyHalfPeriod=m_LaserControl_Settings.m_StandbyHalfPeriod;
	CLaserScanDoc::s_StandbyFrequency=m_LaserControl_Settings.m_StandbyFrequency;
	CLaserScanDoc::s_StanbyPulseLength=m_LaserControl_Settings.m_StanbyPulseLength;
	//CDialog::OnOK();
}