lpcware

ADC read at 0

Discussion created by lpcware Employee on Jun 15, 2016
Content originally posted in LPCWare by blasiis on Mon Jun 21 08:34:59 MST 2010
LPC1758
I have this simple code for read the AD from 2 to 7, I read this value in different time. This routine run every 1 ms .
Normally all is OK, it  happens sometimes that a single value read is = 0 (only one among others), may  depend on what?
I have checked with oscilloscope the analog in put and it is ok.

Thanks

void ReadADC ()
{
  uint32_t ADCR, ADGR;
  ADGR = LPC_ADC->ADGDR;
  ADCR = LPC_ADC->ADCR;

     switch (ADCR & 0x00ff)
       {
       case 0x04:
         mem_In_2 = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_2);
      ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_2,DISABLE);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_3,ENABLE);
         break;

      case 0x08:
        mem_In_3 = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_3);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_3,DISABLE);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_4,ENABLE);
        break;

      case 0x10:
     mem_In_4 = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_4);
     In_Corr_Chair = ((mem_In_Corr_Chair [0] + mem_In_Corr_Chair [1] + mem_In_Corr_Chair [2]) / 3) >> 4;
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_4,DISABLE);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_5,ENABLE);
        break;

      case 0x20:
     mem_In_5 = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_5);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_5,DISABLE);
     ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_6,ENABLE);
        break;

      case 0x40:
     mem_In_6 = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_6);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_6,DISABLE);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_7,ENABLE);
        break;

      case 0x80:
     mem_In_7  = ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_7);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_7,DISABLE);
        ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_2,ENABLE);
        break;

      }
   ADC_StartCmd(LPC_ADC,ADC_START_NOW);
}

Outcomes