Озадачился сделать свой блок из кода для ЦАПа MCP4921.
Сам код работает корректно, а вот перенести его в блок не получается.
Задача такая, что на входе блока имеем значение от 0 до 100%, масштабируем штатными средствами до 0 ...4095.
Но перезапись данного значения должна происходить только при изменении текущего значения на новое (пользователь изменил значение).
Используем библиотеку SPI.
Вход блока - In
Разрешение на запись - Write (Enable)
В свойствах необходимо выбрать номер пина - CS
Таких микросхем на шине SPI планируется - 6, вот так же думаю как сделать что бы не было конфликта, и соблюдалась очерёдность.
То есть данные по SPI приходили на нужный CS.
Под спойлером рабочий пример, в котором значение на выходе ЦАПа меняется по нарастающей, а после по убывающей.
Буду признателен за советы и рекомендации.
СпойлерПоказать
Код: Выделить всё
#include <SPI.h>
#define CS_DAC1 44
void setup()
{
pinMode(CS_DAC1,OUTPUT);
digitalWrite(CS_DAC1,HIGH);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2);
}
void loop()
{
for (int i=0; i<4095; i++){
Write4921(i, CS_DAC1) ;
delay(10);
}
for (int i=4095; i>1; i--){
Write4921(i, CS_DAC1) ;
delay(10);
}
}
void Write4921(int value, int CS) {
byte data;
digitalWrite(CS, LOW);
data = highByte(value);
data = B00001111 & data; // D7 D6 D5 D4 D3 D2 D1 D0
data = B00010000 | data; // A/B BUF GA SHDN D11 D10 D9 D8
SPI.transfer (data);
data = lowByte(value);
SPI.transfer (data);
digitalWrite(CS, HIGH);
}