Читать «Как превратить персональный компьютер в измерительный комплекс» онлайн - страница 39
Патрик Гёлль
Эта форма представления результата, менее точная, чем цифровая индикация, гораздо более удобна, когда требуется лишь оценить направление и скорость изменений или отклонений измеряемой величины, например, при ручной регулировке или настройке. В приведенном примере шкала построена на базе ASCII символов, но такая же шкала может быть выполнена и в графическом режиме экрана.
Усредняющий фильтр
Наиболее распространенный способ подавления быстрых флуктуаций (часто паразитных) в медленно изменяющемся сигнале состоит в вычислении среднего значения нескольких выборок, относящихся к одному интервалу дискретизации. Конечно, этот способ может замедлить работу системы, и поэтому он применен в двух программах, выводящих результат один раз в секунду (SECONDE.BAS) и один раз в минуту (MINUTE.BAS).
200 REM — SECONDE —
210 Q=0: S=0: GOSUB 100
220 LOCATE 5,1
230 PRINT "Идет измерение…"
240 H$=TIME$
250 IF H$<>TIME$ THEN BEEP: GOTO 290
260 GOSUB 100
270 S=S+D: Q=Q+1
280 GOTO 250
290 D=INT(100*S/Q)/100
300 LOCATE 1,1
310 PRINT USING "##.##";D;
320 PRINT "(среднее за"; Q; " измерений)"
330 GOTO 210
340 REM (c) 1997 Patrick GUEULLE
Кроме вычисления результата измерений, каждая из этих программ выводит и количество измерений, которое было использовано при его вычислении. Это позволяет точно оценить реальное быстродействие сиcтемы в зависимости от применяемого ПК Так, можно получить 3–4 измерения в секунду на «антикварном» ПК 8088/4,77 МГц, 60–70 измерений в секунду на 386SX25 и 700-1000 измерений в секунду на 486 DX/133 МГц, что все же достаточно далеко от современных скоростей, но весьма почетно для BASIC-интерпретатора.
Стоит обратить внимание на то, как использована зарезервированная цикловая переменная TIМЕ$. Она позволяет при любой частоте процессора получить достаточно точную шкалу секунд, минут и даже часов. А если понадобится осуществлять, например, одно измерение за несколько дней, то можно использовать переменную DATES.
200 REM — MINUTE —
210 Q=0: S=0: GOSUB 100
220 LOCATE 5,1
230 PRINT "Идет измерение…"
240 H$=LEFT$(TIME$,5)
250 IF H$<>LEFT$ (TIME$, 5) THEN BEEP: GOTO 290
260 GOSUB 100
270 S=S+D: Q=Q+1
280 GOTO 250
290 D=INT(100*S/Q) /100
300 LOCATE 1,1
310 PRINT USING "##.##";D;
320 PRINT "(среднее за";Q; " измерений)"
330 GOTO 210
340 REM (c) 1997 Patrick GUEULLE
Пиковый регистратор минимумов и максимумов
Достаточно добавить несколько строк на языке BASIC, чтобы получить режим запоминания минимумов и максимумов измеряемого напряжения, с возможностью обнуления результатов путем нажатия на клавишу пробела на клавиатуре ПК.
200 REM — MINMAX —
210 PRINT "нажать клавишу пробела для перезапуска"
220 I=5: А=0: Q=0: GOSUB 100
230 FOR G=1 TO 100
240 GOSUB 100: Q=Q+D
250 NEXT G
260 Q=Q/100
270 IF Q<=I THEN I=Q: S$=TIME$
280 IF Q>=A THEN A=Q: T$=TIME$
290 LOCATE 3,5: PRINT "Mes: ";
300 PRINT USING"##.##"; INT(100*Q)/100;
310 PRINT " "+TIME$
320 LOCATE 5,5: PRINT "Макс: ";
330 PRINT USING "##.##"; INT(100*A) /100
340 PRINT " " + T$
350 LOCATE 7,5: PRINT "Мин: ";
360 PRINT USING "##.##“; INT(100*1)/100
370 PRINT " " + S$
380 IF INKEY$=CHR$(32) THEN 220
390 Q=0: GOTO 230
400 REM (c) 1997 Patrick GUEULLE