Как превратить персональный компьютер в измерительный комплекс - Гёлль Патрик (полная версия книги .txt) 📗
Это объединение можно сделать следующим образом:
LOAD "CGA" (загрузка драйвера);
затем
MERGE "CGAVISU" (добавление программы вывода на экран).
Полученная программа теперь может быть сохранена под каким-либо именем при помощи обычной команды SAVE.
На рис. 5.11 показан результат вывода на бумагу с использованием буфера обмена Windows, кривой разряда конденсатора емкостью 4,7 мкФ через входное сопротивление АЦП. Эта кривая была получена на экране CGA (320x200 точек).
Рис 5.11. Результат, полученный в режиме CGA
Рис. 5.12 воспроизводит ту же запись, пересчитанную для вывода на экран VGA.
Рис 5.12. Результат, полученный в режиме VGA
Обеспечение точной временной развертки
Для приложений, требующих точной регистрации параметра «время», можно использовать программу
TIME.BAS, записывающую в файл DAT.DAT значение переменной TIMES вместе с измеренной величиной напряжения.
200 REM — TIME —
210 GOSUB 100
220 OPEN "dat.dat" FOR OUTPUT AS #1
230 PRINT "Идут измерения "
240 FOR G=0 ТО 639
250 GOSUB 100
260 PRINT#1,D,TIME$
270 FOR T=0 TO 2000: NEXT T
300 REM (c) 1997 Patrick GUEULLE
Понятно, что для полной обработки такого файла потребуются специальные программы. Можно использовать как большие коммерческие пакеты, статистические или графические, так и простые программы TCGA.BAS и ТVGA.ВAS.
500 REM — TCGA —
510 OPEN "dat.dat" FOR INPUT AS #1
520 INPUT#1,Y: Y=199-INT(Y*199/5)
530 INPUT#1,S$: PSET(0, Y)
540 FOR X=1 TO 639
550 INPUT#1,Y: Y=199-INT(Y*199/5)
560 INPUT#1,T$: LINE-(X,Y)
570 NEXT X: CLOSE #1
580 LOCATE 1,1: PRINT S$
590 LOCATE 1,73: PRINT S$
600 REM (C) 1997 Patrick GUEULLE
500 REM — TVGA —
510 OPEN "dat.dat" FOR INPUT AS #1
520 INPUT#1,Y: Y=349-INT(Y*349/5)
530 INPUT#1,S$: PSET(C,Y)
540 FOR X=1 TO 639
550 INPUT#1,Y: Y=349-INT(Y*349/5)
560 INPUT# 1,T$: LINE-(X, Y)
570 NEXT X: CLOSE#1
580 LOCATE 1,1: PRINT S$
590 LOCATE 1,73: PRINT S$
600 REM (c) 1997 Patrick GUEULLE
Осциллограф
Во многих ситуациях бывает нужно наблюдать формирование кривой в реальном масштабе времени прямо на экране ПК. При этом должна быть предусмотрена возможность распечатки изображения на принтере после вывода на экран или даже в процессе вывода, при включении опции «печать экрана». Такой результат очень просто получить, совместив три программы:
• драйвер АЦП;
• драйвер экрана;
• прикладную программу.
Первые два модуля уже известны, а в качестве третьего может быть использована либо программа CDIRECT.BAS (с экраном CGA), либо VDIRECT.BAS (с экраном VGA).
85 GOSUB 300
200 REM — CDIRECT —
210 GOSUB 100: PSET(0,0)
220 FOR G=1 TO 639
230 GOSUB 100
240 Y=D: GOSUB 500
250 FOR T=0 TO 2000: NEXT T: REM развертка
260 NEXT G
270 END
415 X=0: RETURN
500 Y=199-INT(Y*199/5)
510 LINE-(X, Y)
520 X=X+1
530 RETURN
540 REM (c) 1997 Patrick GUEULLE
85 GOSUB 300
200 REM — VDIRECT —
210 GOSUB 100: PSET(0,0)
220 FOR G=1 TO 639
230 GOSUB 100
240 Y=D: GOSUB 500
250 FOR T=0 TO 2000: NEXT T: REM развертка
260 NEXT G
270 END
415 X=0: RETURN
500 Y=349-INT(Y*349/5)
510 LINE-(X, Y)
520 X=X+1
530 RETURN
540 REM (c) 1997 Patrick GUEULLE
Потребуются следующие команды:
LOAD "MAXIM10" (загрузка драйвера для МАХ 1243);
MERGE "VGA" (добавление драйвера для экрана VGA);
VERGE "VDIRECT" (добавление модуля осциллографа VGA).
На рис. 5.13 приведена полученная таким образом осциллограмма синусоидального сигнала с амплитудой 1 В и частотой 4 Гц на выходе функционального генератора, выполненного на базе широко распространенной микросхемы МАХ 038. В данном случае 10-разрядный АЦП работал с ПК модели 486/133 МГц с экраном VGA.
Рис 5.13. Осциллогромма, полученная в режиме VGA
Для того чтобы приспособить осциллограф к той или иной практической задаче, в программу достаточно внести минимальные изменения. Для получения непрерывной развертки без очистки экрана (режим длительного послесвечения) следует исправить строку 270:
270 Х=0: GOTO 220
Для получения того же результата, но с очисткой экрана на каждом * обратном ходе» развертки (режим короткого послесвечения), надо записать:
270 CLS: GOTO 85
Для получения режима «ждущей синхронизации» следует добавить только одну строку:
215 IF D=0 THEN 210
Эта команда позволяет дождаться положительного напряжения на входе АЦП для запуска развертки. Конечно, можно выбрать и любую другую отличную от нуля величину в диапазоне от 0 до +5 В, а также использовать условные операторы «больше, чем» или «меньше, чем».
Можно также предусмотреть и вход внешней развертки, использовав либо второй АЦП, либо один из цифровых входов (линии /АСК или BUSY параллельного порта, игровой порт и т. п.).
Подключение нескольких АЦП к параллельным и последовательным портам позволяет оснастить ПК несколькими аналоговыми входами, не используя при этом дорогие АЦП с мультиплексными входами. Возможны любые сочетания, как в плане аппаратных, так и программных средств.
Самый распространенный случай — это создание двухлучевого виртуального осциллографа, но можно принять в расчет и задачи, требующие режима работы «Х-Y», а также просто запись в файл более или менее взаимосвязанных последовательностей данных.
Допускается огромное множество различных комбинаций — все их даже не перечислить. Скажем, приобретя один готовый АЦП, второй можно собрать самостоятельно, чтобы не платить дважды за одно и то же программное обеспечение. В некоторых случаях может понадобиться использование двух абсолютно идентичных АЦП.
5 REM — BICOURBE —
10 REM — MAXIM12 —
20 KEY OFF: CLS
30 B=&H3F8: REM COM1:
40 N=12: REM число разрядов
50 OUT B+4,1
60 FOR T=0 TO 100:NEXT T
70 OUT B+3,64
80 FOR T=0 TO 500: NEXT T
84 GOSUB 1000
85 GOSUB 300
90 GOTO 200
100 OUT B+4,0: D=0: REM ACQUISITION
105 OUT B+4,2: OUT B+4,0
110 FOR F=0 TO N-1
120 OUT B+4,2
130 E=INP(B+6) AND 16
140 OUT B+4,0
150 IF E=16 THEN D=D+2^(N-1-F)
160 NEXT F
170 D=5*D/(2^N-1)
180 OUT B+4,1: RETURN
200 REM — VDIRECT —
210 GOSUB 100: GOSUB 1090
220 FOR G=1 TO 639
230 GOSUB 100
240 Y=D: GOSUB 500
241 GOSUB 1090
242 Y=Q: GOSUB 600
250 FOR T=0 TO 2000: NEXT T: REM развертка
260 NEXT G
270 END
300 REM — VGA —
310 SCREEN 9
320 KEY OFF: CLS
330 LINE(0,0)-(0,349),2
340 TOR Y=0 TO 349 STEP 35
350 LINE(0,Y)-(639,Y),2,&HCCCC
360 NEXT Y
370 FOR X=0 TO 639 STEP 32
380 LINE(X,0)-(X,349),2,&HCCCC
390 NEXT X
400 LINE(639,0)-(639,349),2
410 LINE(0,349)-(639,349),2,&HCCCC
415 X=0: RETURN
500 Y=349-INT(Y*349/5)
502 PSET(X,V)
505 V=Y
510 LINE-(X,V),12
520 X=X+1
530 RETURN
600 Y=349-INT(Y*349/5)
602 PSET(X,W)
605 W=Y
610 LINE-(X,W),14
630 RETURN
1000 REM 12BITS
1010 KEY OFF: CLS
1020 C=&H2F8: REM COM2:
1030 M=12: REM число разрядов
1040 OUT C+4,1
1050 FOR T=0 TO 100:NEXT T
1060 OUT C+3,64
1070 FOR T=0 TO 500:NEXT T
1080 RETURN
1090 OUT C+4,0: Q=0: REM ACQUISITION
1100 OUT C+4,2: OUT C+4,0
1110 OUT C+4,2: OUT C+4,0
1120 OUT C+4,2: OUT C+4,0
1130 FOR F=0 TO M-1
1140 OUT C+4,2
1150 E=INP(C+6) AND 16
1160 OUT C+4,0
1170 IF E=16 THEN Q=Q+2^(M-1-F)
1180 NEXT F
1190 Q=5*Q/(2^M-1)
1200 OUT C+4,1: RETURN
1210 REM (c) 1997 Patrick GUEULLE