79416378

Date: 2025-02-05 22:53:21
Score: 1
Natty:
Report link

MAX5144 Driver Code

#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

Reasons:
  • Probably link only (1):
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: NEO101