First Shot at Sin wav from DAC

Dependencies:   MCP4822A mbed

Fork of MCP4822_demo by Steven Beard

Committer:
ukatcsmb
Date:
Tue Feb 22 17:25:26 2011 +0000
Revision:
0:723ec6d615c7
Child:
1:77d25d0f67d6
First published

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ukatcsmb 0:723ec6d615c7 1 /*
ukatcsmb 0:723ec6d615c7 2 * MCP4822A DAC array library demonstration program.
ukatcsmb 0:723ec6d615c7 3 *
ukatcsmb 0:723ec6d615c7 4 * Copyright (c) 2011 Steven Beard, UK Astronomy Technology Centre.
ukatcsmb 0:723ec6d615c7 5 *
ukatcsmb 0:723ec6d615c7 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
ukatcsmb 0:723ec6d615c7 7 * of this software and associated documentation files (the "Software"), to deal
ukatcsmb 0:723ec6d615c7 8 * in the Software without restriction, including without limitation the rights
ukatcsmb 0:723ec6d615c7 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ukatcsmb 0:723ec6d615c7 10 * copies of the Software, and to permit persons to whom the Software is
ukatcsmb 0:723ec6d615c7 11 * furnished to do so, subject to the following conditions:
ukatcsmb 0:723ec6d615c7 12 *
ukatcsmb 0:723ec6d615c7 13 * The above copyright notice and this permission notice shall be included in
ukatcsmb 0:723ec6d615c7 14 * all copies or substantial portions of the Software.
ukatcsmb 0:723ec6d615c7 15 *
ukatcsmb 0:723ec6d615c7 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ukatcsmb 0:723ec6d615c7 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ukatcsmb 0:723ec6d615c7 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ukatcsmb 0:723ec6d615c7 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ukatcsmb 0:723ec6d615c7 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ukatcsmb 0:723ec6d615c7 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ukatcsmb 0:723ec6d615c7 22 * THE SOFTWARE.
ukatcsmb 0:723ec6d615c7 23 */
ukatcsmb 0:723ec6d615c7 24
ukatcsmb 0:723ec6d615c7 25 #include "mbed.h"
ukatcsmb 0:723ec6d615c7 26 #include "MCP4822A.h"
ukatcsmb 0:723ec6d615c7 27
ukatcsmb 0:723ec6d615c7 28 /*
ukatcsmb 0:723ec6d615c7 29 * In this example there are 4 DAC chips daisy-chained on the SPI bus,
ukatcsmb 0:723ec6d615c7 30 * which together provide 8 channels.
ukatcsmb 0:723ec6d615c7 31 */
ukatcsmb 0:723ec6d615c7 32 const int ndacs = 4;
ukatcsmb 0:723ec6d615c7 33 const int nchans = ndacs * 2;
ukatcsmb 0:723ec6d615c7 34
ukatcsmb 0:723ec6d615c7 35 /*
ukatcsmb 0:723ec6d615c7 36 * The following mbed pins are used:
ukatcsmb 0:723ec6d615c7 37 *
ukatcsmb 0:723ec6d615c7 38 * p11 - SPI mosi
ukatcsmb 0:723ec6d615c7 39 * p13 - SPI sclk
ukatcsmb 0:723ec6d615c7 40 * p14, p15, p16, p17 - CS pins, each connected to a separate DAC.
ukatcsmb 0:723ec6d615c7 41 * p21 - LDAC pin, connected to all DAC chips.
ukatcsmb 0:723ec6d615c7 42 */
ukatcsmb 0:723ec6d615c7 43 PinName cspins[] = {(p14),(p15),(p16),(p17)};
ukatcsmb 0:723ec6d615c7 44 MCP4822A MCP(ndacs, p11, p13, cspins, p21); // MOSI, SCLK, nCS-list, nLdac
ukatcsmb 0:723ec6d615c7 45
ukatcsmb 0:723ec6d615c7 46 int main() {
ukatcsmb 0:723ec6d615c7 47 int i, buffer;
ukatcsmb 0:723ec6d615c7 48
ukatcsmb 0:723ec6d615c7 49 printf("\r\n\r\nSetting SPI clock frequency to 10 MHz.\r\n");
ukatcsmb 0:723ec6d615c7 50 MCP.frequency(10000000);
ukatcsmb 0:723ec6d615c7 51
ukatcsmb 0:723ec6d615c7 52 // Begin by setting all the DACs to 1000 millivolts at gain 2.
ukatcsmb 0:723ec6d615c7 53 printf("Loading all channels with 1000mV at gain 2...\r\n");
ukatcsmb 0:723ec6d615c7 54 MCP.latch_disable();
ukatcsmb 0:723ec6d615c7 55 for (i=0; i<ndacs; i++) {
ukatcsmb 0:723ec6d615c7 56 MCP.writeA2(i, 1000);
ukatcsmb 0:723ec6d615c7 57 MCP.writeB2(i, 1000);
ukatcsmb 0:723ec6d615c7 58 }
ukatcsmb 0:723ec6d615c7 59 wait(4);
ukatcsmb 0:723ec6d615c7 60 printf("Latching now.\n");
ukatcsmb 0:723ec6d615c7 61 MCP.latch_enable();
ukatcsmb 0:723ec6d615c7 62 wait(4);
ukatcsmb 0:723ec6d615c7 63
ukatcsmb 0:723ec6d615c7 64 // Initialise an array of test voltages (in mV).
ukatcsmb 0:723ec6d615c7 65 int test_voltages[nchans];
ukatcsmb 0:723ec6d615c7 66 for (i=0; i<nchans; i++) {
ukatcsmb 0:723ec6d615c7 67 test_voltages[i] = i * 500;
ukatcsmb 0:723ec6d615c7 68 }
ukatcsmb 0:723ec6d615c7 69
ukatcsmb 0:723ec6d615c7 70 while (1) {
ukatcsmb 0:723ec6d615c7 71
ukatcsmb 0:723ec6d615c7 72 // Write the array of test voltages to the DACs
ukatcsmb 0:723ec6d615c7 73 // (at gain 2 with automatic latching).
ukatcsmb 0:723ec6d615c7 74 printf("Writing: ");
ukatcsmb 0:723ec6d615c7 75 for (i=0; i<nchans; i++) {
ukatcsmb 0:723ec6d615c7 76 printf("%d ", test_voltages[i]);
ukatcsmb 0:723ec6d615c7 77 }
ukatcsmb 0:723ec6d615c7 78 printf("\r\n");
ukatcsmb 0:723ec6d615c7 79 MCP.write(nchans, test_voltages, 2, 1);
ukatcsmb 0:723ec6d615c7 80 wait(4);
ukatcsmb 0:723ec6d615c7 81
ukatcsmb 0:723ec6d615c7 82 //Move the values in the array along one place.
ukatcsmb 0:723ec6d615c7 83 buffer = test_voltages[0];
ukatcsmb 0:723ec6d615c7 84 for (i=0; i<(nchans-1); i++) {
ukatcsmb 0:723ec6d615c7 85 test_voltages[i] = test_voltages[i+1];
ukatcsmb 0:723ec6d615c7 86 }
ukatcsmb 0:723ec6d615c7 87 test_voltages[nchans-1] = buffer;
ukatcsmb 0:723ec6d615c7 88 }
ukatcsmb 0:723ec6d615c7 89 }