ЦАП Ad8522

Добрый день. Помогите прикрутить ЦАП Ad8522 К АРДУИНО. Хочу с его помощью управлять током и напряжегием БП (например). У него 2 канала на выходе которого 0-4.096в. Нужен не большой пример кода.

Все. Вродибы разобрался.

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128

#define SCREEN_HEIGHT 64

#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const int DAC_CS = 10;

const int encA_CLK = 2;

const int encA_DT = 3;

const int encB_CLK = 4;

const int encB_DT = 5;

volatile int valueA = 2048;

volatile int valueB = 2048;

int lastA = HIGH;

int lastB = HIGH;

void setup() {

pinMode(DAC_CS, OUTPUT);

digitalWrite(DAC_CS, HIGH);

pinMode(encA_CLK, INPUT_PULLUP);

pinMode(encA_DT, INPUT_PULLUP);

pinMode(encB_CLK, INPUT_PULLUP);

pinMode(encB_DT, INPUT_PULLUP);

SPI.begin();

SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE2));

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay();

display.setTextSize(2);

display.setTextColor(SSD1306_WHITE);

display.setCursor(0, 0);

display.println(“AD8522 DAC”);

display.display();

delay(1000);

}

void loop() {

readEncoderA();

readEncoderB();

sendToDAC(0, valueA);

sendToDAC(1, valueB);

updateDisplay();

delay(10);

}

void readEncoderA() {

int current = digitalRead(encA_CLK);

if (current != lastA) {

if (digitalRead(encA_DT) != current) {

  valueA = constrain(valueA + 1, 0, 4095);

} else {

  valueA = constrain(valueA - 1, 0, 4095);

}

}

lastA = current;

}

void readEncoderB() {

int current = digitalRead(encB_CLK);

if (current != lastB) {

if (digitalRead(encB_DT) != current) {

  valueB = constrain(valueB + 1, 0, 4095);

} else {

  valueB = constrain(valueB - 1, 0, 4095);

}

}

lastB = current;

}

void sendToDAC(uint8_t channel, uint16_t data) {

uint16_t command = 0;

command |= (channel << 15);

command |= (0b0001 << 12);

command |= (data & 0x0FFF);

digitalWrite(DAC_CS, LOW);

SPI.transfer16(command);

digitalWrite(DAC_CS, HIGH);

}

void updateDisplay() {

display.clearDisplay();

display.setCursor(0, 0);

display.setTextSize(1);

display.print("CH A: ");

display.print(valueA);

display.print(" (");

display.print((float)valueA * 5.0 / 4095.0, 2);

display.println(" V)");

display.print("CH B: ");

display.print(valueB);

display.print(" (");

display.print((float)valueB * 5.0 / 4095.0, 2);

display.println(" V)");

display.display();

}

Маладец! :+1:

Разберитесь ещё как правильно вставлять код в сообщение

Неприменно.