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


Сбой генерации с ЦАП в Е-330

Вы не вошли.

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

Albert
23.01.2003 05:01:30
#1

Гость

Сбой генерации с ЦАП в Е-330

Возникла проблема с модулем Е-330.

Настроил циклический вывод на ЦАП сигнала синусоиды,
запустил, все работает.

Подсоединил вход одного из каналов АЦП на выход ЦАП
С помощью функций ADCHAN и KADR получаю синусоиду с АЦП.
При использовании INPUT_TIMER сбивается генерация синусоиды с ЦАП.

В Debug прохожу пошагово в функции INPUT_TIMER,
по осциллографу контролирую синусоиду,
В INPUT_TIMER
  mov ax, SoftStartCmd ; =2
  call SendCommand

в SendCommand
  call LocalIrq2

в LocalIrq2 после
  and al, 0f1h
  out dx, al
синусоида с ЦАП исчезает

Что произошло? И как с этим бороться?

Коллеги на работе предположили, что сбой происходит из-за того,
что ЦАП в режиме генерации и АЦП в режиме считывания из FIFO буфера
используют один и тот же внутренний буфер в модуле Е-330.

Если это так, то можно ли разделить внутренний буфер,
чтобы одна его часть была доступна только ЦАПу, а другая только АЦП?

     Подробности:

Описание подсоединения к разъему для подключения аналоговых сигналов.

Выход ЦАП (контакт 18) соединен с неинвертирующим входом 1-го канала АЦП (к. 35) и
сигнальным входом осциллографа.
Земля (кк. 19, 37) соединена с инвертирующим входом 1-го канала АЦП (к. 16) и
общим входом осциллографа.

Загрузил драйвер Lbios20.bio в плату, протестировал, получил, что плата
использует адрес 0х378, прерывание 7, режим Bidirectional. (так настроен LPT в SETUP BIOS)

дальше:
POWER_AND_PRINTER(0,0) - включил аналоговую часть модуля и отключил режим работы с принтером.

MemorySize = MEMORY_STATE() = 2
if(MemorySize) FifoSize=8192;
else           FifoSize=400;

HalfSize=FifoSize/2;

//Отключил тестовый режим
ModeTest = 0;
SET_TEST_SPEED_MODE(ModeTest);

//Конфигурирую FIFO буфер
ModeFifo = 0;
SET_FIFO_PARAMETERS(FifoSize, ModeFifo);

//Синхронизация выключена
int SMode     = 0;
int TtlMask   = 0;
int AdChannel = 0;
int AdValue   = 0;
SET_SYN_PARAMETERS (SMode, TtlMask, AdChannel, AdValue);

Создал массив 400 точек, один период синусоиды

//Настраиваю временные характеристики
SET_TIME_PARAMETERS(2000,0,40,11);

//для циклического вывода на ЦАП
//void SET_DAC_BUFER(int Npoint, int *Data);
//Npoint -> размер выводимого блока (не больше 400);
//Data -> выводимые данные на ЦАП (-2048 <= Data[i] < +2048)
SET_DAC_BUFER(400, Data);

Запуск циклического вывода на ЦАП
START_LOOP_DAC();

наблюдаю синусоиду

//Установка параметров для многоканально ввода
int Chan[2];
SET_SOFT_PARM(2, Chan); ;

Дальше использую функции ADCHAN, KADR, или INPUT_TIMER.
Если использовать функции ADCHAN или KADR, то АЦП правильно считывает
сигналы, т.е со входа 1-го канала АЦП считываю мою синусоиду.

Если же использовать TIMER_INPUT, то генерация синусоиды с ЦАП сбивается


С уважением
Альберт А.
Уфа, Уфимское моторостроительное ПО

E-Mail:
albert01@ufanet.ru