void RelayTimeout(void) //2s { IO_CW_GREEN_SetLow(); IO_CCW_RED_SetLow(); TMR2_StopTimer(); }
/* Main application */ void main(void) { uint16_t u16VoltVar; uint8_t u8CtrlHighCnt; uint8_t u8CtrlLowCnt; uint8_t u8SignalCnt; uint8_t u8VoltCnt; bool bPowerIssue; bool bCheckPower; // initialize the device SYSTEM_Initialize(); InitVariable(); u16VoltVar = 0; u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; u8SignalCnt = 0; u8VoltCnt = 0; bPowerIssue = false; bCheckPower = false; // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits // Use the following macros to: // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); // Disable the Global Interrupts //INTERRUPT_GlobalInterruptDisable(); // Disable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptDisable(); __delay_ms(100); while (1) { if( gu8Mode != MODE_CHECK_VOLT && bPowerIssue == false ) { if( bCheckPower == false ) { if( gu8TMR0State & TMR0_FLAG_1S ) { gu8TMR0State &= ~TMR0_FLAG_1S; u16VoltVar = 0; u16VoltVar = ADC_GetVolt(); // 8.5V = 2250, 12V = 2850, 14V = 3200 1V ~= 170 if( u16VoltVar > DEF_OVP || u16VoltVar < DEF_UVP ) { // Issue u8VoltCnt = 0; bCheckPower = true; } else { bPowerIssue = false; } } } else { if( gu8TMR0State & TMR0_FLAG_10MS ) { gu8TMR0State &= ~TMR0_FLAG_10MS; u16VoltVar = 0; u16VoltVar = ADC_GetVolt(); // To-Do: // 8.5V = 2250, 12V = 2850, 16V = 3530 1V ~= 170 if( u16VoltVar > DEF_OVP || u16VoltVar < DEF_UVP ) { u8VoltCnt++; if( u8VoltCnt > 5 ) { bPowerIssue = true; bCheckPower = false; } } else { u8VoltCnt = 0; bCheckPower = false; } } } } // Add your application code switch( gu8Mode ) { case MODE_CHECK_VOLT: if( gu8TMR0State & TMR0_FLAG_10MS ) { gu8TMR0State &= ~TMR0_FLAG_10MS; u16VoltVar = 0; u16VoltVar = ADC_GetVolt(); // To-Do: // 8.5V = 2250, 12V = 2850, 16V = 3530 1V ~= 170 if( u16VoltVar > DEF_OVP || u16VoltVar < DEF_UVP ) { u8VoltCnt++; if( u8VoltCnt > 5 ) { bPowerIssue = true; } } else { u8VoltCnt = 0; InitMotorPosition(); } } break; case MODE_IN_VOLT: break; case MODE_CHECK_CONTROL: if( gu8TMR0State & TMR0_FLAG_10MS ) { gu8TMR0State &= ~TMR0_FLAG_10MS; u16VoltVar = 0; u16VoltVar = ADC_GetVolt(); // To-Do: // 8.5V = 2250, 12V = 2850, 16V = 3530 1V ~= 170 if( u16VoltVar > DEF_OVP || u16VoltVar < DEF_UVP ) { u8VoltCnt++; if( u8VoltCnt > 5 ) { gu8Mode = MODE_CHECK_VOLT; } } else { if( IO_CONTROL_GetValue() == HIGH ) { u8CtrlHighCnt++; u8CtrlLowCnt = 0; if( u8CtrlHighCnt > 5 ) { u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; u8SignalCnt = 0; gu8Mode = MODE_CONTROL_HIGH; } } else { u8CtrlHighCnt = 0; u8CtrlLowCnt++; if( u8CtrlLowCnt > 5 ) { u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; u8SignalCnt = 0; gu8Mode = MODE_CONTROL_LOW; } } } } break; case MODE_CONTROL_HIGH: if( gu8TMR0State & TMR0_FLAG_10MS ) { gu8TMR0State &= ~TMR0_FLAG_10MS; IO_FEEDBACK_SetDigitalOutput(); if( IO_FEEDBACK_GetValue() == HIGH ) { // C1F1 if( u8SignalCnt < 5 ) { u8SignalCnt++; } else { gu8Mode = MODE_FORWARD; // CW TMR2_StartTimer(); TMR2_WriteTimer(0); IO_CW_GREEN_SetHigh(); } } else { // C1F0 u8SignalCnt = 0; u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; gu8Mode = MODE_CHECK_CONTROL; } } break; case MODE_CONTROL_LOW: if( gu8TMR0State & TMR0_FLAG_10MS ) { gu8TMR0State &= ~TMR0_FLAG_10MS; IO_FEEDBACK_SetDigitalOutput(); if( IO_FEEDBACK_GetValue() == LOW ) { // C0F0 if( u8SignalCnt < 5 ) { u8SignalCnt++; } else { gu8Mode = MODE_BACKWARD; // CCW TMR2_StartTimer(); TMR2_WriteTimer(0); IO_CCW_RED_SetHigh(); } } else { // C0F1 u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; u8SignalCnt = 0; gu8Mode = MODE_CHECK_CONTROL; } } break; case MODE_FORWARD: if( LOW == IO_CW_GREEN_GetValue() || true == bCheckInTheMiddle() ) { TMR2_StopTimer(); IO_CW_GREEN_SetLow(); IO_B_CTRL_SetHigh(); // Set B signal to low IO_Y_CTRL_SetLow(); // Set Y signal to high IO_W_CTRL_SetHigh(); // Set W signal to low IO_FEEDBACK_SetDigitalOutput(); IO_FEEDBACK_SetLow(); u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; if( bPowerIssue == true ) { bPowerIssue = false; gu8Mode = MODE_CHECK_VOLT; } else { gu8Mode = MODE_CHECK_CONTROL; } } break; case MODE_BACKWARD: if( LOW == IO_CCW_RED_GetValue() || true == bCheckBConnectW() ) { TMR2_StopTimer(); IO_CCW_RED_SetLow(); IO_B_CTRL_SetHigh(); // Set B signal to low IO_Y_CTRL_SetLow(); // Set Y signal to high IO_W_CTRL_SetHigh(); // Set W signal to low IO_FEEDBACK_SetDigitalOutput(); IO_FEEDBACK_SetHigh(); u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; if( bPowerIssue == true ) { bPowerIssue = false; gu8Mode = MODE_CHECK_VOLT; } else { gu8Mode = MODE_CHECK_CONTROL; } } break; case MODE_FINISH: IO_CW_GREEN_SetLow(); IO_CCW_RED_SetLow(); IO_B_CTRL_SetHigh(); // Set B signal to low IO_Y_CTRL_SetLow(); // Set Y signal to high IO_W_CTRL_SetHigh(); // Set W signal to low TMR2_StopTimer(); IO_FEEDBACK_SetDigitalOutput(); if( IO_CONTROL_GetValue() == LOW ) { IO_FEEDBACK_SetHigh(); } else { IO_FEEDBACK_SetLow(); } u8CtrlHighCnt = 0; u8CtrlLowCnt = 0; if( bPowerIssue == true ) { bPowerIssue = false; gu8Mode = MODE_CHECK_VOLT; } else { gu8Mode = MODE_CHECK_CONTROL; } break; default: break; } CLRWDT(); } }
void HaltAudio(void) { TMR2_StopTimer(); } // HaltAudio