This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

ADC reading problem

Hi everyone,

I'm new with arm microcontrollers and I'm having a problem with ADC. I'm setting it up properly (I think), but still, when I try showing the conversion result it keep changing even when a conversion isn't requested. Here is the source code, I would really appreciate if anyone could help. That is it. Thanks in advance! Rodrigo

unsigned int channel=0, valorad[7]; //global variables

void adcinit(void){ //initialize adc
                        unsigned int AD0CR_setup = (14<<8) | (1>>16) | (0<<19)|(0<<18)|(0<<17) | (1<<21) | (1<<6); //CLKDIV 15, BURST MODE ON, RESOLUTION 10 BITS, POWER UP ADC, SELECT AD0.6
                        AD0CR =  AD0CR_setup;
}

void readADC(void){//read adc
        unsigned long AD0GDR_Read = AD0GDR;// read AD0GDR register
        int currentResult; //variable declaration
        channel = (AD0GDR_Read>>24) & 0xF; //Extract Channel Number
        currentResult = (AD0GDR_Read>>6) & 0x3FF; //Extract Conversion Result
        valorad[channel]=(currentResult*3.3); //write conversion result*VREF in the position of their channels
}
int main(void)
{
                        char escr[100]; //variable utilized by lcd
                        initClocks(); //Initialize CPU and Peripheral Clocks @ 60Mhz
                        initTimer0(); //Initialize Timer0

                        lcd_init(); //initialize lcd
                        adcinit(); //initialize adc


        while(1)
                {                               readADC(); //read ADC conversion and channel
                                                sprintf(escr,"\f\rV = %.4d", valorad[6]); //show tension in AD0.6
                                                lcd_puts(escr);//show tension in AD0.6
                                                delayMS(1000);//delay 1 sec
                }

        }

0