LPC2148 – ADC Tutorial

Hi guys.. Today we will see LPC2148 ADC Tutorial…

Suggest To Read

LPC2148 ADC Tutorial

Introduction

Microcontrollers are very useful especially when it comes to communicate with other devices, such as sensors, motors, switches, memory and even other microcontroller. As we all know many interface methods have been developed over years to solve complex problem of balancing need of features, cost, size, power consumption, reliability etc. but ADC Analog-to-Digital converter remains famous among all. Using this ADC we can connect any type of Analog sensor.

LPC2148 ADC

LPC2148 has two inbuilt 10-bit Successive Approximation ADC. ADC0 has six channels (AD0.1-AD0.6). ADC1 has 8-Channels (AD1.0-AD1.7)ADC operating frequency is 4.5 MHz (max.), operating frequency decides the conversion time.

 The ADC reference voltage is measured across GND to VREF, meaning it can do the conversion within this range. Usually, the VREFPis connected to VDD.

Features

  • 10 bit successive approximation analog to digital converter (one in LPC2141/2 and two in LPC2144/6/8).
  • Input multiplexing among 6 or 8 pins (ADC0 and ADC1).
  • Power-down mode.
  • Measurement range 0 V to VREF (typically 3 V; not to exceed VDDA voltage level).
  • 10 bit conversion time ≥2.44 µs.
  • Burst conversion mode for single or multiple inputs.
  • Optional conversion on transition on input pin or Timer Match signal.
  • Global Start command for both converters (LPC2144/6/8 only).

As LPC2148 works on 3.3 volts, this will be the ADC reference voltage.
Now the Resolution of ADC = 3.3/(2^{10}) = 3.3/1024 =0.003222 = 3.2mV

ADC Pins In LPC2148

Let’s have a look at table which illustrate ADC related channels and pins:

ADC0

ADC ChannelPin NumberFunctions of that PinAssociated PINSEL Register Bits
ADC 0.1P0.28GPIO, AD0.1, CAP0.2, MAT0.224,25 bits of PINSEL1
ADC 0.2P0.29GPIO, AD0.2, CAP0.3, MAT0.326,27 bits of PINSEL1
ADC 0.3P0.30GPIO, AD0.3, EINT3, CAP0.028,29 bits of PINSEL1
ADC 0.4P0.25GPIO, AD0.4, AOUT18,19 bits of PINSEL1
ADC 0.6P0.4GPIO, SCK0, CAP0.1 , AD0.608,09 bits of PINSEL0
ADC 0.7P0.5GPIO, MISO0, MAT0.1 , AD0.710,11 bits of PINSEL0

ADC1

ADC ChannelPin NumberFunctions of that PinAssociated PINSEL Register Bits
ADC 1.0P0.6GPIO, MOSI0, CAP0.2, AD1.012,13 bits of PINSEL0
ADC 1.1P0.8GPIO, TXD1, PWM4, AD1.116,17 bits of PINSEL0
ADC 1.2P0.10GPIO, RTS1, CAP1.0, AD1.220,21 bits of PINSEL1
ADC 1.3P0.12GPIO, DSR1, MAT1.0, AD1.324,25 bits of PINSEL1
ADC 1.4P0.13GPIO, DTR1, MAT1.1 , AD1.426,27 bits of PINSEL3
ADC 1.5P0.15GPIO, RI1, EINT2 , AD1.530,31 bits of PINSEL3
ADC 1.6P0.21GPIO, PWM5, AD1.6, CAP1.310,11 bits of PINSEL1
ADC 1.7P0.22GPIO, AD1.7, CAP0.0, MAT0.012,13 bits of PINSEL1

Registers Used For ADC

There are several registers which will be used to setup and configure ADC feature in LPC2148. The two registers we will be concerning about: ADCR (A/D Control Register) and ADGDR (A/D Global Data register).

RegisterDescription
ADxCRA/D COntrol Register: Used for Configuring the ADC
ADxGDRA/D Global Data Register: This register contains the ADC’s DONE bit and the result of the most recent A/D conversion
ADxINTENA/D Interrupt Enable Register
ADxDR0 - ADxDR7A/D Channel Data Register: Contains the recent ADC value for respective channel
ADxSTATA/D Status Register: Contains DONE & OVERRUN flag for all the ADC channels
ADxGSRA/D Global Start Register: This address can be written (in the AD0 address range) to start conversions in both A/D converters simultaneously.

Note : x = 0/1 (ie ADC0 or ADC1)

Here we will see only ADC0. But ADC1 also same like ADC0 except Register name.

AD0CR – A/D Control Register

This is the main control register for AD0. Used for Configuring the ADC0.

adc-control-register LPC2148 - ADC Tutorial

AD0GDR – A/D Global Data Register

This is the global data register for the corresponding ADC module. It contains the ADC’s DONE bit and the result of the most recent A/D conversion.

adc-global0data-register LPC2148 - ADC Tutorial

AD0INTEN – A/D Interrupt Enable Register

Using this register interrupts can be enabled or disabled for any ADC channels.

adinten-register LPC2148 - ADC Tutorial

AD0DR0 to AD0DR7 – A/D Data registers

This register contains the result of the most recent conversion completed on the corresponding channel [0 to 7].

ad0-ad7 LPC2148 - ADC Tutorial

AD0STAT – A/D Status register

This register contains DONE and OVERRUN flags for all of the A/D channels along with A/D interrupt flag.

adc-status-register LPC2148 - ADC Tutorial

AD0GSR – A/D Global Start Register

This register is used to simultaneously start conversion process of both ADC modules.

global-start-register LPC2148 - ADC Tutorial

Note : Though there are some more registers, we are restricting ourselves to use these registers only as this will be more convenient.

Circuit Diagram

LCD:

  • RS :  P1.16
  • RW : P1.17
  • EN : P1.18
  • Data Lines : P1.24 – P1.31

ADC:

  • P0.4 (ADC0.6) : Potentio meter

adc-circuit-diagram LPC2148 - ADC Tutorial

Programming Algorithm

Below are the steps for configuring the LPC1768 ADC.

  1. Configure the GPIO pin for ADC function using PINSEL register.
  2. Enable the CLock to ADC module.
  3. Power on the internal ADC module by setting ADCR.PDN bit (ADCR’s 21st bit).
  4. Select the Particular channel for A/D conversion by setting the corresponding bits in ADCR.SEL (bit 0 – bit 7).
  5. Set the ADCR.START bit for starting the A/D conversion for selected channel (ADCR’s 24st bit).
  6. Wait for the conversion to complete, ADGDR.DONE bit will be set once conversion is over.
  7. Read the 10-bit A/D value from ADGdR.RESULT.

Code

In our tutorial we are using ADC0.6 (ADC0 6th channel). So P0.4 is a pin for that ADC0.6.

You can download this project from Here.

Code.c

ADC.H

LCD.H

Output

lpc2148-adc-interface-output LPC2148 - ADC Tutorial

That’s all guys… Now you can play around ADC. If you have any doubt please let us know.You can download this project from Here.

%d bloggers like this: