Digital to Analogue Conversion
Digital to Analogue Conversion:
the mcp4275
Lecture 10
Uli Raich
UCC semester 2017/2018
COPYRIGHT © 2024 by the contributing authors
Slide 1 of 36
Up to now we only treated digital signals:
- on/off for the LEDs
- on/off to read the LED state
- Powering or not powering coils to generate magnetic fields in a stepping motor
However:
The world is mostly analogue:
- Temperatures are changing continuously and not in steps
- Pressure is an analogue value
- Distance, time, current, resistance … are all analogue values
COPYRIGHT © 2024 by the contributing authors
Slide 2 of 36
Converting from digital to analogue
Since our computer is a digital device we must
- Convert digital values to analogue voltage levels
Digital to Analogue Conversion (DAC)
- … and we must convert external analogue values to digital
Analogue to Digital Conversion (ADC)
COPYRIGHT © 2024 by the contributing authors
Slide 3 of 36
Digital to analogue conversion
A digital to analogue converter does not really convert into a continuous waveform
Since we have digital values as a base, there will be steps in the output waveform
The size of these steps depends on the resolution of the DAC
What is the smallest step a 12 bit DAC can produce on a 0..5V scale?
COPYRIGHT © 2024 by the contributing authors
Slide 4 of 36
Can we smooth the output signal?
Yes, it is possible to smooth out these steps.
We need a low-pass filter, which filters out high frequencies
(the abrupt steps we have in the output signal) and lets pass only slower transitions.
When looking carefully at the output of our sine generator you will
also see these steps. In this case however they come from the
limited number of sine values (100) we calculate. To improve the resolution
we would have to increase the number of samples and the frequency
with which we send these values to the DAC.
COPYRIGHT © 2024 by the contributing authors
Slide 5 of 36
If you want to know more about DAC technology (and you should!)
have a look at this
excellent tutorial, from which I have copied the above illustration.
COPYRIGHT © 2024 by the contributing authors
Slide 6 of 36
As a demo device we bought the MCP4725 DAC
This is a 12 bit DAC which can be accesses by the
I2C bus
Here is its
data sheet
and here a photo of the device
COPYRIGHT © 2024 by the contributing authors
Slide 7 of 36
The
I2C bus is an industrial standard 2 wire bus using a data (SDA) and a clock (SCL) line.
Adding Vcc and Gnd we need a mere 4 wires to connect
a
I2C device to the Raspberry Pi cobbler
The
I2C bus was invented by Philips
COPYRIGHT © 2024 by the contributing authors
Slide 8 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 9 of 36
Open drain signals mean that you can pull a line down
but you cannot set it to a high level.
If nobody pulls the line down, then it is at Vcc level,
pulled up by a pull-up register.
Like this the contention problem is solved where one device tries
to set a line to a high level, while another sets it to low,
thus creating a short circuit.
COPYRIGHT © 2024 by the contributing authors
Slide 10 of 36
The
I2C bus has at least one master (in our case the interface in the
Raspberry Pi’s ARM processor) and several slaves
We have the following
I2C slave devices:
- mcp4275 DAC
- bmp180 barometric pressure sensor
- pcf8581 8 bit ADC
- ads115 16 bit ADC
- at24c32 eeprom
- ds1307 real time clock
- mma845x accelerometer
- pcf8574 I/O expander used on the 2-line LCD display
COPYRIGHT © 2024 by the contributing authors
Slide 11 of 36
Since there can be several slaves on the bus there must
be a means of distinguishing them through addressing:
Every
I2C slave has a 7 bit address associated with it
Usually this address is determined by the manufacturer but
often there are address pins on the devices allowing the
user to have several devices of the same type on the bus
COPYRIGHT © 2024 by the contributing authors
Slide 12 of 36
I2C buses and I2C addresses on the Raspberry Pi
The Raspberry Pi has 2
I2C buses with bus 1 being put onto the cobbler
You can find out the addresses of the
I2C slaves are currently
connected with the
i2cdetect command
COPYRIGHT © 2024 by the contributing authors
Slide 13 of 36
Initiating an I2C transfer
COPYRIGHT © 2024 by the contributing authors
Slide 14 of 36
The master starts a transfer by creating a
start condition:
- high to low transition on SDA while SCL is high
and ends the transfer with a
- stop condition: low to high transition on SDA while SCL is high4
COPYRIGHT © 2024 by the contributing authors
Slide 15 of 36
Data are transmitted with the SDA line stable with SCL is high
COPYRIGHT © 2024 by the contributing authors
Slide 16 of 36
A write cycle:
After the start condition the device address. The eighth bit, the R/W bit is kept low.
The second data byte is considered the register byte and the last one the data byte
The slave acknowledges each byte transfer.
COPYRIGHT © 2024 by the contributing authors
Slide 17 of 36
The read cycle is a bit more complex:
First the master sends the slave address with R/W set to write
Then it sends the register information.
After that another address byte is sent, this time with RW set to read
And finally the slave sends the data. The master still sends the clock but
releases the SDA line allowing the slave to control it
COPYRIGHT © 2024 by the contributing authors
Slide 18 of 36
I2C bus supports different transfer speeds:
- Standard: 100 kbps
- Fast: 400 kbps
- High speed: 3.4 Mbps
pigpio seems to use the standard speed
while the Raspberry Pi can run
I2C transfers of up tp 1.66 Mbps
However: you need more low level libraries or direct register
access to accomplish these high speeds
COPYRIGHT © 2024 by the contributing authors
Slide 19 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 20 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 21 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 22 of 36
How does the
I2C write cycle look like in the MCP4275?
The MCP4275 fast write cycle write only the DAC register and not the EEPROM.
This is enough for what we want to do.
COPYRIGHT © 2024 by the contributing authors
Slide 23 of 36
MCP4275 normal write cycle
COPYRIGHT © 2024 by the contributing authors
Slide 24 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 25 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 26 of 36
I2C access initialization with pigpio
In addition to opening the library with pigpio_start we now also must
make a connection to the
I2C driver:
COPYRIGHT © 2024 by the contributing authors
Slide 27 of 36
Accessing I2C with pigpio
Coming back to fast write mode, we must write 3 bytes:
- Address + R/W
- Register
- Data
The register byte contains also the high 4 bits on the 12 bit DAC data word
The first byte is created and written within the library extracting the I2C address
for the I2C initialization call
COPYRIGHT © 2024 by the contributing authors
Slide 28 of 36
The pigpio library provides a function
This means we have to split our 12 bit DAC data into 2 parts:
The highest 4 bits go into i2c_reg, the lower 8 bits into bVal
COPYRIGHT © 2024 by the contributing authors
Slide 29 of 36
Writing the DAC value, an example
dacValue is a
short, while
reg and
value are
unsigned char
COPYRIGHT © 2024 by the contributing authors
Slide 30 of 36
There are a number of criteria which characterize the performance of a DAC
- Its resolution or its least significant bit (lsb)
- Its settling time (maximum speed you can go)
- Its integral non-linearity or relative accuracy
- Its differential non-linearity
- Its offset error
- Its gain error ...
COPYRIGHT © 2024 by the contributing authors
Slide 31 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 32 of 36
Differential non-linearity
COPYRIGHT © 2024 by the contributing authors
Slide 33 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 34 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 35 of 36
COPYRIGHT © 2024 by the contributing authors
Slide 36 of 36
--
Uli Raich - 2017-10-31
Comments
This topic: Embedded_Systems
> WebHome >
LectureSlides > Lecture10:DigitalToAnalogueConversion
Topic revision: r6 - 2017-11-16 - uli
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback