27
ROBO INDIA http://roboindia.com

ADC - Analog to Digital Conversion on AVR microcontroller Atmega16

Embed Size (px)

Citation preview

Page 1: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ROBO INDIAhttp://roboindia.com

Page 2: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16
Page 3: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16
Page 4: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ROBO INDIA

Page 5: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

SIGNAL

DISCRETE CONTINOUS

ROBO INDIA

Page 6: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• Are all CONTINUOUS time signals ANALOG ?

• All continuous time signals are analog but all analog signals are not continuous time

ROBO INDIA

Page 7: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ANALOG

Cont. TimeDiscrete

Time

ROBO INDIA

Page 8: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• The ADC converts an analog input voltage to a 10-bit digital value through successive approximation.

• The minimum value represents GND and the maximum value represents the voltage on the AREF pin minus 1 LSB

ROBO INDIA

Page 9: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

𝐴𝐷𝐶 =𝑉𝑖𝑛 . 1024

𝑉𝑟𝑒𝑓

ROBO INDIA

Page 10: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

Signal Processing

Analog Digital Mixed

ROBO INDIA

Page 11: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• What's wrong with totally analog ?• Ans – Two arrows in a Quiver is always

better than one

ROBO INDIA

Page 12: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

A digital signal is superior to an analogsignal because it is more robust to noiseand can easily be recovered, correctedand amplified. For this reason, thetendency today is to change an analogsignal to digital data

ROBO INDIA

Page 13: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ROBO INDIA

Page 14: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ROBO INDIA

Page 15: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ReadADCX() {

ADMUX=0x4X;ADCSRA=0x86;SETBIT(ADCSRA,BIT(6));

while(!(ADCSRA & (1<<ADIF)));s=ADC;

return(s);}

NOTE: X can take value from 0 to 7

ROBO INDIA

Page 16: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• ADMUX = 0x4X

• Let x = 1

⇒ ADMUX = 0x41 ⇒ ADMUX = 01000001

0 1 0 0 0 0 0 1

ROBO INDIA

Page 17: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• REFS1 = 0

• REFS0 = 1

0 1 0 0 0 0 0 1

ROBO INDIA

Page 18: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

The ADLAR bit affects the presentation of the ADC conversion result in the ADC Data Register.

• ADLAR = 0 ⇒ LEFT ADJUST

• ADLAR = 1 ⇒ RIGHT ADJUST

0 1 0 0 0 0 0 1

ROBO INDIA

Page 19: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• MUX4..0 = 00001

0 1 0 0 0 0 0 1

ROBO INDIA

Page 20: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ReadADCX() {

ADMUX=0x4X; // DONEADCSRA=0x86;SETBIT(ADCSRA,BIT(6));

while(!(ADCSRA & (1<<ADIF)));s=ADC;

return(s);}

NOTE: X can take value from 0 to 7

ROBO INDIA

Page 21: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• ADCSRA = 0x86

• Let x = 1

⇒ ADCSRA = 0x41 ⇒ ADCSRA = 10000110

1 0 0 0 0 1 1 0

ROBO INDIA

Page 22: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• BIT 7

• ADEN ⇒ ADC Enable bit

• ADEN = 1 ⇒ Enable ADC

• ADEN = 0 ⇒ Disable ADC

1 0 0 0 0 1 1 0

ROBO INDIA

Page 23: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• BIT 6

• ADSC - Write this bit to one to start each conversion

1 0 0 0 0 1 1 0

ROBO INDIA

Page 24: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

• BIT 4

• ADIF - This bit is set when an ADC conversion completes

1 0 0 0 0 1 1 0

ROBO INDIA

Page 25: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ADPS2..0 = 110 ⇒ Division factor is 64

1 0 0 0 0 1 1 0

ROBO INDIA

Page 26: ADC - Analog to Digital  Conversion on AVR microcontroller Atmega16

ReadADCX() {

ADMUX=0x4X; // DONEADCSRA=0x86; // DONESETBIT(ADCSRA,BIT(6)); // DONE

while(!(ADCSRA & (1<<ADIF)));s=ADC;

return(s);}

NOTE: X can take value from 0 to 7

ROBO INDIA