

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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
#include <Arduino.h> #include <SPI.h> #include "dac.h" //#define USE_SPI #ifdef USE_SPI #define CS_PIN 10 // SYNC #define LDAC_PIN 8 #define MODEBIT_PD0 0x1000 #define MODEBIT_PD1 0x2000 #define MODEBIT_BUF 0x4000 #define MODEBIT_ChB 0x8000 #define MODEBIT_ChA 0x0000 uint16_t mode_params = 0; #else #define DAC_PIN DAC1 #endif // USE_SPI void dac_init() { #if defined(USE_SPI) pinMode(CS_PIN, OUTPUT); digitalWrite(CS_PIN, HIGH); pinMode(LDAC_PIN, OUTPUT); digitalWrite(LDAC_PIN, HIGH); SPI.begin(); SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE1); // mode_params = MODEBIT_ChA | MODEBIT_BUF | MODEBIT_PD0; #else pinMode(DAC_PIN, OUTPUT); analogWriteResolution(12); #endif // __SAM3X8E__ } void dac_write(uint32_t dac) { uint16_t value = (uint16_t)dac; value &= 0x0FFF; // 12 bit value #if defined(USE_SPI) value |= mode_params; // add params digitalWrite(LDAC_PIN, LOW); digitalWrite(CS_PIN, LOW); delayMicroseconds(20); SPI.transfer16(value); //SPI.transfer((value >> 8) & 0xFF, SPI_CONTINUE); //SPI.transfer(value & 0xFF); digitalWrite(CS_PIN, HIGH); delayMicroseconds(20); digitalWrite(LDAC_PIN, HIGH); #else analogWrite(DAC_PIN, value); #endif // __SAM3X8E__ } |