

amptest
This repository has no backups
This repository's network speed is throttled to 100KB/sec
Upgrade your account to fix these warnings, or use backups.vc for automated backups
Diff Revisions 2 vs 3 for /trunk/dac.cpp
@@ -9,19 +9,23 @@ | |||
9 | 9 | ||
10 | 10 | #ifdef USE_SPI | |
11 | 11 | ||
12 | - | #define CS_PIN 10 // SYNC | |
13 | - | #define LDAC_PIN 8 | |
12 | + | #define CS_PIN 10 // SYNC | |
13 | + | #define LDAC_PIN 8 | |
14 | 14 | ||
15 | 15 | ||
16 | 16 | #define MODEBIT_PD0 0x1000 | |
17 | 17 | #define MODEBIT_PD1 0x2000 | |
18 | 18 | #define MODEBIT_BUF 0x4000 | |
19 | 19 | #define MODEBIT_ChB 0x8000 | |
20 | + | #define MODEBIT_ChA 0x0000 | |
20 | 21 | ||
21 | 22 | ||
23 | + | ||
24 | + | uint16_t mode_params = 0; | |
25 | + | ||
22 | 26 | #else | |
23 | 27 | ||
24 | - | #define DAC_PIN DAC0 | |
28 | + | #define DAC_PIN DAC1 | |
25 | 29 | ||
26 | 30 | #endif // USE_SPI | |
27 | 31 | ||
@@ -46,6 +50,8 @@ | |||
46 | 50 | SPI.setBitOrder(MSBFIRST); | |
47 | 51 | SPI.setDataMode(SPI_MODE1); | |
48 | 52 | ||
53 | + | // mode_params = MODEBIT_ChA | MODEBIT_BUF | MODEBIT_PD0; | |
54 | + | ||
49 | 55 | #else | |
50 | 56 | ||
51 | 57 | pinMode(DAC_PIN, OUTPUT); | |
@@ -57,23 +63,31 @@ | |||
57 | 63 | ||
58 | 64 | void dac_write(uint32_t dac) | |
59 | 65 | { | |
60 | - | uint32_t value = dac; | |
66 | + | uint16_t value = (uint16_t)dac; | |
67 | + | ||
68 | + | value &= 0x0FFF; // 12 bit value | |
69 | + | ||
61 | 70 | ||
62 | 71 | #if defined(USE_SPI) | |
63 | 72 | ||
64 | - | //value |= MODEBIT_ChB; // channel B | |
73 | + | value |= mode_params; // add params | |
74 | + | ||
75 | + | ||
76 | + | digitalWrite(LDAC_PIN, LOW); | |
65 | 77 | ||
66 | 78 | digitalWrite(CS_PIN, LOW); | |
67 | - | delay(1); | |
68 | - | SPI.transfer((value >> 8) & 0xFF); | |
69 | - | SPI.transfer(value & 0xFF); | |
79 | + | delayMicroseconds(20); | |
80 | + | SPI.transfer16(value); | |
81 | + | //SPI.transfer((value >> 8) & 0xFF, SPI_CONTINUE); | |
82 | + | //SPI.transfer(value & 0xFF); | |
70 | 83 | digitalWrite(CS_PIN, HIGH); | |
71 | 84 | ||
72 | - | digitalWrite(LDAC_PIN, LOW); | |
73 | - | delay(1); | |
85 | + | ||
86 | + | delayMicroseconds(20); | |
74 | 87 | digitalWrite(LDAC_PIN, HIGH); | |
75 | 88 | ||
76 | 89 | #else | |
90 | + | ||
77 | 91 | ||
78 | 92 | analogWrite(DAC_PIN, value); | |
79 | 93 |