Языковой барьер серьезно этому препятствует , но я стараюсь (на клавишах C и V светлеют буквы).
Последние "подопытные" - atmega4808 в связке с ADS1271. Худо-бедно разобрался, получил CLK для ацп через CCL атмеги и данные считываю по подсмотренному у Sancho способом.
#include <Logic.h>
long out_ads;
long _stou1;
void setup()
{
Serial1.begin(115200, SERIAL_8N1);
Logic0.enable = true; // Включить логический блок 0
Logic0.input0 = in::input_pullup; // Установить PA0 как вход с подтягиванием
Logic0.input1 = in::input_pullup; //
Logic0.output = out::enable; // Выходной контакт логического блока 0 (PA3)
Logic0.truth = 0x01; // Установить таблицу истинности
Logic0.filter = filter::synchronizer; // Включить фильтр на выходе блока 0 (fclok / 2)
Logic0.init(); // Инициализировать логический блок 0
Logic::start(); // Запустить оборудование логики AVR
pinMode(4, OUTPUT); //SCLK
pinMode(5, INPUT); //DATA
pinMode(6, INPUT); //DRDY
attachInterrupt (6 , SCLK_ADS1271, FALLING);
}
void loop()
{
//Плата:1
if (1)
{
if(!((out_ads)==(_stou1)))
{
Serial1.println(out_ads);
}
}
_stou1 = out_ads;
}
void SCLK_ADS1271()
{
out_ads = 0L;
for(int i = 23; i >= 0; i--)
{
digitalWriteFast(4, 1);
out_ads |= (digitalReadFast(5) ? (1<<i) : 0);
digitalWriteFast(4, 0);
// delayMicroseconds( 1 );
}
}
Пробовал сначала дня 3 задать CLK через таймеры (перевел и распечатал туеву кучу страниц, но видно мало еще количество до качества), максимум получал 64кГц (хотя тот же пример залитый через студию давал 300+).long out_ads;
long _stou1;
void setup()
{
Serial1.begin(115200, SERIAL_8N1);
Logic0.enable = true; // Включить логический блок 0
Logic0.input0 = in::input_pullup; // Установить PA0 как вход с подтягиванием
Logic0.input1 = in::input_pullup; //
Logic0.output = out::enable; // Выходной контакт логического блока 0 (PA3)
Logic0.truth = 0x01; // Установить таблицу истинности
Logic0.filter = filter::synchronizer; // Включить фильтр на выходе блока 0 (fclok / 2)
Logic0.init(); // Инициализировать логический блок 0
Logic::start(); // Запустить оборудование логики AVR
pinMode(4, OUTPUT); //SCLK
pinMode(5, INPUT); //DATA
pinMode(6, INPUT); //DRDY
attachInterrupt (6 , SCLK_ADS1271, FALLING);
}
void loop()
{
//Плата:1
if (1)
{
if(!((out_ads)==(_stou1)))
{
Serial1.println(out_ads);
}
}
_stou1 = out_ads;
}
void SCLK_ADS1271()
{
out_ads = 0L;
for(int i = 23; i >= 0; i--)
{
digitalWriteFast(4, 1);
out_ads |= (digitalReadFast(5) ? (1<<i) : 0);
digitalWriteFast(4, 0);
// delayMicroseconds( 1 );
}
}
Вопрос в следующем - можно ли сконфигурировать SPI для получения алгоритма, где камнем читаем за раз 24 бита (или быстро по 8 потом клеим) по внешнему сигналу готовности от ацп (DRDY), при этом формируя SCLK камнем? Или нужно по прерыванию от ацп на какой ни будь ноге, запускать SPI как мастера с ногой SS "в воздухе" ?
СпойлерПоказать
СпойлерПоказать