#include "MAX5144.h"
#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <stdexcept>
#include <iostream>
// Constructor
MAX5144::MAX5144(int spiNumber, int spiChannel, int csPin, int speed, int mode)
: spiNumber(spiNumber), spiChannel(spiChannel), csPin(csPin) {
// Initialize GPIO for CS
if (wiringPiSetup() < 0) {
throw std::runtime_error("Failed to initialize WiringPi!");
}
pinMode(csPin, OUTPUT);
digitalWrite(csPin, HIGH); // Default to deselected state
// Initialize SPI
if (wiringPiSPIxSetupMode(spiNumber, spiChannel, speed, mode) < 0) {
throw std::runtime_error("SPI initialization failed for SPI" + std::to_string(spiNumber) +
", Channel " + std::to_string(spiChannel));
}
std::cout << "SPI initialized on SPI" << spiNumber << ", Channel " << spiChannel << std::endl;
}
// Set DAC Output
void MAX5144::setDacOutput(int value) {
if (value < 0 || value > 16383) {
throw std::invalid_argument("DAC value out of range! Must be between 0 and 16383.");
}
// Prepare data
int dataWord = value << 2; // Align 14-bit value
unsigned char buffer[2] = {
static_cast<unsigned char>((dataWord >> 8) & 0xFF), // MSB
static_cast<unsigned char>(dataWord & 0xFF) // LSB
};
// SPI Transfer
digitalWrite(csPin, LOW); // Select chip
if (wiringPiSPIxDataRW(spiNumber, spiChannel, buffer, 2) < 0) {
throw std::runtime_error("SPI data transfer failed!");
}
digitalWrite(csPin, HIGH); // Deselect chip
std::cout << "DAC output set to: " << value << std::endl;
}
// Destructor
MAX5144::~MAX5144() {
wiringPiSPIClose(spiChannel); // Close SPI channel
}
mic drop :)
welcome to visits my github https://github.com/dcl920108/MAX5144-SPI-Driver/blob/main/MAX5144.cpp