Page 1 of 1

spi 12bit digital to analog chip

Posted: Tue Aug 06, 2013 2:07 am
by brandonb
i'm using a microchip mcp4921, these chips are easy to use with the spi protocol,
since this is a 12bit dac, you can get 4096 different values, using a 5v referance

Code: Select all

5volts/4096 = .001220703125 mv_per_step
to figure out which number to send to the spi port for desired output voltage is easy to

Code: Select all

chip_send_number = desired_voltage / mv_per_step
there is a couple things left to do, you have to set bits 12 and 13 in the spi 16 bit message to do this

Code: Select all

chip_send_number=chip_send_number | 3 << 12
then convert the 16 bit variable into two 8 bit variables to send

Code: Select all

high=(chip_send_number>>8) & 255
low=chip_send_number & 255
pull chip select pin low, send high variable char, send low variable char set chip select pin hit
this chips is very quick to make a triangle waveform by looping 0-4095-0
SPI DAC TEST.fcf
(11 KiB) Downloaded 743 times
in this flowchart i created a quick draw up as an example of manually picking out a voltage, using rc5 and a remote as a keypad, you can type in a voltage value then press the blue button to set it, top lcd line shows the commanded voltage, bottom line shows the commanded 12bit value
spi remote commanding dac.fcf
(18.16 KiB) Downloaded 648 times
here is a cheetsheet for hook up and operation

Re: spi 12bit digital to analog chip

Posted: Tue Aug 06, 2013 10:50 am
by medelec35
Thanks Brandon,
What a great tip.
I'm going to have a play with these devices :)

Thank you for sharing.

Re: spi 12bit digital to analog chip

Posted: Tue Aug 06, 2013 1:09 pm
by JohnCrow
Thanks Brandon

You've planted the seed for a new project. :)

Re: spi 12bit digital to analog chip

Posted: Wed Aug 07, 2013 3:58 am
by Spanish_dude
Same here!
I think you can easily make a crappy function generator with it.
Have a PC program send a data pakket of a sine/triangle/sawtooth waveform to a microcontroller.
Then use that microcontroller to send the data, through SPI, to the DAC.

I just ordered some MCP4821, 5V, 12 bit, int ref (2.048V or 4.096V), single output DAC.

Re: spi 12bit digital to analog chip

Posted: Wed Aug 07, 2013 6:11 am
by brandonb
I think you can easily make a crappy function generator with it.
:lol:
i wanted to try something simular with auto sensor simulation... this might sound a bit weird but it would be self amusing to be able to datalog auto sensors to sram chips then play the data back with dac to veiw with a scope while having the value displayed on lcd as well

Simple DAC Power Supply

Posted: Thu Aug 08, 2013 7:24 pm
by JohnCrow
Digital To Analogue Converter Power Supply.

Introduction:

This project is a simple DC voltage generator with a 0 to 5V variable output.

This is based on the initial post by Brandon a few days ago.
All credit is to him for planting the seeds for a new set of experiments.


The device is a Microchip MCP4921.
This is a 12-Bit DAC which means it can use 4096 different values with a 5V reference.
The device is controlled using the SPI bus, which means it is very straightforward to use.

This is not a power supply in the sense of a bench supply, it is only to demonstrate the principles, and is only capable of supplying a few mA

Calculation:

12 Bits = 4096 steps

5V / 4096 =1.220703125 mV- Step

The data to send to the device is calculated as follows.

Data To Send = Desired Output/mV-Step

To program 2.5V

Data To Send = 2.5/0.001220703125
Data To Send = 2048

Before the data is sent, bits 12 & 13 need to be set.

Data To Send = Data To Send |3 << 12
In other words, OR the Data with 3, then left shift 12.

This 16 bit value then needs splitting to 2 x 8 bit bytes to send to the SPI Bus.

High Byte =( Data To Send >>8) & 255
In other words Right Shift 8 then AND with 255

Low Byte = Data To Send & 255
In other words AND with 255

Using The SPI Bus:

The data is sent to the SPI bus as follows.

Pull C0 High
INIT the SPI bus in Flowcode
Pull C0 Low
Send SPI High Byte
Send SPI Low Byte
Pull C0 High.

The DAC output will then be 2.5V dc for an input as in the above examples.

Hardware:

EB 006 Programmer
EB 014 Keypad
EB 017 Patch Board
EB 076 Touch Screen Display (Used to make showing the data easier)
PIC 16F877A Microcontroller
MCP4921 DAC Device.


MCP4921 Pin Outs:

1 Vdd 5V
2 CS C0
3 SCK C3
4 SDI C5
5 LDAC GND
6 Vref 5V
7 Vss GND
8 Vout Output


Usage:

Using the touch screen display allows more data to be displayed than using a standard 2 x 16 LCD.

On first power up or pressing the reset button, a simple user guide is displayed.
To pass this point, the screen is swiped.

The actual voltage is entered as a 4 digit variable without the decimal point. This is then added by dividing the 4 digit value entered by 1000.
This is then converted to a string to display on the LCD.

The system will output this level until a new value is entered.
Pressing # will set the output to zero.

Experimental data shows the accuracy to be about 0.5 measured on my Fluke 87/5 3.5 Digit Meter
The meter has a basic DC accuracy of 0.05% + 1 digit.

Currently, I have not implemented any checking for entries over 5 V.
If a value is entered, the output will be Input-5, though the display will show the entered value.

Example

Entered 6.5V

Display = 6.500 V
Output = 1.500 V
System.JPG
System.JPG (99.83 KiB) Viewed 16755 times
DAC Voltage TouchScreen V1.fcf
(30.28 KiB) Downloaded 610 times
Display.JPG
Display.JPG (79.3 KiB) Viewed 16755 times

Re: spi 12bit digital to analog chip

Posted: Thu Aug 08, 2013 8:15 pm
by medelec35
Thanks guys, this is a really informative and useful thread. :)

Martin

Re: spi 12bit digital to analog chip

Posted: Fri Aug 09, 2013 2:30 pm
by Spanish_dude
Probably best to use a buffer, power transistor or some sort of FET to not draw to much current from the DAC.

- Nicolas

Re: spi 12bit digital to analog chip

Posted: Fri Aug 09, 2013 5:16 pm
by JohnCrow
Hi Nicolas
Probably best to use a buffer, power transistor or some sort of FET to not draw to much current from the DAC.
Yes thats true. This was just a simple idea to test the device.
Thats the next step, to see if I can make a useable psu from it. Maybe implement Brandons idea of using an RC5 remote control as well.

Re: spi 12bit digital to analog chip

Posted: Fri Aug 09, 2013 10:07 pm
by Kenrix2
Many Microchip Pic's have a built in DAC Module. Microchip's Product Selection Tool returns 41 different 8 bit Micro's with DAC's. The 8 bit micro's that are supported by Flowcode use a 5 bit DAC. There are some newer 8 bit micro's that have an 8 bit DAC but, these are not yet directly supported by Flowcode. Many 16 bit Pic micro's have even higher resolution. Attached is a simple experiment using the built in DAC Module. There are 4 variations. Rather than writing 4 different programs I just did one program with 4 seperate loops showing the different variations. Although at first glance 5 bits may not seem like much but, when using a lower voltage reference you can get get a fairly fine resolution. I mainly use the DAC as an internal offset for the comparators but, this flowchart outputs the DAC to the DAC Out Pin. This output is not buffered. When I need some current out on that pin, I use an opamp. Here is a schematic of what I have used. I am not an EE so use at your own risk.
OPAMP.png
(3.77 KiB) Downloaded 11261 times

Re: spi 12bit digital to analog chip

Posted: Mon May 28, 2018 3:52 pm
by George_B
Hi, i am making some experiments with the MCP4821 DAC DEVICE.

At the moment i can only read 2.05 V at the output of the device(pin8).

Probably i am running the device using a gain of 1

I would like to use a full scale and a gain of 2 but i can't figure out how to send a command to the MCP4821.

Any idea ?

Regards
George

Re: spi 12bit digital to analog chip

Posted: Wed May 30, 2018 7:45 pm
by George_B
Hi all,

I finally managed to read in full scale mode the MCP4821.

I would like to use 4 devices connected to the same micro controller.

Would it be possible to connect each device to separate pins ?

I tried to do a program with four DAC devices connected in separate pins and the result is not the expected. The reading is getting negative from all three devices except the first on which gets the actual reading value.

Re: spi 12bit digital to analog chip

Posted: Fri Jun 01, 2018 8:25 am
by QMESAR
George_B wrote:I tried to do a program with four DAC devices connected in separate pins and the result is not the expected.
Normal configuration for multiple SPI devices on the same bus is
SDO All connected in Parallel
SDI all connected in Parallel
SCK all connected in parallel

Then each chip(IC) has its own CS line connected to a mcu pin, your code then select (pull down ) the CS pin on the device you want to communicate
to all other devices which has their CS pins now high will not answer in any way,then you pull the CS pin high and select the next device CS pin (low) to which you want to communicate.Devices which the CS pin is high can never interfere with the device communication which the pin is low

Re: spi 12bit digital to analog chip

Posted: Sat Jun 02, 2018 9:02 pm
by George_B
Hi QMESAR,

Thank you for your reply. I understand what you mean and i will use it in case that i am going to make a parallel use of devices sharing the I2C lines.

The issue that i have is that the chip that i want to use, is the MSP3421 which has not got a CS pin and therefor this is not possible at this time.

I am wondering if i have a transistor powering each MCD3421 and control the power of the deivice each time.. would this be a solution ?

Regards
George

Re: spi 12bit digital to analog chip

Posted: Sun Jun 03, 2018 5:34 am
by QMESAR
George_B wrote: The issue that i have is that the chip that i want to use, is the MSP3421 which has not got a CS pin and therefor this is not possible at this time.
Well yes looking at the datasheet of the device it does not have an SPI Interface therefore it will also not have a CS pin. To communicate with the chip you send the address and the chip knows now the following data is intended for him.

Dont confuse SPI and I2C with one another, I would suggest you read bit how to work with I2C it will help you understand how to configure and use your MSP3421,