Как правильно использовать битовую маску для правильного использования цифровых портов ввода-вывода (USB-AD14f) - PullRequest
0 голосов
/ 03 мая 2020

В настоящее время работает с USB-AD14f (https://www.bmcm.de/external-daq-systems/usb-ad14f.html). Недавно я столкнулся с проблемой, что я не могу заставить цифровые порты IO работать должным образом. Каналы определяются следующим образом:

   #define DIO1   (AD_CHA_TYPE_DIGITAL_IO|0x0001)
   #define DIO2   (AD_CHA_TYPE_DIGITAL_IO|0x0002)

с указанием документации:

"Направление цифровых портов жесткое. 8 линий (USB-AD14f) Первый порт (DIO1) настроен на ввод, 8 (USB-AD14f) линий второго порта (DIO2) на вывод ".

В файле .h функция sig. выглядит так:

/* output discrete sample
 *
 * adh    handle returned by ad_open
 * cha    channel type and id
 * range  range number
 * data   sample to output
 *
 * returns 0 on success, otherwise error code
 */
int32_t
ad_discrete_out (int32_t adh, int32_t cha, int32_t range, uint32_t data);

Я подключил насос / клапан к 1-му / 2-му порту. Запуск / Остановка насоса работает нормально с:

int32_t start = ad_discrete_out(adh, DIO2, 0, 1);
int32_t stop = ad_discrete_out(adh, DIO2, 0, 0);

Все же я не могу заставить работать другие 7 выходных портов, что, очевидно, должно быть сделано с помощью битовой маски. Буду признателен за любые советы!

1 Ответ

0 голосов
/ 04 мая 2020

Чтобы включить вывод n, вам нужно установить data в значение, которое включает бит в (1 << (n-1)). Например, чтобы запустить клапан, выполните ad_discrete_out(adh, DIO2, 0, 2);. Чтобы запустить насос и клапан, выполните ad_discrete_out(adh, DIO2, 0, 3);.

...