day 3 am adc

Upload: bien-morfe

Post on 14-Apr-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/30/2019 Day 3 AM ADC

    1/13

    21-Aug-10 Paranz 1

    Introduction to PICMicrocontroller Programming

    & Interfacing

    August 19-21, 2010Franz Duran

    21-Aug-10 Paranz 2

    Analog-to-Digital

    Conversion

    DAY 3 Morning Session

    August 21, 2010

    21-Aug-10 Paranz 3

    Analog-to-Digital Conversion

    Process of converting an analogsignal to a proportional digital

    numberUsed in data acquisition system

    Analog-to-Digital ConverterADC, A/D converter

  • 7/30/2019 Day 3 AM ADC

    2/13

    21-Aug-10 Paranz 4

    A/D CONVERSION

    Basic 3-bit ADC

    21-Aug-10 Paranz 5

    A/D CONVERSION

    111+4.375V < Vin

    < +5.0V

    110+3.75V < Vin

    < +4.375V

    101+3.125V < Vin

    < +3.75V

    100+2.5V < Vin

    < +3.125V

    011+1.875V < Vin

    < +2.5V

    010+1.25V < Vin

    < +1.875V

    001+0.625V < Vin

    < +1.25V

    0000.0V < Vin

    < +0.625V

    D2D1D0Vin

    21-Aug-10 Paranz 6

    A/D CONVERSION

    Important ADC propertiesResolution

    # of bits higher the # of bits, the better

    Conversion time

    ADC Architecture

  • 7/30/2019 Day 3 AM ADC

    3/13

    21-Aug-10 Paranz 7

    A/D CONVERSION

    Typical A/D converter architecturesFlash ADC

    Ramp ADC

    Successive Approximation ADC

    Integrating slope ADC

    21-Aug-10 Paranz 8

    A/D CONVERSION

    Example ADC chipNational Semiconductor ADC0804

    General purpose application

    8-bit resolution

    Successive Approximation ADC

    10 Ksamples/second (free-running mode)

    0-5v input

    20-pin DIP

    21-Aug-10 Paranz 9

    A/D CONVERSION

    BasicADC0804 circuit

  • 7/30/2019 Day 3 AM ADC

    4/13

    21-Aug-10 Paranz 10

    A/D CONVERSION

    PIC16F84A

    with

    ADC0804

    21-Aug-10 Paranz 11

    PIC16F A/D MODULE

    10-bit resolution

    Successive Approximation ADC

    0-5V input range

    50Ksamples/second

    21-Aug-10 Paranz 12

    PIC16F A/D MODULE

    SFRs:ADRESH (A/D Result Register High Byte)

    ADRESL(A/D Result Register Low Byte)

    ADCON0 (A/D Control Register 0)

    ADCON1 (A/D Control Register 1)

    PIE1 (Peripheral Interrupt Enable Reg. 1)

    PIR1 (Peripheral Interrupt Enable Reg. 1)

    INTCON (Interrupt Control Register)

  • 7/30/2019 Day 3 AM ADC

    5/13

    21-Aug-10 Paranz 13

    PIC16F A/D MODULE

    21-Aug-10 Paranz 14

    PIC16F A/D MODULE

    21-Aug-10 Paranz 15

    PIC16F A/D MODULE

  • 7/30/2019 Day 3 AM ADC

    6/13

    21-Aug-10 Paranz 16

    PIC16F A/D MODULE

    21-Aug-10 Paranz 17

    PIC16F A/D MODULE

    21-Aug-10 Paranz 18

    PIC16F A/D MODULE

  • 7/30/2019 Day 3 AM ADC

    7/13

    21-Aug-10 Paranz 19

    PIC16F A/D MODULE

    21-Aug-10 Paranz 20

    PIC16F A/D MODULE

    21-Aug-10 Paranz 21

    PIC16F A/D MODULE

  • 7/30/2019 Day 3 AM ADC

    8/13

    21-Aug-10 Paranz 22

    PIC16F A/D MODULE

    A/D module initialization1. Select A/D Conversion Clock

    2. Configure Analog Channels

    21-Aug-10 Paranz 23

    PIC16F A/D MODULEvoid ADCInit(void)

    {

    ADCS0 = 0; //TAD = Fosc/32ADCS1 = 1;

    ADCS2 = 0;

    PCFG3 = 1; //Only RA0/AN0 is analog input.PCFG2 = 1; //The rest of the analog pins are

    PCFG1 = 1; //digital IO

    PCFG0 = 0;TRISA0 = 1; //RA0/AN0 is input

    CHS0 = 0; //Select channel 0

    CHS1 = 0;CHS2 = 0;

    ADFM = 1; //Right justified.

    ...

    21-Aug-10 Paranz 24

    PIC16F A/D MODULE

    ...

    ...

    ADRESL = 0x00; //Clear A/D Result registers

    ADRESH = 0x00;

    ADIE = 0; //No interruptsPEIE = 0;

    GIE = 0;

    ADON = 1; //Turn on ADC circuit

    return;

    }

  • 7/30/2019 Day 3 AM ADC

    9/13

    21-Aug-10 Paranz 25

    PIC16F A/D MODULE

    A/D read1. Select Channel

    2. Wait Acquisition Time

    3. Start A/D Conversion

    21-Aug-10 Paranz 26

    PIC16F A/D MODULE//Read the 10-bit A/D value

    unsigned int ADCRead(void)

    {

    unsigned int adc_temp; //Hold the 10-bit A/D value

    ADGO = 1; //Start A/D conversion.

    while(ADGO == 1); //Wait while conversion is

    // not finished.

    adc_temp = ADRESL; //Read the lower 8-bit, then

    adc_temp += (ADRESH

  • 7/30/2019 Day 3 AM ADC

    10/13

    21-Aug-10 Paranz 28

    PIC16F A/D MODULE

    EXERCISE:Open Example#1

    Build the project, program the microcontroller, andrun the application

    Example#1

    21-Aug-10 Paranz 29

    PIC16F A/D MODULEExample#2

    21-Aug-10 Paranz 30

  • 7/30/2019 Day 3 AM ADC

    11/13

    21-Aug-10 Paranz 31

    21-Aug-10 Paranz 32

    Interfacing LM35 Sensor

    LM35National Semicon.

    Temp. sensor

    T0-92 package

    21-Aug-10 Paranz 33

  • 7/30/2019 Day 3 AM ADC

    12/13

    21-Aug-10 Paranz 34

    21-Aug-10 Paranz 35

    21-Aug-10 Paranz 36

  • 7/30/2019 Day 3 AM ADC

    13/13

    21-Aug-10 Paranz 37

    21-Aug-10 Paranz 38

    21-Aug-10 Paranz 39