EET 2261 Unit 14 INCOMPLETE
Analog-to-Digital Conversion (ADC) &
Digital-to-Analog Conversion (DAC)



Read.
Homework #13 and Lab #13 due next
week.
Quiz next week.
Analog Quantities
•Most physical quantities (temperature,
pressure, light intensity, etc.) are analog
quantities.
•Transducers are devices that convert one of
these physical quantities to an analog voltage
or current.
•Example, a temperature sensor might
produce a voltage in mV that is proportional
to the temperature in degrees Fahrenheit.
Interfacing to the Analog World
•Before a microprocessor can work on analog
information, we must first use an analog-todigital converter (ADC) to transform the
analog values into digital binary values.
•Conversely, we use a digital-to-analog
converter (DAC) to transform digital values
from the microprocessor into analog values that
can be used to control analog devices.
•See Chapter 12 of Floyd’s Digital Electronics
for details on ADCs and DACs.
A Typical Application
Digital
outputs
Digital
inputs
Analog input
(voltage or
current)
Physical
variable
Transducer
Analog output
(voltage or
current)
ADC
.
.
.
Microprocessor
.
.
.
DAC
Actuator
Control
physical
variable
Number of Bits and Accuracy
•The ADC periodically samples the analog
signal, and converts each sampled value of the
analog signal into a binary code.
•The more bits that are used in this code, the
more accurate is the representation of the
original signal.
•The following slides (from Floyd’s Chapter 12)
show an example of how using 2 bits results in
much less accuracy than using 4 bits.
Figure 12.8 Light gray = original waveform. Blue = Reconstructed waveform using four quantization levels (2 bits).
Digital Fundamentals, Tenth Edition
Thomas L. Floyd
Copyright ©2009 by Pearson Higher Education, Inc.
Upper Saddle River, New Jersey 07458
All rights reserved.
Figure 12.10 Light gray = original waveform. Blue = Reconstructed waveform using sixteen quantization levels (4 bits).
Digital Fundamentals, Tenth Edition
Thomas L. Floyd
Copyright ©2009 by Pearson Higher Education, Inc.
Upper Saddle River, New Jersey 07458
All rights reserved.
Resolution
•Several common ways of specifying an ADC’s
resolution:
•Number of bits, n
n
•Number of output codes, = 2 , or number of
n
steps in the output, = 2 − 1
n
•Percentage resolution, = 1 / (2 − 1),
expressed as a percentage
•Step size, = Vref / 2
n
Resolution: Examples
Number of bits
Number of output
codes
Number of steps in
the output
Percentage
resolution
Step size (assuming
5 V reference
voltage)
Formula
4-bit ADC
n
2n
4
16
2n−1
15
1 / (2n−1)
6.67%
n
Vref / 2
312.5 mV
10-bit ADC
ADC Hardware
•Many analog-to-digital converter chips are
available.
•Example: the ADC0804 is a popular 8-bit
ADC chip.
•Our PIC chip has a built-in 10-bit ADC.
The PIC Chip’s Analog Inputs
•Seven of the PIC
chip’s pins (labeled
AN0 through AN7)
can be configured
as analog inputs to
the chip’s internal
ADC.
Configuring the Analog Inputs
•How do we tell the
PIC chip whether
we want to use
these pins as
analog inputs or as
digital I/O?
•Example: How do
we tell it whether
we want pin 8 to act
as AN5 or as bit 0
of PORT E?
Analog Inputs on the LAB-X1
•On the LAB-X1 board, three of these pins
(AN0, AN1, AN3) are permanently connected to
the wipers on three potentiometers.
New PICBASIC Commands &
Operators in Lab #4
•ADCIN command
•PAUSEUS command
•/ operator
•// operator
ADCIN (p. 45 in PICBASIC manual)
•Tells the PIC chip to perform an analog-todigital conversion using its built-in A/D
converter, and then saves the result of this
conversion.
•Example: ADCIN 0 result performs an A/D
conversion on the voltage present at analog
input 0, and stores the result in the variable
named result.
•Don’t confuse the ADCIN command with
ADCON0 and ADCON1, which are special
function registers on the PIC chip.
PAUSEUS (p. 113 in PICBASIC manual)
•Recall that the PAUSE command inserts a
time delay into your program. This delay is
measured in milliseconds.
•Example: PAUSE 500 causes a 500 ms delay.
•The PAUSEUS command is very similar, but
the delay is measured in microseconds instead
of milliseconds.
•Example: PAUSEUS 500 causes a 500 s
delay.
Integer Math
•Recall the difference between integers (such
as 2 or 47 or 365) and floating-point numbers
(such as 3.14 or 1.5 or 16.97).
•PICBASIC can only deal with integers, not
floating-point numbers. All math operations
give integer results.
•This requires us to play some tricks if we need
to work with floating-point numbers.
Quotient and Remainder
•We know that 7÷2 = 3.5
•Recall that another way to say this is that
7÷2 = 3 with a remainder of 1.
•In this example, 3 is called the quotient and 1
is called the remainder.
•Another example: If you take 20÷8, what is the
quotient and what is the remainder?
/ Operator (p. 35 in PICBASIC manual)
•The / operator returns the quotient part of a
division.
•Example:
•7 / 2 in a PICBASIC program will return a
result of 3.
// Operator (p. 35 in PICBASIC manual)
•The // operator returns the remainder part of a
division (sometimes called the modulus).
•Example:
•7 // 2 in a PICBASIC program will return a
result of 1.
•By using both / and //, we can keep track of
both the quotient and the remainder part of a
division.
Integer Math in Lab #4
•Look at program called A-D Conversion3.pbp
•Recall that for a 10-bit A/D conversion using a
reference voltage of 5 V, the step voltage is
about 4.9 mV.
•So to find the voltage (in mV) corresponding to
an A/D result, we need to multiply by 4.9.
•But since PICBASIC can only handle integers,
it can’t handle 4.9.
•So instead, we multiply by 49 and then divide
by 10.
Integer Math in Lab #4 (Continued)
•Now that we have the voltage in mV, we want
to print it on the LCD in V.
•Example: if the voltage = 2141 mV, then we
want to print 2.141 V.
•To get the part before the decimal point, take
2141 / 1000. (This returns an answer of 2.)
•To get the part after the decimal point, take
2141 // 1000. (This returns an answer of 141.)
•Then print those two answers, separated by a
decimal point: 2.141.
Another Application
•For another use of these integer math tricks,
see these documents in the “Documents PIC”
folder on the R: shared drive:
•“Convert Celsius to Fahrenheit using
Integer Math.docx”
•“Convert Fahrenheit to Celsius using
Integer Math.docx”