Написал простенький код для проверки собранной схемы, в целом, все работает, хотя тоже не так, как хотелось бы: напряжение принимает значение от 1,55В до 4,5В при 0 и 65535 соответственно, но должно было выдавать 0В при 0
Код
#include <SPI.h>
#define SPI_CLK 13
#define SPI_SDI 11
#define CS_PIN A1
#define REF_GR_DAC 100.00
uint16_t _VAL;
void write (float value);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
SPI.begin(); // Запуск интерфейса SPI
SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE0)); // Начало транзакции, 20МГц, Старший байт первый, Мод0
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
write(30);
Serial.println(_VAL);
}
void write(float value) { // Запись значения в ЦАП
if (value < 0) { // Если значение опускается меньше нуля, записывать ноль
_VAL = 0;
} else if (value > REF_GR_DAC) { // Если значение выше референсного, записывать максимальное
_VAL = 65535;
} else {
_VAL = uint16_t(65535 * value / REF_GR_DAC); // Расчет значения по пропорции
}
digitalWrite(CS_PIN, LOW); // Запись в чипселект 0 для выбора ЦАП для передачи
SPI.transfer16(_VAL); // передача ЦАП
//delay(15);
digitalWrite(CS_PIN, HIGH); // Запись в чипселект 1 для окончания передачи
}
При этом основной код для всей системы, который я кидал выше, не работает: при загрузке первой прошивки напряжение на выходе остается таким же, какое было в тестовом коде