ATmega16 ADC learning

Status
Not open for further replies.

imranahmed

Advanced Member level 3
Joined
Dec 4, 2011
Messages
822
Helped
3
Reputation
6
Reaction score
3
Trophy points
1,298
Location
Karachi,Pakistan
Visit site
Activity points
6,533
Please let me know how to understand following lines:

ADMUX=(1<<REFS0); // AVcc with external capacitor at AREF
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

unsigned int ADC_read(unsigned char ch)
{
ch= ch & 0b00000111; // channel must be b/w 0 to 7
ADMUX |= ch; // selecting channel

ADCSRA|=(1<<ADSC); // start conversion
while(!(ADCSRA & (1<<ADIF))); // waiting for ADIF, conversion complete
ADCSRA|=(1<<ADIF); // clearing of ADIF, it is done by writing 1 to it

return (ADC);
}
 

What's your particular question about the code?

Do you understand the WinAVR way of representing register bits, e.g. 1<<REFS0 ?
REFS0 is a bit number (between 0 and 7), 1<<REFS0 is a bit mask.

REFS0 is defined as 6, according to the bit position in ADMUX register, review the ATmega datasheet in case of doubt.

1 << 6 equals 0x40, the bitmask to access the REFS0 bit.
 
Understanding of masking and i am not use WinAVR.
In fact it's just plain C. But you need to know how the register bits are defined in the processor specific header files.
 
Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…