ADC Library

ADC (Analog to Digital Converter) module is available with a number of AVR MCU modules. ADC is an electronic circuit that converts continuous signals to discrete digital numbers. ADC Library provides you a comfortable work with the module.

Library Routines

ADC_Init

Prototype

procedure ADC_Init();

// for XMEGA family of MCUs

procedure ADCx_Init();

Returns

Nothing.

Description

Initializes internal ADC module to work with XTAL frequency prescaled by 128. Clock determines the time period necessary for performing A/D conversion.

For XMEGA family of MCUs change the X in the routine prototype with A or B.

Requires
  • MCU with built-in ADC module.
Example
ADC_Init();   // Initialize ADC module with default settings
ADCA_Init();  // Initialize ADC module with default settings

ADCx_Init_Advanced

Prototype

procedure ADCx_Init_Advanced(AdcMode, Reference : byte);

Returns

Nothing.

Description
  • Initializes internal ADC module to work with user defined settings.
  • Exist only for XMEGA family of MCUs
  • In order to use this routine, change the X in the routine prototype with A or B.

Parameters AdcMode and Reference determine the work mode for ADC module and can have the following values:

    Description Predefined library const
    Resolution of ADC module :
    8 bit resolution _ADC_8bit
    12 bit resolution _ADC_12bit
    Voltage Reference :
    Internal 1V _ADC_INTERNAL_REF_1V
    Internal VCC/1.6V _ADC_INTERNAL_REF_VCC
    External Reference on PORTA _ADC_EXTERNAL_REF_A
    External Reference on PORTB _ADC_EXTERNAL_REF_B
Requires
  • MCU with built-in ADC module.
Example
ADCA_Init_Advanced(_ADC_12bit, _ADC_INTERNAL_REF_1V);  // Initialize ADC module with 12bit resolution and internal voltage reference of 1V

ADC_Get_Sample

Prototype

function ADC_Get_Sample(channel : byte) : word;

// for XMEGA family of MCUs

function ADCx_Get_Sample(channel : byte) : word;

Returns

10-bit or 12-bit unsigned value (MCU dependent) from the specified channel.

Description

Routine acquires analog value from the specified channel.

Parameter channel represents the channel from which the analog value is to be acquired. Refer to the appropriate datasheet for channel-to-pin mapping.

For XMEGA family of MCUs change the X in the routine prototype with A or B.

Requires
  • The MCU with built-in ADC module.
  • Prior to using this routine, ADC module needs to be initialized. See ADC_Init.
Example
var adc_value : word
...
ADC_Init();                        // Initialize ADC module with default settings
adc_value := ADC_Get_Sample(2);    // Acquire analog value from channel 2

ADC_Read

Prototype

function ADC_Read(channel : byte) : word;

// for XMEGA family of MCUs

function ADCx_Read(channel : byte) : word;

Returns

10-bit or 12-bit unsigned value (MCU dependent) from the specified channel.

Description

Routine initializes internal ADC module and acquires analog value from the specified channel. Clock determines the time period necessary for performing A/D conversion.

Parameter channel represents the channel from which the analog value is to be acquired. Refer to the appropriate datasheet for channel-to-pin mapping.

For XMEGA family of MCUs change the X in the routine prototype with A or B.

Requires

Nothing.

Example
var tmp : word;
...
tmp := ADC_Read(2);  // initialize ADC module and acquire analog value from ADC module channel 2

ADC_Set_Active

Prototype

procedure ADC_Set_Active(adc_gs : ^TADC_Get_Sample);

Description

Sets active ADC module.

Parameters

Parameters :

Returns

Nothing.

Requires

Routine is available only for MCUs with multiple ADC modules.

Used ADC module must be initialized before using this routine. See ADC_Init and ADCx_Init_Advanced routines.

Example
// Activate ADC2 module
ADC_Set_Active(@ADC2_Get_Sample); 
Notes

None.

Library Example

This example code reads analog value from channel 2 and displays it on PORTB and PORTC.

program ADC_on_LEDs;

var adc_rd : word;

begin

  DDRB := 0xFF;               // Set PORTB as output
  DDRC := 0xFF;               // Set PORTC as output
  
  while (TRUE) do
    begin
      adc_rd := ADC_Read(2);  // get ADC value from 2nd channel
      PORTB := adc_rd;        // display adc_rd[7..0]
      PORTC := Hi(adc_rd);    // display adc_rd[9..8]
    end;
end.

HW Connection

ADC HW connection

ADC HW connection

Want more examples and libraries? 
Find them on LibStock - A place for the code