Добрый день. Помогите прикрутить ЦАП 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();
}
Маладец! ![]()
Разберитесь ещё как правильно вставлять код в сообщение
Неприменно.