void adc_main(void){ #else void main(void){ #endif JOYSTICK_DIRECTION joystickDirection = CENTRED; INT8 adc_value; UINT8 potVoltage = 0; BOOL updateLCD = TRUE; initAdc(); while( !stopApplication() ){ ADC_ENABLE_CHANNEL(7); ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN7); ADC_SAMPLE_SINGLE(); while(!ADC_SAMPLE_READY()); ADC_DISABLE_CHANNEL(7); adc_value = ADCH; if (potVoltage != scaleValue(adc_value)){ //potVoltage changed since last sample potVoltage = scaleValue(adc_value); updateLCD = TRUE; } if (joystickDirection != getJoystickDirection()){ //joystickDirection change since last sample joystickDirection = getJoystickDirection(); updateLCD = TRUE; } if (updateLCD){ updateVoltageLCD(potVoltage, adc_value); updateJoystickDirectionLCD(joystickDirection); updateLCD = FALSE; } updateCounter(adc_value); } LED1 = LED3 = LED_OFF; return; }
INT8 GetTemperature(void){ UINT8 i; UINT16 accValue; UINT16 value; accValue = 0; for( i = 0; i < 4; i++ ) { ADC_SINGLE_CONVERSION(ADC_REF_1_25_V | ADC_14_BIT | ADC_TEMP_SENS); ADC_SAMPLE_SINGLE(); while(!ADC_SAMPLE_READY()); value = ADCL >> 2; value |= (((UINT16)ADCH) << 6); accValue += value; } value = accValue >> 2; // divide by 4 return ADC14_TO_CELSIUS(value); }