- •Устройство сбора аналоговой информации для пэвм с магистралью isa.
- •Редакция 1.1
- •1. Введение
- •2. Назначение и основные технические характеристики устройства.
- •3. Входные и выходные сигналы устройства.
- •Замечания относительно прерывания программы
- •Замечания относительно сигналов запуска устройства
- •4.Описание регистров устройства.
- •4.1 Регистр csr (base).
- •Автокалибровка
- •5. Подготовка устройства к работе
- •6. Подключение устройства к внешней аппаратуре
- •7. Меры предосторожности при работе с устройством.
- •8. Дополнительные возможности устройства.
- •9. Пример программы для работы с устройством.
7. Меры предосторожности при работе с устройством.
При работе с устройством входное измеряемое напряжение ни при каких условиях не должно выходить за пределы 15В относительно аналогового общего уровня. В случае необходимости на датчиках сигналов следует устанавливать ограничивающие элементы. Несоблюдение этого условия может вывести из строя входные цепи устройства.
8. Дополнительные возможности устройства.
В устройстве имеется возможность изменения диапазона измеряемого напряжения в пределах от +-2.5В до +-10В (основной диапазон). Для этого необходимо изменить коэффициент усиления входного инструментального усилителя. В исходном состоянии этот коэффициент усиления равен 1, что соответствует диапазону входного сигнала +-10В. Коэффициент усиления изменяется установкой резистора между 1 и 8 выводами микросхемы AD622 (для этого резистора на печатной плате устройства оставлено место). Сопротивление резистора определяется из выражения:
R[кОм]=49.4/(k-1), где k – коэффициент усиления, который необходимо установить.
9. Пример программы для работы с устройством.
program MD142T9;
USES Crt,Graph;
{
вывод на экран результатов 600 измерений с делением
результата на 160 по заданному каналу при запуске от таймера. Выход из
программы по ESC, по любой другой клавише цикл измерения повторяется.
}
const
Base=$320; {базовый адрес MD142}
CSR=Base; {адрес регистра управления MD142}
DR=Base+2; {адрес регистра данных MD142}
label 1;
var
VCSR: word;{глобальная переменная, хранящая содержимое регистра CSR}
dat: array[1..600] of integer;
i,e,grdrv,grmode: integer;
kw: real;
s: char;
ch,g,k: word;
st: string;
{******************************************************************}
Procedure MD142FIFORST;
{процедура сброса FIFO}
begin
Portw[CSR]:=VCSR or $4000;
end ;{MD142FIFORST}
{*******************************************************************}
Function MD142PRSTS(ch:word):integer;
{
функция получения результата по каналу ch,
режим работы коммутатора каналов – 16 заземленных
режим запуска - программный
}
begin
VCSR:= VCSR+(ch shl 4);
Portw[CSR]:=VCSR+1;
while (Portw[CSR] and $1)=0 do;
MD142PRSTS:=integer(Portw[DR]);
end;{MD142PRSTS}
{********************************************************}
procedure MD142SET(ch,time:word);
{
процедура подключения на вход устройства MD142 сигнала с канала
ch с задержкой после включения, равной
time условных единиц. Режим работы коммутатора каналов – 16 заземленных
}
var
tmp: integer;
begin
VCSR:= VCSR+(ch shl 4)+(g shl 9);
Portw[CSR]:=VCSR;
for tmp:=0 to time do;{генерация временной задержки}
end;{MD142SET}
{*********************************************************}
function MD142GETT:integer;
{
Функция получения одного отсчета от устройства MD142 про внешнем
Или таймерном запуске.
Канал должен быть предварительно установлен процедурой MD142SET.
}
begin
while (Portw[CSR] and $1)=0 do;
MD142GETT:=integer(Portw[DR]);
end;{MD142GETT}
{**********************************************************}
Procedure MD142STIM(k:word);
{
Процедура установки периода сигналов запуска АЦП от внутреннего
Таймера устройства MD142.
ПЕРИОД=(1+k)[мкс].
Таймер начинает работать сразу после установки периода.
}
begin
VCSR:=VCSR and $FFF7;
Portw[CSR]:=VCSR;
Portw[DR]:=k;
VCSR:=VCSR+$2;
Portw[CSR]:=VCSR;
end {MD142STIM};
{**********************************************************}
{**********************************************************}
begin
{начало автокалибровки}
Portw[CSR]:=$200;
while (Portw[CSR] and $1)=0 do;
{конец автокалибровки}
VCSR:=0;
ClrScr;
GotoXY(1,1);
Write(‘КАНАЛ -> ');
Readln(ch);
MD142SET(ch,20);
GotoXY(1,3);
Write('период запуска/2...65635/->');
Readln(k);
1: MD142FIFORST;
for i:=1 to 600 do dat[i]:=100;
MD142STIM(k);
VCSR:= VCSR and $FFFD;
for i:=1 to 600 do dat[i]:=MD142GETT;
portw[CSR]:=VCSR; {остановка таймера}
e:=portw[CSR] and $4000; {чтение признака переполнения FIFO}
grdrv:=0;
InitGraph(grdrv,grmode,'');
SetColor(2);
Rectangle(40,20,GetMaxX,GetmaxY-20);
SetColor(15);
OutTextXY(40,8,'Є «');
OutTextXY(88,8,Chr(48+ch));
OutTextXY(104,8,'интервал квант.');
kw:=1+k;
Str(kw:6:1,st);
OutTextXY(250,8,st);
OutTextXY(250+Length(st)*8,8,'¬Єб');
SetColor(14);
OutTextXY(344,8,'выход ESC продолжение – ЛЮБАЯ КЛАВИША');
SetColor(2);
SetLineStyle(DottedLn,0,NormWidth);
for i:=1 to 9 do Line(40,40+(i-1)*50,639,40+(i-1)*50);
SetColor(15);
OutTextXY(0,437,'-32000');
OutTextXY(0,337,'-16000');
OutTextXY(32,237,'0');
OutTextXY(8,137,'16000');
OutTextXY(8,37,'32000');
OutTextXY(37,470,'0');
OutTextXY(129,470,'100');
OutTextXY(229,470,'200');
OutTextXY(329,470,'300');
OutTextXY(429,470,'400');
OutTextXY(529,470,'500');
SetColor(Red);
If e<>0 then OutTextXY(460,32,'переполнение буфера')
else OutTextXY(460,32,' ');
SetColor(2);
for i:=1 to 5 do Line(140+(i-1)*100,20,140+(i-1)*100,459);
SetLineStyle(SolidLn,0,NormWidth);
for i:=1 to 600 do PutPixel(i+39,240-(dat[i] div 160),15);
repeat
until(KeyPressed);
if ReadKey<>Chr($1B) then goto 1;
CloseGraph;
end.