Hi everyone.
I have some problem with reading of ADC value from Atemega32u4.
I want to read value from atmega32u4, pin PD6 (#26) which have ADC9.
My Vref is internal, and I don't have connect anything to this pin.
I have written two functions.
- initializeADC9, who just initliaze registers. e.g. as prescaler, mux and control/status register.
- readAnalogADC9, who just starting the conversation and read values from ADC9.
The problem is: I don't get any sensible values at all!
my return value (result) just jumping around, even when I connecting this pin to VCC or GND!
Can anybody see what I doing wrong?
* I using this code at Arduino! Thats why I have access to Serial.println();
* I have already tried with different data registers! ADC, ADCH or ADCL.
* I dont want to use interrupt! I just want to read ADC value when I need it.
Thanks...
int main(void){ initializeADC9(); while(1){ int value = readAnalogADC9(); Serial.print("ADC(9) - "); Serial.println(value); delay(2000); } } void initializeADC9(){ //PRESCALER //DIVIDING BY 128 (DUE 16KHZ FREQUENCY) ADCSRA |= _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); //ADC MSB VALUE //DATA/VALUE WILL BE THEN 8BIT (NOT 10BIT) ADMUX |= _BV(ADLAR); //ADC internal Vref ADMUX = ~_BV(REFS1) | ~_BV(REFS0); //ADC MUX channel 9 (ADC9) ADCSRB |= _BV(MUX5); ADMUX |= ~_BV(MUX4) | ~_BV(MUX3) | ~_BV(MUX2) | ~_BV(MUX1) | _BV(MUX0); //ADC FREE RUNNING ADCSRB = ~_BV(ADTS3) | ~_BV(ADTS2) | ~_BV(ADTS1) | ~_BV(ADTS0); //ADC ENABLE ADCSRA |= _BV(ADEN); //ADC AUTO-TRIGGER ADCSRA |= _BV(ADATE); //ADC START CONVERSATION ADCSRA |= _BV(ADSC); } int readAnalogADC9(){ //ADC START CONVERSATION ADCSRA |= _BV(ADSC); while(ADCSRA & _BV(ADSC)); return ADCH; }