
First Shot at Sin wav from DAC
Fork of MCP4822_demo by
main.cpp@0:723ec6d615c7, 2011-02-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |