Rsh API  SDK 2.1
Документация по программированию
 Указатель Классы Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы Страницы
Кадровый режим сбора данных

Как правило, низкочастотные устройства сбора данных с большим числом аналоговых каналов имеют всего один АЦП, и данные с разных каналов подаются на него по очереди - мультиплексируются (узнать, являются ли каналы синхронными или нет можно с помощью проверки флага RSH_CAPS_DEVICE_SYNCHRO_CHANNELS ) .
Поэтому при использовании нескольких каналов каждый отсчет (точка в буфере) оказывается смещенным по времени на величину dt=1/F, где F - установленная частота дискретизации:

ChannelsOrder_RU.png

При работе с относительно высокими (десятки и сотни килогерц) частотами дискретизации это не вызывает проблем, т.к. величина dt получается достаточно маленькой, и каждый кадр (набор из отсчетов, по одному отсчету с каждого канала) содержит данные, которые собраны примерно в одно и то же время.
Если же, допустим, частота дискретизации составляет 5Гц, разница по времени между каналами будет составлять 200мс, что может быть неприемлимо.
Можно, конечно, собирать данные с более высокой частотой дискретизации, а затем прореживать, но есть более удобный способ, который позволяет обойти эту проблему - использование режима кадрового сбора. В этом режиме используются две частоты дискретизации - одна из них определяет интервал между каналами внутри кадра, а вторая - частоту следования кадров. Структура данных (для трех измерительных каналов) при работе в режиме кадрового сбора приведена на рисунке:

FrameFreqMode_RU.png

Таким образом, задав в качестве частоты кадров низкую частоту, а в качестве частоты внтури кадра - высокую, можно получить нужный результат - "мгновенные" данные по блоку каналов с низкой частотой дискретизации на канал.

Пример задания параметров для включения кадрового режима:

//структура инициализации
RshInitDMA params;
//получим максимальную частоту дискретизации
RSH_DOUBLE maxfreq;
U32 res = pADC->Get(RSH_GET_DEVICE_MAX_FREQUENCY, &maxfreq);
if(res != RSH_API_SUCESS)
{
//обработка ошибки
}
params.startType = RshInitDMA::Program; //запуск программный
params.frequency = 1000.0; //частота кадров
params.frequencyFrame = maxfreq; //частота внутри кадра (ставим максимальную)
params.dmaMode = RshInitDMA::Single; //одиночный запуск (без непрерывного режима)
params.bufferSize = 256; //размер буфера (на канал)
params.SetFrameMode(); //включаем кадровый режим работы
//настройка каналов
params.channels[0].SetUsed();
params.channels[1].SetUsed();
params.channels[2].SetUsed();
res = pADC->Init(&params);
if(res != RSH_API_SUCESS)
{
//обработка ошибки
}