Difference between revisions of "Reading Temperature with AVR ADC"
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
- 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.
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 |