You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
Arduino
48 lines
1.3 KiB
Arduino
2 years ago
|
// MCP4922 Demo code sinewave at 16 res top to bot.
|
||
|
// For comparison to MCP4725 operation (DAC_RESOLUTION=-5).
|
||
|
#include <SPI.h>
|
||
|
|
||
|
|
||
|
|
||
|
SPISettings settingsA(16000000, MSBFIRST, SPI_MODE0); // At 16 = SPI Clock = 8MHz.
|
||
|
|
||
|
int RCLKPin = 53; // pin 12 on the 74hc595 latch - nSS
|
||
|
int SRCLKPin = 52; // pin 11 on the 74hc595 shift register clock - SCK
|
||
|
int SERPin = 51; // MOSI
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
void setup() {
|
||
|
Serial.begin(115200); // Start serial port (debug).
|
||
|
|
||
|
pinMode(RCLKPin, OUTPUT); // Set SPI control PINs to output.
|
||
|
pinMode(SRCLKPin, OUTPUT);
|
||
|
pinMode(SERPin, OUTPUT);
|
||
|
|
||
|
SPI.begin();
|
||
|
|
||
|
Serial.println("MCP4922 SPI Dual DAC SPI hardware mode");
|
||
|
noInterrupts();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// 0 - A, 1 - B
|
||
|
//
|
||
|
void writeMCP4922_AB(byte AB, uint16_t v) {
|
||
|
|
||
|
v |=0xf000; // B15(A/B)=1 B, B14(BUF)=1 on, B13(GAn) 1=x1 B12(SHDNn) 1=off
|
||
|
if (!AB) v &= ~0x8000; // When zero clear B15 for A.
|
||
|
|
||
|
SPI.beginTransaction(settingsA);
|
||
|
digitalWrite(RCLKPin, LOW);
|
||
|
SPI.transfer( (0xff00 & v)>>8 );
|
||
|
SPI.transfer( 0x00ff & v );
|
||
|
digitalWrite(RCLKPin, HIGH);
|
||
|
SPI.endTransaction;
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
writeMCP4922_AB( 0, 4092 );
|
||
|
writeMCP4922_AB( 1, 3000 );
|
||
|
|
||
|
}
|