МАЙЕР Р.В.

ИЗМЕРЕНИЕ ВРЕМЕНИ С ПОМОЩЬЮ КОМПЬЮТЕРА

Развитие техники учебного эксперимента по физике требует совершенствования методов измерения времени. Современный измеритель времени должен иметь широкие пределы измерения, высокое быстродействие и малую погрешность, выдавать результат в цифровом виде. Для измерения времени протекания процессов различной природы достаточно, чтобы он позволял измерить длительность замыкания и (или) интервал времени между двумя последовательными замыканиями (размыканиями). Для применения такого измерителя времени в демонстрационном эксперименте необходимо, чтобы результаты измерений выводились на большое табло.

Подобный измеритель времени может быть реализован на базе IBM--совместимого компьютера [2]. Однако предлагаемые в научно--методических работах методы измерения времени с помощью ПК сложны и трудновоспроизводимы из--за использования специального программного обеспечения. В настоящей работе предложены простые программы на языке Pascal, позволяющие измерить длительность замыкания и время между двумя последовательными размыканиями.

Основная идея рассматриваемого метода проанализирована в статье Р.В.Акатова [1]. В ней показано, что для считывания данных может быть использован регистр состояния порта принтера и приведены примеры программ, обрабатывающих информацию, поступающую в компьютер.

Для соединения датчика замыкания--размыкания с компьютером удобно использовать кабель принтера Bitronics. Разъем, вставляемый в принтер, отрезают и с помощью омметра находят провода, идущие к 13 и 25 выводам параллельного порта принтера. К ним припаивают геркон. При поднесении к нему магнита провода замыкаются. Для измерения времени замыкания используется программа 1, написанная на языке Pascal.

Программа 1. Измерение длительности замыкания.
uses crt;
var
  adress : word;
  flag1, flag2, time, z : integer;
BEGIN
  clrscr; adress := MemW[$0040:$0008]+1; z:=50;
  Repeat
    if (port[adress]) = 111 then
    begin time:=time+1; flag1:=1; end
    else flag2:=flag1;
    delay(z);
  until flag2=1;
  Write(' ВРЕМЯ ',time);
Repeat until KeyPressed;
END.

С помощью оператора MemW[...:...] осуществляется прямое обращение к оперативной памяти. В квадратных скобках содержатся два выражения типа Word, разделенных двоеточием, которые обозначают базовый адрес сегмента и смещение (относительный адрес) ячейки ОЗУ, в которой хранится адрес порта регистра данных. Переменной adress присваивается адрес порта ввода--вывода регистра состояния, который на 1 больше адреса регистра данных [1]. Оператор Port[adress] позволяет считать содержимое регистра состояния. Если запустить программу при разомкнутых выводах 13 и 25 (общий) порта принтера, то оператор Port[adress] возвратит число 12710=011111112, в чем можно убедиться, выведя его на экран с помощью оператора WriteLn(Port[adress]);. При замыкании выводов 13 и 25 оператор Port[adress] возвращает число 11110=011011112, в котором 5 бит инвертирован. При выполнении условия Port[adress]=111 переменная time начинает считать количество прохождений цикла, то есть начинается счет времени. Скорость счета обратно пропорциональна длительности задержки z и зависит от времени выполнения тела цикла, что существенно при малых z. При размыкании счет времени прекращается. На экран выводится результат в условных единицах времени. Чтобы найти длительность одной условной единицы времени необходимо замкнуть выводы на известное время, например, t=30 с и разделить t на число импульсов N.

Для измерения времени между последовательными замыканиями используется программа 2. При ее запуске компьютер вращается в цикле (строчка {1}) ожидая, пока контакты не будут замкнуты. При приближении к геркону магнита контакты замыкаются и компьютер переходит к следующему циклу (строка {2}), ожидая, пока они не будут разомкнуты. При размыкании начинается счет времени (строки 3 и 4). Когда контакты повторно замыкаются переменной flag1 присваивается значение 1 (строка 5). При повторном размыкании происходит выход из цикла (строка 6) и вывод результата на экран.

Программа 2. Измерение времени между двумя размыканиями.
uses crt;
var
  adress : word;
  flag1, flag2, time : integer;
BEGIN
  clrscr; flag1:=0;  adress := MemW[$0040:$0008]+1;
  Repeat  delay(10); until (port[adress]) = 111;
  Repeat  delay(10); until (port[adress]) <> 111;
  Repeat
    time:=time+1; {Write(' ',time);} delay(10);
    if(port[adress]) = 111  then flag1:=1;
  until ((port[adress]) <> 111) and (flag1=1);
  Write(' ВРЕМЯ ',time);
Repeat until KeyPressed;
END.

Чтобы результат был виден большой аудитории, следует написать программу, рисующую в графическом режиме сегменты семисегментного индикатора на весь экран. Данная программа использовалась нами для измерения мгновенной скорости вращения платформы с магнитом и времени одного оборота.

Литература

1. Акатов Р.В. Компьютерные измерения: Аналого--цифровой преобразователь. --- "Учебная физика". --- 1999. --- N 3. --- С. 48--64.

2. Матаев Г.Г. Компьютерная лаборатория в вузе и школе. Учебное пособие. --- М.: Горячая линия --- Телеком, 2004. --- 440 c.


ВВЕРХ

Hosted by uCoz