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


Помогите с вводом данных на АЦП

Вы не вошли.

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

Дмитрий
04.05.2007 14:42:53
#1

Гость

Помогите с вводом данных на АЦП

L780. Вывод данных на 2 ЦАПа работает прекрасно. Но с вводом на АЦП проблемы. Приведите, пожалуйста, пример опроса 4-х первых каналов АЦП. Также подробно объясните, зачем нужны Rate, NCh, Chn и приведите пример, где они используются (В ваших примерах мало внимания (Несколько строчек)  уделяется асинхронным в-в). Зачем нужны
// USHORT FIFO;
// USHORT IrqStep;
// USHORT Pages;
ЦАП работает и без них!
Вот мой пример кода:
hp_sp.s_Type=L_ASYNC_ADC_INP;
hp_sp.dRate=0.01; // Такой частоты хватает!
hp_sp.NCh=3; // Наверное, это 4 канала. Если 3, то тогда чему соотв. =0?
hp_sp.Chn[0]=1;
hp_sp.Chn[1]=1;
hp_sp.Chn[2]=1;
hp_sp.Chn[3]=1;
Times.CurrentForADC=(ULONG)(GetTickCount()/100);
...
В таймере:
if((ULONG)(GetTickCount()/100 >=Times.CurrentForADC+1) // Ждём, пока пройдёт 1 мс, чтобы не слишком часто мелькало в окошке.
  {pI->IoAsync(&hp_sp);
   Form1->Edit6->SetTextBuf(((AnsiString)(hp_sp.Data[0]/8000)).c_str());
   Form1->Edit8->SetTextBuf(((AnsiString)(hp_sp.Data[4]/8000)).c_str());
   Form1->Edit10->SetTextBuf(((AnsiString)(hp_sp.Data[4]/8000)).c_str());
   Form1->Edit12->SetTextBuf(((AnsiString)(hp_sp.Data[4]/8000)).c_str());
   Times.CurrentForADC=(ULONG)(GetTickCount()/100);
  }
Это часть примера, где прекрасно работает ЦАП.

Дмитрий
04.05.2007 14:46:35
#2

Гость

Re: Помогите с вводом данных на АЦП

Извините, последние строчки выглядят так:
Form1->Edit6->SetTextBuf(((AnsiString)(hp_sp.Data[0]/8000)).c_str());
Form1->Edit8->SetTextBuf(((AnsiString)(hp_sp.Data[4]/8000)).c_str());
Form1->Edit10->SetTextBuf(((AnsiString)(hp_sp.Data[8]/8000)).c_str());
Form1->Edit12->SetTextBuf(((AnsiString)(hp_sp.Data[12]/8000)).c_str());
Тип lond "весит" 4 байта.

Дмитрий
04.05.2007 16:06:49
#3

Гость

Re: Помогите с вводом данных на АЦП

Извините, совсем запутался:
Form1->Edit6->SetTextBuf(((AnsiString)(hp_sp.Data[0]*5/8000)).c_str());
Form1->Edit8->SetTextBuf(((AnsiString)(hp_sp.Data[1]*5/8000)).c_str());
Form1->Edit10->SetTextBuf(((AnsiString)(hp_sp.Data[2]*5/8000)).c_str());
Form1->Edit12->SetTextBuf(((AnsiString)(hp_sp.Data[3]*5/8000)).c_str());

Дмитрий
11.05.2007 15:35:50
#4

Гость

Re: Помогите с вводом данных на АЦП

С представлением чисел (0-USHORT), касающегося предыдущего вопроса, я разобрался. Ответьте мне на следующий вопрос. Можно ли считывать данные так:
ASYNC_PAR hp_sp1, hp_sp2, hp_sp3, hp_sp4;
hp_sp1.s_Type=L_ASYNC_ADC_INP;
hp_sp2.s_Type=L_ASYNC_ADC_INP;
hp_sp3.s_Type=L_ASYNC_ADC_INP;
hp_sp4.s_Type=L_ASYNC_ADC_INP;
hp_sp1.Chn[0]=0x0;
hp_sp2.Chn[0]=0x1;
hp_sp3.Chn[0]=0x2;
hp_sp4.Chn[0]=0x3;
while(!STOP)
{pI->IoAsync(&hp_sp1);
  // Используем данные с 1 канала.
  pI->IoAsync(&hp_sp2);
  // Используем данные со 2 канала.
  pI->IoAsync(&hp_sp3);
  // Используем данные с 3 канала.
  pI->IoAsync(&hp_sp4);
  // Используем данные с 4 канала.
}
В этом случае появившийся сигнал на одном канале "отображается" на значение других каналов.
Аппаратно это не так. Почему так делать нельзя?
При работе с 2 ЦАПами я действовал аналогично и всё работало!

14.05.2007 09:38:21
#5

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: Помогите с вводом данных на АЦП

Я так понимаю аппаратно они вообще висят в воздухе... делать так можно если их заземлить...

Дмитрий
14.05.2007 10:18:51
#6

Гость

Re: Помогите с вводом данных на АЦП

Вы правы! Спасибо.