Interfacing an ADC

advertisement
La ACES Student Ballooning Course
Programming Unit
Activity P5 – Interfacing to a serial ADC
Summary:
Students will use the BalloonSat development board to demonstrate synchronous serial
communication between the BASIC Stamp micro-controller and the ADC0834 analog-to-digital
converter (ADC). An analog voltage signal from a variable power supply or voltage divider will
be digitized by the ADC0834 and readout by the BASIC Stamp micro-controller.
Materials:
Each student team should have the following materials, equipment, and supplies:
1. An assembled and tested BalloonSat development board.
2. Bench power supply capable of supplying 9 to 15 VDC at 100 mA of current.
3. Personal computer with Parallax BASIC Stamp software. Version 2.2 was current as of
08/17/2005. Download from Parallax, Inc. website (www.parallax.com).
4. Standard 9-pin serial cable.
5. BalloonSat schematic diagram. (BalloonSat Assembly Manual)
6. Manufacturer’s datasheet for the ADC083x family of serial Analog-to-Digital Converters
(BalloonSat uses the ADC0834).
7. Variable voltage source, 0 to 2.5VDC (power supply or potentiometer voltage divider).
CAUTION: DO NOT EXCEED THE VOLTAGE RATINGS OF THE ADC0834.
Procedure:
1. Setup the BalloonSat development board, appropriate DC power supply and host
computer. Verify communication with BASIC Stamp micro-controller.
4. Referring to the BalloonSat manual, identify the circuit board pads for the analog-todigital converter inputs. The BalloonSat board has square pads for connecting a voltage
source to the individual analog inputs of the 4-channel ADC0834 chip. These are labelled
CH0, CH1, CH2 and CH3. You will connect a variable voltage source to ADC CH0 for
this exercise. The positive terminal of your voltage source should connect to the CH0 pad
and the return lead (or circuit common) must connect to a suitable GND connection on
the BalloonSat board (one of the GND testpoints for example).
5. Refer to the examples in the Parallax “Basic Analog and Digital” Student Guide.
Chapter 3 has a detailed discussion using an ADC0831 serial ADC. BalloonSat uses the
4-channel ADC0834 so the details of communicating with the ADC0834 will differ from
the examples in the Parallax Student Guide. You will need to specify the correct channel
when you write serial I/O routines for your ADC. Refer to the component datasheet for
details.
6. Write a program that will select channel 0, start a conversion cycle and display the results
in the debug window. Vary the voltage input to CH0 between 0 and 2.5VDC and observe
the converted value. Modify your ADC program to perform a series of A-to-D
conversions at a specified time interval (once conversion per second for example) and
print the results to the debug window.
LSU 08242005
Programming Unit - Activity P5
1
La ACES Student Ballooning Course
Programming Unit
Activity P5 – Interfacing to a serial ADC
Expected Outcome:
Each student should become familiar with synchronous serial communication and write a simple
BASIC Stamp program for setting up and reading the ADC0834 serial ADC. The techniques
learned will be useful in developing software for balloon payloads where analog-to-digital
conversion is needed.
Issues:
Synchronous serial communications problems are usually the result of incorrect I/O pin selection
or improper timing relationship between clock and data lines. A dual-trace oscilloscope is a
useful debugging tool for synchronous serial communications problems. Observing the CHIP
SELECT, CLOCK, and DATA lines of a serial bus can help identify hardware and software
problems.
The ADC0834 ADC datasheet should be carefully reviewed. Pay particular attention to the
ADC0834 Timing diagrams and to the MUX addressing tables. In order for the ADC to work
properly it must be setup with the correct START BIT and correct channel selection bits. See the
hints below.
The ADC0834 requires a reference voltage. On BalloonSat this voltage is generated by the
AD780 Precision Voltage Reference U5. The reference voltage can be set to 2.5 or 3.0VDC by
jumper JMP2. The reference voltage used determines the full-scale value of the ADC.
CH3 of the ADC can be connected to either the CH3 input pad or to BalloonSat’s temperature
sensor. Jumper JMP3 must be placed in the proper position for the function desired.
Hints:
Be sure to use the proper I/O pins for communicating with the ADC0834. On BalloonSat, Chip
Select is P15, CLK is P14 and the DataInOut line is P13. Verify this by referring to the
BalloonSat schematic.
To select CH0 and START a conversion cycle your BASIC Stamp program must properly
sequence the CLK and DataInOut lines as shown in the ADC0834 datasheet. The following code
fragment illustrates one way to do this:
HIGH CS
LOW CS
LOW CLK
SHIFTOUT DataInOut, CLK, MSBFIRST, [mux\4]
Where CS, CLK and DataInOut have been defined as their respective I/O pins. Mux is a variable
which has a value of 12 (or hexadecimal $C) for channel 0. Can you see from the datasheet why
LSU 08242005
Programming Unit - Activity P5
2
La ACES Student Ballooning Course
Programming Unit
Activity P5 – Interfacing to a serial ADC
mux must be $C for ADC channel 0? The Start bit has a value of 8 and the SGL/DIF bit has a
value of 4. The value of mux is then 8 + 4 = 12 or $C. What are the correct values of mux to start
conversions using ADC inputs CH1, CH2 and CH3?
An example program that reads ADC Channel 0 can be found at the end of this Activity
document.
The code fragment above starts the A-to-D conversion, now the resulting value must be readout
by the BASIC Stamp. The code example below is an example for reading the ADC value into the
variable “result”.
SHIFTIN DataInOut, CLK, MSBPOST, [result\8]
Use the BASIC Stamp HELP Utility or the Programming Manual for a detailed discussion of the
SHIFTOUT and SHIFTIN instructions.
You may construct a subroutine containing the instructions necessary for ADC setup and
readout. That subroutine could be called at a period interval and/or executed a specified number
of cycles depending on your particular application.
Many applications will require collecting data with BalloonSat then transferring the data to a
personal computer for display and analysis. The following sequence of steps illustrates one way
to accomplish this.
1. Using the BASIC Stamp Editor write and download a suitable data collection program. This
program might, for example, do an A/D conversion every 100 milliseconds, then output the
sample number and the A/D converter value as a decimal integer to the DEBUG window. Once
the program has been downloaded to BalloonSat, exit the BASIC Stamp Editor on the PC.
2. Run a terminal emulator program such as Hyperterm configured for the proper serial port and
communications parameters to be compatible with BalloonSat (9600 baud). As an alternative to
Hyperterm, you might want to use a free program called Term232. It can be downloaded from
Industrologic, Inc (www.industrologic.com).
3. Restart the BalloonSat. The program you downloaded will now begin execution and the data
normally sent to the DEBUG window will be captured by your terminal emulator program. You
could copy and paste the data or save it to a file.
4. Use a suitable program to display or analyze your data. For example, the captured data could
be imported to a spreadsheet or graphing program.
A useful exercise to demonstrate this technique is to use a function generator as the signal source
for BalloonSat’s A/D converter. Be careful to adjust the function generator output to a level safe
for BalloonSat. Set the function generator output to be a sine, square or triangle waveform,
LSU 08242005
Programming Unit - Activity P5
3
La ACES Student Ballooning Course
Programming Unit
Activity P5 – Interfacing to a serial ADC
collect data and graph the results in Excel. This procedure illustrates the steps required to collect
data in an actual payload, retrieve the data and analyze.
References:
BalloonSat Assembly Manual (Includes schematic, parts list, and layout drawing)
Parallax, Inc. Student Guide “Basic Analog and Digital” (on the CD or Parallax website).
Parallax Programming Handbook (www.parallax.com)
BASIC Stamp Editor software and Help files
Manufacturer’s datasheet for ADC083x family of ADC’s.
LSU 08242005
Programming Unit - Activity P5
4
La ACES Student Ballooning Course
Programming Unit
Activity P5 – Interfacing to a serial ADC
EXAMPLE Program to Read the ADC Channel 0
' {$STAMP BS2p}
' {$PBASIC 2.5}
adcBits VAR Byte
v
VAR Byte
mux
VAR Byte
CS
PIN 15
CLK
PIN 14
DataOutput PIN 13
DEBUG CLS
mux = 12
'mux=12 for ADC CH0
DO
'Main Program Loop
GOSUB ADC_Data
GOSUB Display
PAUSE 10
'pause as desired between loop iterations
LOOP
ADC_Data:
HIGH CS
LOW CS
LOW CLK
'Send command to start conversion on ADC CH0
SHIFTOUT DataOutput, CLK, MSBFIRST, [mux\4]
'Now read the resulting value
SHIFTIN DataOutput, CLK, MSBPOST, [adcBits\8]
RETURN
Display:
DEBUG HOME
DEBUG "value = ", BIN8 adcBits 'format the output
RETURN
LSU 08242005
Programming Unit - Activity P5
5
Download