Analog to digital conversion in AVR Microcontrollers
Microprocessors, Lecture 10:
(Chapter 13 of the text book)
University of Tehran 2
Contents
• ADC units of ATmega32
• ADC programming in C
University of Tehran 3
ADC in AVR
University of Tehran 4
ADC
• Typical usage of ADC (analog to digital convertors)
University of Tehran 5
ADC
• A typical ADC• Vref= the maximum allowable volatge
University of Tehran 6
ADC resolution
• Step size: the difference between two consecutive output nembers
• For a 8-bit output and Vref=5v, – step size= 5/246
University of Tehran 7
ADC internal structure
• Successive approximation method– See page 468 of the book for algorithm details
• n steps for an n-bit output ADC• Requires n cycles to calculate digital output
University of Tehran 8
ADC in ATmega32
• 7 analog input channels
– Just one ADC multiplexed by input channels
• 10-bit output– Kept in ADCL and
ADCH registers– 6 unused bits, can
be set the upper or lower 6 bits
University of Tehran 9
AVR ADC Registers
• ADCL and ADCH to keep digital data• ADCSRA to control ADCs• ADMux to select one input channel for
conversion• SPIO, special function register
University of Tehran 10
ADMUX register
University of Tehran 11
ADMUX register
• Select the reference voltage (the maximum acceptable input channel voltage)
University of Tehran 12
ADMUX register
• Which bits of ADCH and ADCL are unused
University of Tehran 13
ADMUX register
• Which channel is selected to the ADC– Can also work in differential mode
University of Tehran 14
ADCSRA register
• ADC control and status register– Control and monitor the ADC
University of Tehran 15
ADCSRA register
• ADATE bit
• Sets the operation mode of ADC• 0= single conversion
– Converts the input just one time every time ADSC becomes 1
• 1= free running – Continuously converts the input to digital values
with some frequency– For ADATE=1 we have more ADC options, Take a
look at AVR documents for more details if you are interested!
University of Tehran 16
ADCSRA register
• Selecting the ADC clock
University of Tehran 17
ADC clock
• Determines the speed of sampling the input data
– Each conversion takes around 13 ADC clocks• Larger frequency has smaller accuracy• In AVR, frequency have to be less than 200
kHz• Set it to smaller frequency (ADPS[0..2]=111) if
speed is not critical
University of Tehran 18
ADC programming in C
University of Tehran 19
ADC programming in CA program that coverts the analog voltage of ADC0 and copies it to portD and portB--polling method
•The ADSC bit should be 1 for the ADC to start conversion•Returns to 0 automatically once the conversion is completed
University of Tehran 20
ADC programming in CA program that coverts the analog voltage of ADC0 and copies it to portD and portB--interrupt method
University of Tehran 21
Connecting sensors to AVR
• Transducer (sensor): convert environment parameters (temperature, pressure, velocity,…) to electrical quantities (voltage, current, capacitance, resistance)
• Signal conditioning: converting electrical quantities to voltage
University of Tehran 22
Connecting sensors to AVR-example
University of Tehran 23
Connecting LM35 to AVR
• In AVR:– Vref=2.56v– 10 bit output, 1024 values step size=2.56/1024= 2.5
mv
• In LM34:– for 1 degree increase in temperature, we have 10mv
increase in output voltage If the temperature increases by one degree:
– 10mv increase in sensor output– 10/2.5=4 increase in ADC output
• Divide the ADC result by 4 to get actual temperature (shift right 2 times)
University of Tehran 24
Connecting LM35 to AVR
• Example: temp= 20 degrees, sensor output= 200mv (10mv for every degree), this voltage is converted to 0x1010000=80 (200mv/2.5mv=80) by the ADC
• Divide by 4 to get actual temperature by ADC
University of Tehran 25
ADC programming in C in CodeVision
• Set different values in the project setup wizard