- •Cистема сбора аналоговой информации для пэвм с магистралью isa.
- •Редакция 1.4
- •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 MD93t14;
USES Crt,Graph;
{вывод на экран в виде графика результатов 600 измерений по заданному каналу и с заданным коэффициентом усиления при программном запуске;
выход из программы по ESC, по любой другой клавише цикл измерений повторяется}
const
Base=$320; {базовый адрес MD93}
CSR=Base; {адрес регистра управления MD93}
DR=Base+2; {адрес регистра данных MD93}
label 1;
var
VCSR: word;{глобальная переменная, хранящая содержимое регистра CSR}
dat: array[1..600] of integer;
i,e,grdrv,grmode: integer;
kw: real;
s,ss: char;
ch,g,k: word;
st: string;
{******************************************************************}
Procedure MD88FIFORST; {процедура сброса FIFO}
begin
Portw[CSR]:=VCSR or $4000;
end;{MD93FIFORST}
{*******************************************************************}
Function MD93PRSTS(ch:word):integer;
{функция получения результата измерения по каналу ch; режим работы коммутатора каналов - 16 заземленных; режим запуска - программный}
begin
VCSR:= VCSR or (ch shl 4);
Portw[CSR]:=VCSR+1;
while (Portw[CSR] and $1)=0 do;
MD93PRSTS:=Portw[DR];
end;{MD93PRSTS}
{********************************************************}
procedure MD93SET(ch,g,time:word);
{процедура подключения на вход MD93 сигнала с канала ch, с задержкой после включения, равной time условных единиц;
режим работы коммутатора каналов - 16 заземленных}
var
tmp: integer;
begin
VCSR:= VCSR or ((ch shl 4));
Portw[CSR]:=VCSR;
for tmp:=0 to time do;{генерация временной задержки}
end;{MD93SET}
{*********************************************************}
function MD93GETT:integer;
{функция получения одного отсчета от MD93 при внешнем или таймерном запуске;
канал и коэф. усиления должны быть предварительно установлены процедурой MD93SET}
begin
while (Portw[CSR] and $1)=0 do;
MD88GETT:=Portw[DR];
end;{MD93GETT}
{**********************************************************}
Procedure MD93STIM(k:word);
{Процедура установки периода сигналов запуска АЦП от внутреннего таймера MD93.
ПЕРИОД[мкс]=(1+k)[мкс] Таймер начинает работать сразу после установки периода}
begin
VCSR:=VCSR and $FFF7;
Portw[CSR]:=VCSR;
Portw[DR]:=k;
VCSR:=VCSR or $2;
Portw[CSR]:=VCSR;
end{MD93STIM};
{=================================================================}
begin
VCSR:=0;
ClrScr;
GotoXY(1,1);
Write('Канал -> ');
1: MD93FIFORST;
for i:=1 to 600 do dat[i]:=MD93PRSTS(ch);
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));
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,'-2000');
OutTextXY(0,337,'-1000');
OutTextXY(32,237,'0');
OutTextXY(8,137,'1000');
OutTextXY(8,37,'2000');
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 10}),14);
repeat
until(KeyPressed);
if ReadKey<>Chr($1B) then goto 1;
CloseGraph;
end.