コード例 #1
0
ファイル: Encoder.cpp プロジェクト: roboard/86Duino_Linux_SDK
void Encoder::_pabInit(int samplerate) {
  	_filterAndSampleWindowInit(mcn, mdn);
	
	mcsif_SetMode(mcn, mdn, MCSIF_ENC_PAB);
    
    _defaultEncoderSetting(mcn, mdn);
    
#if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP)
    io_DisableINT();
#elif defined (DMP_LINUX)
	OSSPINLOCK(encvar);
#endif

    if(samplerate == 1)
    {
		mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA);
		_mcmode[mcn] = MODE_AB_PHASE;
	}
	else
	{
		mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB);
		_mcmode[mcn] = MODE_AB_PHASE_x2;
	}
	
#if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP)
	io_RestoreINT();
#elif defined (DMP_LINUX)
	OSSPINUNLOCK(encvar);
#endif
}                                                   
コード例 #2
0
ファイル: Encoder.cpp プロジェクト: roboard/86Duino_Linux_SDK
void Encoder::_cwccwInit(int samplerate) {
  	_filterAndSampleWindowInit(mcn, mdn);
	
	mcsif_SetMode(mcn, mdn, MCSIF_ENC_CWCCW);
    
    _defaultEncoderSetting(mcn, mdn);
    
#if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP)
    io_DisableINT();
#elif defined (DMP_LINUX)
	OSSPINLOCK(encvar);
#endif

    if(samplerate == 1)
    {
    	mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1);
		_mcmode[mcn] = MODE_CWCCW;
	}
    else
    {
    	mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INCBOTH + MCENC_CWCCW_CCW_DECBOTH);
    	_mcmode[mcn] = MODE_CWCCW_x2;
    }
	
#if defined (DMP_DOS_BC) || (DMP_DOS_DJGPP)
	io_RestoreINT();
#elif defined (DMP_LINUX)
	OSSPINUNLOCK(encvar);
#endif
}
コード例 #3
0
ファイル: Encoder.cpp プロジェクト: drbokko/86Duino
void Encoder::_pabInit(int samplerate) {
  	_filterAndSampleWindowInit(mcn, mdn);
	
	mcsif_SetMode(mcn, mdn, MCSIF_ENC_PAB);
    
    _defaultEncoderSetting(mcn, mdn);
    
    io_DisableINT();
    if(samplerate == 1)
    {
		mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA);
		_mcmode[mcn] = MODE_AB_PHASE;
	}
	else
	{
		mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB);
		_mcmode[mcn] = MODE_AB_PHASE_x2;
	}
	io_RestoreINT();
}                                                   
コード例 #4
0
ファイル: Encoder.cpp プロジェクト: drbokko/86Duino
void Encoder::_cwccwInit(int samplerate) {
  	_filterAndSampleWindowInit(mcn, mdn);
	
	mcsif_SetMode(mcn, mdn, MCSIF_ENC_CWCCW);
    
    _defaultEncoderSetting(mcn, mdn);
    
    io_DisableINT();
    if(samplerate == 1)
    {
    	mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1);
		_mcmode[mcn] = MODE_CWCCW;
	}
    else
    {
    	mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INCBOTH + MCENC_CWCCW_CCW_DECBOTH);
    	_mcmode[mcn] = MODE_CWCCW_x2;
    }
	io_RestoreINT();
}
コード例 #5
0
ファイル: Encoder.cpp プロジェクト: drbokko/86Duino
void Encoder::_pdirInit(int samplerate) {
  	_filterAndSampleWindowInit(mcn, mdn);
	
	mcsif_SetMode(mcn, mdn, MCSIF_ENC_PDIR);
    
    _defaultEncoderSetting(mcn, mdn);
    
    io_DisableINT();
	if(samplerate == 1)
	{
    	mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC0TO1 + MCENC_PDIR_DIR1_DEC0TO1);
    	_mcmode[mcn] = MODE_STEP_DIR;
    }
    else
    {
    	mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INCBOTH + MCENC_PDIR_DIR1_DECBOTH);
    	_mcmode[mcn] = MODE_STEP_DIR_x2;
    }
	io_RestoreINT();
}
コード例 #6
0
ファイル: Encoder.cpp プロジェクト: drbokko/86Duino
void Encoder::setInputPolarity(bool pinA, bool pinB, bool pinZ) {
	if(mode == MODE_NOSET || mode == MODE_CAPTURE || mode == MODE_SSI) return;
	
	mcsif_Disable(mcn, mdn);
	if(mode == MODE_STEP_DIR)
	{
		// 8 conditions
		if(pinA == LOW && pinB == HIGH)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC1TO0 + MCENC_PDIR_DIR1_DEC1TO0);
		}
		else if(pinA == HIGH && pinB == LOW)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DEC0TO1 + MCENC_PDIR_DIR1_INC0TO1);
		}
		else if(pinA == LOW && pinB == LOW)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DEC1TO0 + MCENC_PDIR_DIR1_INC1TO0);
		}
		else // all HIGH
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INC0TO1 + MCENC_PDIR_DIR1_DEC0TO1);
		}
		
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ1);
	}
	else if(mode == MODE_CWCCW)
	{
		if(pinA == LOW && pinB == HIGH)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC1TO0 + MCENC_CWCCW_CCW_DEC0TO1);
		}
		else if(pinA == HIGH && pinB == LOW)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC1TO0);
		}
		else if(pinA == LOW && pinB == LOW)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC1TO0 + MCENC_CWCCW_CCW_DEC1TO0);
		}
		else // all NORMAL
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_CWCCW_CW_INC0TO1 + MCENC_CWCCW_CCW_DEC0TO1);
		}
		
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ1);
	}
	else if(mode == MODE_AB_PHASE)
	{
		if((pinA == LOW && pinB == LOW) || (pinA == HIGH && pinB == HIGH))
			mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCA + MCENC_PAB_DIR1_DECA);
		else
			mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_DECA + MCENC_PAB_DIR1_INCA);
		
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ1);
	}
	// 2X samplerate cases
	else if(mode == MODE_STEP_DIR_x2)
	{
		// 4 conditions
		if(pinB == LOW)
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_DECBOTH + MCENC_PDIR_DIR1_INCBOTH);
		}
		else // all HIGH
		{
			mcenc_SetCntMode(mcn, mdn, MCENC_PDIR_DIR0_INCBOTH + MCENC_PDIR_DIR1_DECBOTH);
		}
		
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_PDIR_IDXCOND_Z, MCENC_ICZ1);
	}
	else if(mode == MODE_CWCCW_x2)
	{
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_CWCCW_IDXCOND_Z, MCENC_ICZ1);
	}
	else if(mode == MODE_AB_PHASE_x2)
	{
		if((pinA == LOW && pinB == LOW) || (pinA == HIGH && pinB == HIGH))
			mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_INCAB + MCENC_PAB_DIR1_DECAB);
		else
			mcenc_SetCntMode(mcn, mdn, MCENC_PAB_DIR0_DECAB + MCENC_PAB_DIR1_INCAB);
		
		if(pinZ == LOW)
		{
			mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ0);
			_setZPol = true;
		}
		else
			mcenc_SetIdxCond(mcn, mdn, MCENC_PAB_IDXCOND_Z, MCENC_ICZ1);
	}
	mcsif_Enable(mcn, mdn);
}