Download ADC10 to measure 0 to 4V

Measure and Display 0 to 4 V on LCD Using
ADC10
Project Name: Measure and Display 0 to 4 V on LCD Using ADC10
Programming Language: C
Associated Part Families: CY8C21x23, CY8C21x34, CY8C21x45, CY8C22x45, CYWUSB6953, CY8C28x45
®
Software Version: PSoC Designer™ 5.2
Related Hardware: Customize
Related Document: SSlopeCalc.xls
Objective
This project demonstrates to measure a 0 to 4 V input using ADC10 available in limited analog families of PSoC
(CY8C21x23, CY8C21x34,CY8C21x45, CY8C22x45, CYWUSB6953, CY8C28x45) and display it on an LCD.
®
1
Overview
An input voltage signal of 0 to 4 V applied to P0[7] is measured using an ADC10 with 10-bit resolution. The ADC value is
converted into a floating-point value that represents the input voltage and is then displayed on the LCD.
User Module List and Placement
The following table lists user modules used in this project and the hardware resources occupied by each user module.
User Module
ADC (ADC10)
Placement
ACE00, ASE10, DBB00
LCD
Software
User Module Parameter Settings
The following tables show the user module parameter settings for each of the user modules used in the project.
LCD
Parameter
Value
Comments
LCD Port
Port_2
Port 2 is used for LCD in CY3210 PSoCEVAL
BarGraph
Disable
Bargraph is disabled as its not required for this example
ADC
Parameter
Value
Comments
ADC Input
AnalogColumn_InputMUX_0
Input to ADC comes from Analog Column Input MUX. See note
2 mentioned after this column
Data Clock
VC1
See the note 2 mentioned after this table
Current Setting
Low Current
This decides the current source setting to charge and
discharge the input capacitor; low current is 37.5 nA
PWM_High
4VC3 Periods
This decides the measurement period of ADC
PWM_Low
1VC3 Period
This decides the calculation period of ADC
Notes
1. The clock to the ADC is set to VC1; therefore, the column clock for Analog Column 0 should be set to VC1.
2.
The input to the ADC comes from Analog Column Input MUX. Select P0.7 as output of Analog Column Input MUX in Chip
View of the project. Data clock is used to feed into VC3. The possible values of the Data Clock parameter are limited to
VC1 and VC2 or SysClk. The selected clock source should lie between 240 kHz and SysClk/256. The Analog Column
Clock for the ADC should be the same as the data clock. This is necessary for the user module to function properly. If
SysClk is selected, API software overrides the column clock selection to set it correctly.
3.
The setting of Data Clock (source to VC3), current setting, VC3 divider (in Global Resources), PWM_High, and
PWM_Low decides the sample rate and input range of the ADC. To assist this selection process, a spreadsheet
(SSlopeCalc.xls) is included in project file. For parameter settings in this project and input range of 0 to 4 V, a sample
rate of 1.536 K is achieved.
Global Resources
Important Global Resources
Parameter
Value
Comments
Power Setting
5.0 V/24 MHz
Circuit must operate at 5 V Vdd and IMO must generate 24 MHz
CPU Clock
SysClk/2
CPU runs at 12 MHz
VC1=SysClk/N
12
24/12 = 2 MHz. This clock is used as the column clock for SC blocks and
as a data clock for ADC counter
VC3 Source
VC1
Should be same as Data Clock parameter of ADC user module
VC3 Divider
256
Select according to the required Sample Rate
Notes
1. VC1 is selected as Data Clock of ADC user module. Therefore, the clock source provided by VC1 must lie between
240 kHz to SysClk/256.
2.
Any other global resources may be left at their default value or configured as required.
Hardware Connections
The schematic diagram for the project is shown here.
VCC_5V
U2
CY 8C21534-24PVXI
VCC_5V
Vdd
28
R1
10Kohm
P2.0
1
R1
10Kohm
P0.7
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
VCC_5V
20
8
21
7
22
6
23
5
Vss
Vdd
Vee
RS
R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
U1
Hitachi HD44780A based
Dot Matrix LCD Module
14
Vss
®
The LCD is connected to Port2 of the PSoC chip CY8C21X34. The analog input is connected to P0[7]. The project can be
tested by varying external 0 to 4 V between VSS and P0.7.
Operation
On reset, device configuration is loaded and then code in main.c is executed.
Following are the operations performed by firmware:
1.
Start LCD
2.
Print ‘MEASURED VOLTAGE’ on the LCD at location (0,0)
3.
Enable global interrupt
4.
Start ADC for FULLRANGE(VSS to VDD) and calibrate. For bandgap reference voltage 1.3 V, start the conversion in
continuous sampling mode.
5.
Calculate the scale factor to convert the ADC counts to voltage and store it in variable fScaleFactor. The scale factor is
calculated as Volts/Count. The input voltage range is 4 V and the number of ADC counts is 1024. Therefore, the scale
factor is 4 V/1024.
6.
In an infinite loop, the following operations are performed:

Wait until ADC data is available

Read ADC data into variable iData and clear ADC flag

Multiply the ADC result by fScaleFactor to get the value of input voltage. In the multiplication, the variable iData is
typecast into a float

Convert this float value in ASCII string using function ftoa. The function returns a pointer to the string that holds the
converted ASCII value. To use this function stdlib.h header file is included in example

Display this ASCII string on LCD at location row 1 column 0 followed by string ‘V’.
To test this project, vary the input voltage given on pin P0.7 and observe the value displayed on the LCD.