НАЗАД

3.1. ПОДКЛЮЧЕНИЕ ДАТЧИКОВ К ПЭВМ

1. Программирование LPT-порта ПЭВМ. Персональный компьютер --- многофункциональный прибор, который может служить измерителем или регистратором различных сигналов. Для этого к параллельному LPT--порту, предназначенного для принтера, следует подсоединить соответствующий датчик. LPT--порт, состоит из 25 выводов: 1 вывод --- стробирующий, то есть передающий сигнал, синхронизирующий передачу информации, 2-9 выводы --- 8 разрядная шина, используемая для передачи 1 байта от ПЭВМ к внешнему устройству, выводы 10-17 --- шина передачи данных о состоянии принтера (подтверждение приема данных, сигнал "занят", конец бумаги, перевод строки, ошибка, готовность к работе и т.д.). Выводы 18-25 образуют общую шину заземления (корпус ПЭВМ).

Считывание 1 байта информации от внешнего устройства производится через 10-17 выводы LPT--порта, при этом передаваемое восьмиразрядное двоичное число записывается в ячейку ОЗУ с адресом 37916=88910. Чтобы переслать 1 байт информации от ПЭВМ к внешнему устройству необходимо записать требуемое восьмиразрядное двоичное число в ячейку ОЗУ с адресом 37816=88810. При этом на выводах 2-9 появится соответствующая комбинация лог. 0 и 1.

Для написания программ, представленных ниже, используются среды Borland Pascal 7.0 и MS--DOS QBasic 1.0. В языке QBasic считывание числа из ячейки ОЗУ 37916=88910 осуществляется с помощью команды x=INP(&H379) или x=INP(889). Для записи числа в порт используется оператор OUT &H378, 123 или OUT 888, 63. В языке Pascal им соответствуют операторы: Port[888]:=212; Port[378]:=12; --- запись чисел 212 и 12 в ячейку ОЗУ с адресом 88810; x:=Port[889]; или x:=Port[379]; --- считывание числа из ячейки 88910 и его присвоение переменной x.

2. Подключение магнитоконтактного датчика. Для изучения магнито--контактного датчика подключим геркон 2 к параллельному порту LPT (выводы 11 и 25) и поднесем магнит 1 (рис. 1.1). Вдали от магнита геркон незамкнут, на всех выводах порта логическая 1, поэтому в ячейке памяти с адресом 37916 находится число 11111111 (255). При поднесении магнита соответствующий вывод LPT порта замыкается на общий, на нем появляется логический 0. В ячейку памяти 37916 помещается число 01111111 (127), которое может быть считано командой x=INP(&H379). Протестируйте магнито--контактный датчик. К LPT--порту подключите геркон и запустите программу:

WHILE INKEY = "": PRINT INP(&H379); : WEND

Что произойдет, если к геркону поднести магнит? Наберите программу Пр-- 1 и повторите опыт. Пока геркон замкнут, x не равно 127, программа вращается в цикле 1, печатая на экране "1". Когда геркон разомкнут, x равно 127, программа вращается в цикле 2, печатая на экране "0". При нажатии на пробел --- выход из программы.

CLS : x = INP(&H379)                             'Пр - 1 
WHILE INKEY$ = ""                                'QBASIC
WHILE x <> 127: x = INP(&H379): PRINT "1"; : WEND  'цикл 1
WHILE x = 127: x = INP(&H379): PRINT "0"; : WEND   'цикл 2
WEND 
END

Измерьте время замыкания геркона. Для этого наберите программу Пр -- 2 и запустите ее. Сначала ПЭВМ находится в режиме ожидания (цикл 1), на экране -- сообщение "ОЖИДАНИЕ". При поднесении магнита ПЭВМ выходит из цикла 1, переменной T0 присваивается текущее время, программа начинает вращаться в цикле 2, печатая на экране сообщение "ГЕРКОН ЗАМКНУТ". Удалите магнит, -- переменной T присваивается время размыкания геркона. После этого вычисляется время замыкания T-T0, результат выводится на экран. Измерьте время замыкания геркона с помощью секундомера и компьютера, сравните результаты.

CLS : x = INP(&H379)                            'Пр - 2  
WHILE x = 127:                                  'QBASIC
x = INP(&H379): PRINT "ОЖИДАНИЕ"                'цикл 1
WEND : T0 = TIMER
WHILE x <> 127: 
x = INP(&H379): PRINT "ГЕРКОН ЗАМКНУТ"          'цикл 2
WEND: T = TIMER: PRINT "ВРЕМЯ ", T - T0
END

Для измерения времени между последовательными замыканиями геркона наберите программу Пр -- 3 и запустите ее. К геркону поднесите магнит, удалите его и через время 5-20 с, отсчитанное по секундомеру, снова поднесите. На экране компьютера появится время между последовательными замыканиями.

CLS : x = INP(&H379)                            'Пр - 3
WHILE x = 127                                   'QBASIC
x = INP(&H379): PRINT "НЕЗАМКНУТ": WEND         'цикл 1
t0 = TIMER                                        
WHILE x <> 127
x = INP(&H379): PRINT "ЗАМКНУТ": WEND           'цикл 2
WHILE x = 127
x = INP(&H379): PRINT "НЕЗАМКНУТ": WEND         'цикл 3
t = TIMER: PRINT "ВРЕМЯ ", t - t0
END

Рис. 1. Подключение геркона и оптодатчика к ПЭВМ.

Рис. 1. Подключение геркона и оптодатчика к ПЭВМ.

3. Подключение оптодатчика к ПЭВМ. Оптодатчик состоит из инфракрасного светодиода 1, напротив которого установлен фотодиод 3, подключенный к ПЭВМ через схему сопряжения 4 (рис. 1.2). При пересечении оптодатчика флажком 2 на выходе схемы резко меняется напряжение: логическая 1 сменяется логическим 0 или наоборот. Зная время пересечения светового пучка или время между двумя последовательными пересечениями, можно определить скорость тела. Питание датчика осуществляется от 3 и 25 выводов порта LPT. Для этого по адресу 37816 записывают число 255, что приводит к появлению лог. 1 на 2-9 выводах.

Протестируйте оптодатчик, для этого подключите его к LPT--порту (рис. 1.2), наберите программу Пр -- 4 и запустите ее. Программа содержит основной цикл, в который вложены циклы 1 и 2. Если в порт LPT поступает число 111111112=255, то программа вращается в цикле 1 и на экране печатается "1". Если в порт LPT поступает число 011111112=127, то программа вращается в цикле 2, на экран выводится "0". Освещая и затемняя фотодиод, убедитесь в том, что программа работает описанным выше образом.

OUT &H378, 255                                  'Пр - 4
WHILE INKEY$ = "" : x = INP(&H379)              'QBASIC
WHILE x <> 127:                                 'цикл 1
x = INP(&H379): PRINT "1";         
WEND : t0 = TIMER
WHILE x = 127:                                  'цикл 2
x = INP(&H379): PRINT "0";         
WEND: t = TIMER: PRINT t - t0   
WEND: END

Измерьте время перекрывания светового пучка. Загрузите программу Пр -- 4, закомментируйте операторы PRINT "0" И PRINT "1". Когда при перекрывании светового пучка программа выйдет из цикла 1, переменной T0 будет присвоено текущее время ПЭВМ. Пока фотодиод затемнен, программа вращается в цикле 2. При освещении фотодиода программа выходит из цикла 2 и теперь переменной T присваивается текущее время ПЭВМ. Разность T-T0 выводится на экран ПЭВМ, после чего все повторяется снова до нажатия на пробел. Измерьте время затемнения фотодиода с помощью секундомера и сравните его с результатом, выдаваемым ПЭВМ.

Измерьте время между двумя пересечениями светового пучка. Напишите программу, которая ждет первого затемнения оптодатчика, после чего присваивает переменной T0 текущее время по системным часам ПЭВМ, затем ждет второго пересечения оптодатчика и соответствующее время присваивает переменной T. Разность T-T0 должна выводиться на экран. Запустите программу, измерьте время между последовательными пересечениями оптодатчика с помощью секундомера и ПЭВМ, сравните результаты.

3. Генераторный датчик координаты. Рассмотрим генератор прямоугольных импульсов, частота которых зависит от сопротивления переменного резистора, являющегося, например, датчиком координаты (рис. 2.1). Сигнал с генератора подается в ПЭВМ. Генератор собран на микросхеме К155ЛА3, и может быть запитан от параллельного LPT--порта (рис. 2.2). Чем меньше сопротивление резистора, тем быстрее происходит заряд или разряд конденсатора, соответственно выше частота импульсов. ПЭВМ в течение заданного промежутка времени Δt (например, 1 с) считает количество поступивших импульсов, и определяет их частоту. Результаты подсчета импульсов могут выводиться на экран в графическом виде, в числовом формате, либо записываться в файл.

Рис. 2. Генераторный датчик координаты.

Рис. 2. Генераторный датчик координаты.

К ПЭВМ подключите генераторный датчик координаты Наберите программу Пр -- 5 и запустите ее. Программа вращается в основном цикле; в него вложен цикл 1, подсчитывающий число поступающих в LPT--порт импульсов за время dt. Поворачивая подвижный контакт резистора, получите график зависимости его координаты от времени. Повторите предыдущий опыт, задав другие время счета dt и масштаб M. Измените программу так, чтобы она через заданное время dt выводила координату в числовом виде.

SCREEN 2                                        'Пр - 5
LINE (10,180)-(640,180): LINE (10,0)-(10,480)   'QBASIC
OUT (888), 255: M = .2
WHILE INKEY$ = ""
n = 0: dt = 1: t0 = TIMER: t = t0 +.01
WHILE t - t0 < dt
x = INP(889): 'PRINT " x= ", x;
IF (y = 127) AND (x <> 127) THEN n = n + 1
y = x: t = TIMER
WEND: n = M * (n - 80): tt = tt + dt
LINE (10+tt*5, 180-n/dt)-(10+(tt-dt)*5, 180-nn/dt)
nn = n: 'PRINT "КООРДИНАТА", n / dt;
WEND
END 


ВВЕРХ