Line 2: Line 2:
 
The Atmega32 comes with a 10-bit, 8 channel inbuilt Ananlog to Digital Convertor (ADC). We will set it up and read temperature from LM35 and light with a simple (light dependent Resistor)LDR. So let's get started!  
 
The Atmega32 comes with a 10-bit, 8 channel inbuilt Ananlog to Digital Convertor (ADC). We will set it up and read temperature from LM35 and light with a simple (light dependent Resistor)LDR. So let's get started!  
 
=Basics=
 
=Basics=
 +
The ACSRA register allows us to enable the adc and set the sampling rate.
 
'''ADC  Control and Status Register A (ACSRA):'''<br/>
 
'''ADC  Control and Status Register A (ACSRA):'''<br/>
 
{| class = "table table-responsive table-striped "
 
{| class = "table table-responsive table-striped "
Line 11: Line 12:
 
|1||0||0||0||0||0||0||1
 
|1||0||0||0||0||0||0||1
 
|}
 
|}
 +
We will first initialize the ADC with the following code
 +
# Enable ADC by Setting ADEN bit of ADCSRA and set the sampling frequency to half of oscillator frequency (i.e 8 MHz)
 +
# Select channel zero by default.
 +
 +
<syntaxhighlight>
 +
void ADC_Init()
 +
{
 +
  ADCSRA=(1<<ADEN) | (1<<ADPS0); /* Enable ADC , sampling freq=osc_freq/2 */
 +
  ADMUX=0x00;                    /* Result right justified, select channel zero */
 +
}
 +
</syntaxhighlight>
 +
Let us write another function to select the required channel and read the analog data as below .
 +
 +
  
 
'''ADC Multiplexer Select (ADMUX)''' <br/>
 
'''ADC Multiplexer Select (ADMUX)''' <br/>

Revision as of 18:04, 25 March 2016

The Atmega32 comes with a 10-bit, 8 channel inbuilt Ananlog to Digital Convertor (ADC). We will set it up and read temperature from LM35 and light with a simple (light dependent Resistor)LDR. So let's get started!

Basics

The ACSRA register allows us to enable the adc and set the sampling rate. ADC Control and Status Register A (ACSRA):

7 6 5 4 3 2 1 0
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
1 0 0 0 0 0 0 1

We will first initialize the ADC with the following code

  1. Enable ADC by Setting ADEN bit of ADCSRA and set the sampling frequency to half of oscillator frequency (i.e 8 MHz)
  2. Select channel zero by default.
void ADC_Init()
 {
   ADCSRA=(1<<ADEN) | (1<<ADPS0); /* Enable ADC , sampling freq=osc_freq/2 */
   ADMUX=0x00;                    /* Result right justified, select channel zero */
 }

Let us write another function to select the required channel and read the analog data as below .


ADC Multiplexer Select (ADMUX)

7 6 5 4 3 2 1 0
REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0
0 0 0 0 0 0 0 0

Hook up