Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Программирование сигнального процессора карт x502

Вы не вошли.

 Поиск | Регистрация | Вход 

Александр ЕКБ
04.11.2021 12:41:55
#1

Гость

Программирование сигнального процессора карт x502

Добрый день!
Платы L-502 и E-502
В процедуре
uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) из l502_user_process.c (vdsp)
принимаются данные с внешних устройств
data[1]=DIN
data[2]=ADC_data1
data[3]=ADC_data2
и т.д..
Далее, данные обрабатываются и их необходимо (измененные) отправить из платы в ПК .

Прием и обработка работают (выдается правильный сигнал на ЦАП1 и ЦАП2),
с отправкой измененных data[1]=DIN, data[2]=ADC_data1, data[3]=ADC_data2 в ПК проблема.
Либо возникает "Ошибка обработки данных: Неверный номер канала в обрабатываемом потоке синхронного ввода",
либо сигналы остаются в неизмененном виде.

04.11.2021 21:24:05
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Программирование сигнального процессора карт x502

Добрый день.
Ну так без конкретного кода сложно сказать, в чем проблема. Либо тут нужен кусок, либо можете на почту прислать файлы.
Правильно ли  понимаю, что при изменении последовательность каналов при передаче у Вас сохраняется? Старшие 8 бит в слове, указывающие что это за данные и к какому каналу относятся, при замене данных Вы сохраняете?

Александр ЕКБ
06.11.2021 15:43:29
#3

Гость

Re: Программирование сигнального процессора карт x502

Конкретно, мне необходимо изменить данные DIN.
Необходимо восстанавливать старшие биты у каждого элемента в data,
или можно только у пришедшего DIN, и как правильно выполнить
восстановление старших битов?

07.11.2021 12:48:37
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Программирование сигнального процессора карт x502

В 32-битных словах, что приходят на обработку, старший байт содержит признак, что это за данные (как описано в пункте 5.12  https://www.lcard.ru/download/x502_low_level.pdf). Именно по этой информации нужно определять, что это за слово (DIN, данные с АЦП), а не по номеру отсчета (по крайней мере в случае, когда разрешено оба потока DIN и АЦП, т.к. задержки у этих потоков перед слиянием в один разные), и, если последовательность данных менять не нужно, а только содержимое, то этот старший байт и не нужно изменять. Ошибка с неверным номером как раз и говорит, что в данных АЦП нарушена последовательность номеров каналов, содержащаяся в этом старшем байте данных АЦП, по сравнению с настройками, в Вашем случае возможно Вы изменили какие-то данные от АЦП, переписав их старший байт.

Для DIN все проще, старший байт всегда 0, поэтому обработка может выглядеть так (индекс идет от 0, а не от 1):

uint32_t i;
for (i = 0; i < size; ++i) {
    if ((data[i] & 0xFF000000) == 0) {
          /* обработка слова данных DIN */  
         data[i] =  ... /* новое значение, биты 17..0 - состояние входов, биты 31..18 - нули */
    }
}
Александр ЕКБ
09.11.2021 20:01:43
#5

Гость

Re: Программирование сигнального процессора карт x502

Вроде разобрался.

uint32_t usr_in_proc_data(uint32_t* data, uint32_t size)
{
    for(i=0;i<size;i++)
    {
     if((data[i]&0xFF000000)==0x0) DIN_data=data[i];
     if((data[i]&0xC0000000)==0xC0000000) adc_1_data=data[i]&0xFFFFFF;
     if((data[i]&0xC1000000)==0xC1000000) adc_2_data=data[i]&0xFFFFFF;
    }
.......

По цифровому каналу данный приходят в виде 0xC000, каналами DI_SYN1 и DI_SYN2 не пользуюсь.
Плату (Е502) настраивал по примеру из x502_general для delphi.

10.11.2021 12:42:59
#6

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,292

Re: Программирование сигнального процессора карт x502

Это нормально. Если цифровой вход не подключен никуда и там не включены подтягивающие резисторы (если на данном входе есть), то следует считать, что значение соответствующего бита в слове DIN не определено и может быть любым.

Александр ЕКБ
10.11.2021 21:40:27
#7

Гость

Re: Программирование сигнального процессора карт x502

Спасибо за помощь.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск