Выбор того или иного коммерческого программного обеспечения (ПО) для виртуального измерительного комплекса определяется как конкретным типом аналогового интерфейса, имеющегося в наличии, так и особенностями измерений, которые необходимо проводить.
В целом программы, поставляемые с промышленными интерфейсами, являются лучшими, если говорить о возможной частоте дискретизации, и часто могут работать в таких сложных режимах как спектральный анализ сигналов. Их адаптация для некоторых задач иногда требует значительных усилий, так что в подобных случаях предпочтительнее написать несколько строк программы на языке ВАSIС, чтобы достичь желаемой цели.
В этой главе будут последовательно рассмотрены эти два разных, но взаимодополняющих способа практического воплощения концепции построения виртуального измерительного комплекса.
КОММЕРЧЕСКОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Рассмотрим вначале программное обеспечение, поставляемое в комплекте с АЦП ADC 10 и ADC 12.
Пакет PICOSCOPE
PICOSCOPE — это универсальное приложение, в котором при помощи меню можно в любой момент выбрать тип прибора, нужного пользователю:
• цифровой вольтметр постоянного или переменного тока (среднеквадратичный);
• цифровой частотомер;
• запоминающий осциллограф (от 1 мсек/дел до 5 сек/дел);
• низкочастотный анализатор спектра.
Версия пакета для DOS позволяет использовать одновременно только один виртуальный прибор или несколько мультиметров, тогда как версия для Windows допускает многооконность (рис. 5.1), хотя этот режим заметно замедляет работу всей системы.
Рис 5.1. Иллюстрация многооконного режима программы PICOSCOPE
Очень важно отметить, что при работе с сигналами переменного тока необходимо обеспечивать достаточную величину постоянного смешения входного сигнала. Без этого всякая отрицательная составляющая будет просто-напросто проигнорирована (диапазон измерений составляет от 0 до 5 В, и только новые модели ADC 40 и ADC 45 имеют входной диапазон ±5 В).
Подача переменного напряжения прямо на вход ADC 10 или ADC 12 не приводит к их выходу из строя (по крайней мере, до 30 В пикового значения или до 20 В эффективного). Но при этом показания среднеквадратичного вольтметра будут абсолютно неверными, осциллограмма окажется урезанной (однополупериодное выпрямление), а спектр будет искажен паразитными спектральными линиями (появятся четные гармоники).
Есть много вспомогательных способов (например, использование гальванической батарейки, включенной последовательно с входом), которые позволяют обрабатывать сигналы переменного тока с нулевой или малой постоянной составляющей, но более предпочтительно использовать хотя бы простое устройство нормирования сигналов (см. главу 6).
Хотя АЦП ADC 10 и ADC 12 можно подключить к любому IBM-совместимому ПК (желателен экран VGA, но достаточно и CGA), не рекомендуется использовать программу PICOSCOPE с процессорами ниже 386, в крайнем случае, 286. Вполне пригодны модели ПК типа 386SX25, но, естественно, более современные подойдут лучше.
В случае сбора данных о параметрах медленных процессов (снятие кривых заряда или разряда аккумуляторов, измерение температур и т. п.) можно быть уверенным, что даже старого процессора 8088 с тактовой частотой 4,77 МГц будет достаточно. Но для работы с ним надо использовать другую программу, например, PICOLOG или те программы, которые приводятся на сайте .
В целом желательно начать работу в режиме осциллографа, с выводом графики (рис. 5.2 и 5.3). Таким способом можно выявить все возможные ограничения сигнала или другие явления, способные повредить точности измерений каких-либо специфических величин.
Рис. 5.2. Экран виртуального осциллографа в режиме Windows
Рис. 5.3. Экран виртуального осциллографа
Как и при использовании любого другого осциллографа, следует помнить, что воспроизвести точную форму сигнала можно только тогда, когда верхняя частота его спектра гораздо меньше полосы пропускания измерительной цепи. Это значит, что в данном случае желательно ограничиться сигналами с частотой, не превышающей 2 кГц, чтобы избежать недоразумений.
Если зайти за разумные пределы, можно получить очень красивые кривые, но с ошибками в несколько порядков. Причиной тому — классическое явление, называемое наложением спектров. Оно проявляется в любой системе, в которой частота дискретизации меньше частоты обрабатываемого сигнала.
Через систему иерархических меню можно выбирать самые различные режимы работы, в основном соответствующие классическим режимам работы осциллографа: выбор режима синхронизации, выбор частоты развертки, усиления и смещения (в последнем случае желательно применять внешние электронные устройства). При этом есть возможность сохранить результаты измерения на диске либо распечатать осциллограммы или спектры на бумаге. Результаты могут быть также записаны в виде таблиц, экспортируемых в программы электронных таблиц, в текстовые редакторы или в графические пакеты.
Хотя анализатор спектра с полосой 2 кГц может вызвать улыбку у скептиков, анализатор, который входит в состав пакета PICOSCOPE, — совсем не игрушка, несмотря на его упрошенный алгоритм (для повышения быстродействия). Его точность легко оценить, проанализировав двухчастотные посылки DTMF, состоящие, как известно, из пар частот звукового диапазона и применяемые в телефонии для передачи цифр набираемого номера.
Понятно, что анализ сигналов с частотой 50 Гц не представляет проблем, а это открывает широкие возможности в изучении различных устройств, работающих от сети.
Вольтметр выполнен в виде цифрового табло, видимого с большого расстояния (например, с последней парты в классе). В версии DOS он снабжен также линейной шкалой. Это в некотором смысле аналог осциллографа с выключенной разверткой; постоянное напряжение отображается просто черточкой на экране, а переменная составляющая выглядит как полоса, ширина которой равна двойной амплитуде сигнала. Этого достаточно для анализа ограничений сигнала без осциллографических наблюдений.
Таким образом, в положении DC (постоянный ток) будет измерено среднее значение, а в положении АС (переменный ток) — среднеквадратичное (эффективное) значение напряжения, какова бы ни была форма входного сигнала. Подобных возможностей не могут предоставить многие обычные мультиметры.
Пакет PICOLOG
Регистратор на бумажной ленте (самописец) до сих пор широко применяется для визуализации медленных процессов с длительностью от нескольких секунд до нескольких часов, дней или даже месяцев. Но основной недостаток таких приборов состоит в их дороговизне (цена достигает нескольких тысяч долларов).
Пакет PICOLOG и один из аналого-цифровых преобразователей компании PICO Technology всего за несколько десятков долларов позволяют превратить любой ПК с принтером в виртуальный регистратор, способный выполнять не только функции обычного самописца, но и некоторые другие. Несомненно, это удачное решение, которое должно заинтересовать читателя.
Что касается медленных процессов, то пакет PICOSCOPE позволяет обеспечить максимальную длительность развертки 50 сек (5 сек/дел). Программа PICOLOG очень хорошо дополняет PICOSCOPE, имея частоты разверток от одного измерения в миллисекунду до одного измерения за N дней.
Пакет PICOLOG, выполняющий функции ленточного регистратора — это прежде всего программа сбора данных: она накапливает в определенном файле привязанные к текущему времени информационные данные, получаемые с заданной частотой опроса. Это могут быть результаты обработки нескольких последовательных измерений (эффекты применения фильтрации или усреднения). Именно из этих данных PICOLOG затем выводит один или несколько отчетов, которые могут быть представлены как в виде графиков, так и в виде цифровых таблиц.
Естественно, эти отчеты могут быть либо распечатаны на бумаге, либо экспортированы на дискету в самых разных форматах, а также просто выведены на экран (рис. 5.4), как с задержкой, так и в реальном масштабе времени, если интервал между отсчетами больше 50 мс.
Рис. 5.4. Результат вывода информации но экран при использовании пакета PICOLOC
Поскольку совершенно не обязательно задавать вид отчета перед началом измерений, есть возможность вывести любой вид отчета о любом наборе данных из тех, которые уже записаны на диске. При этом можно обойтись и без использования принтера. Измерения могут быть сделаны на портативном ПК или на старом ХT с процессором 8088, а затем обработаны на более мощном, но менее мобильном компьютере — надо просто скопировать и переслать файл!
Именно на этом этапе — этапе расшифровки результатов — можно воспользоваться широкими возможностями PICOLOG для обработки полученных данных: привязкой к шкале с использованием масштабного коэффициента, полиномиальным или даже табличным преобразованием, совмещением результатов нескольких измерительных каналов и др. В общем, это означает, что PICOLOG способен линеаризовать данные любого датчика, характеристики которого точно известны.
Естественно, можно выделить и распечатать или вывести на экран по отдельности все интересующие участки записи любого длительного процесса, так же, как если бы лента обычного регистратора разрезалась на куски для подробного изучения.
Для хранения информационных данных измерений и форм отчетов не нужны разные файлы. Каждому набору данных соответствует один файл в специальном формате PLR (Pico Log Run). Он содержит уже собранные данные, а характеристики выводимых отчетов добавляются в этот файл по мере их формирования. Надо также заметить, что одинаково легко вывести сделанный отчет повторно, определить вид нового отчета для того же набора данных или же изменить вид сделанного отчета. Это очень удобно, но немного опасно, так как в подобном случае есть риск потерять не столько сами данные, сколько формы и настройки, копии которых может и не сохраниться. Поэтому следует постоянно пользоваться многочисленными способами копирования и сохранения, которые имеет программа в своем меню «управление файлами», и по возможности всегда работать с копией. Это обязательно должно войти в привычку, если еще не вошло.
Правильное применение пакета PICOLOG подразумевает последовательное выполнение большого количества этапов, причем в определенном порядке, начиная с вызова множества меню. Некоторая сложность прохождения этих этапов — плата за огромные возможности программы. Очень важно разобраться в принципах работы PICOLOG, иначе можно попасть в «замкнутый круг» и вообще не добиться желаемого.
Прежде всего, надо выполнить инсталляцию программы с дискеты, следуя приведенным указаниям, которые могут различаться в зависимости от версии.
Помимо пакетов PICOSCOPE, PICOLOG и конфигурационных файлов, создаваемых в процессе инсталляции, есть еще файлы драйверов, необходимых для вывода информации на принтер или для экспорта в различные офисные программы. Файлы из стандартной поставки работают с большинством современных принтеров, а если желательно выводить информацию в форматах BMP или PCX (для Windows), PostScript, TIF и т. п., то надо «изготовить» специальный драйвер при помощи утилиты, продаваемой отдельно.
Надо отметить, что драйверы были написаны не самой компанией PICO Technology, а компанией, специализирующейся в данной области — Fleming Software. Именно поэтому программа выдает графические изображения очень высокого качества. Тем не менее не рекомендуется постоянно использовать опцию «высокое разрешение» при печати на матричных принтерах. На старых ПК в этом случае иногда может потребоваться до получаса времени для распечатки одной страницы; кроме того, улучшение изображения достигается в ущерб точности построения кривой (эффект «сглаживания»).
Помимо настройки параметров печати со всеми опциями по форматам, ориентации и разрешению, процедура инсталляции позволяет определить тип применяемого АЦП и порт, к которому он будет подключен. Понятно, что если АЦП подключен к параллельному порту, то последний уже нельзя использовать для подключения принтера. Есть два варианта решения этой проблемы: зарезервировать за АЦП второй принтерный порт (LPT2) или выводить данные для печати в файл, создаваемый на диске. Потом этот файл можно вывести на принтер. При этом надо учитывать, что объем файла будет очень велик, — гораздо больше, чем объем файла с результатами измерений.
Перед тем как перейти к практическому использованию виртуального регистратора, будет полезно с помощью опции вывода числовых величин («показать напряжение АЦП») проверить правильность измерения напряжения АЦП в диапазоне от 0 до 5 В, подаваемого на его вход. Если возникают какие-либо ошибки, следует убедиться в правильности всех соединений, а также проверить, нет ли аппаратных конфликтов между ПК и АЦП (если они есть, то такие же конфликты появятся и при использовании программы PICOSCOPE).
В принципе подобные проблемы возникают только при использовании портативных ПК, в которых для снижения энергопотребления применены нестандартные решения в схеме порта.
Прежде чем начать сеанс измерений и приступить к обработке результатов при создании отчета, необходимо проделать множество операций. К счастью, необязательно каждый раз проделывать все эти операции с нуля, так как предусмотрена простая процедура для перезапуска любого проведенного ранее сеанса. Надо просто присвоить новое имя файлу, чтобы не повредить старый файл при вводе новых данных.
Пользователю рекомендуется заранее подготовить несколько так называемых калибровочных таблиц, соответствующих текущим задачам. Впоследствии таблицы можно будет использовать по мере надобности.
В табл. 5.1 приведены некоторые примеры. Они показывают, как записывать на бумаге во временном масштабе значение напряжения, изменяющегося от 0 до 5 В или же приведенного к этому диапазону внешним устройством нормирования входного сигнала.
Таблица 5.1. Пример калибровочной таблицы
В первом примере значения регистрируются каждую миллисекунду (это самая высокая скорость регистрации) сто раз подряд. Каждая цифра представляет результат вычисления среднего значения по трем соседним выборкам, из расчета «одно измерение за каждые 100 мксек». Таким образом, вычисление значения для регистрации практически выполняется за 300 мксек.
Надо отметить, что такой режим соответствует предельным возможностям АЦП ADC 10. Прямоугольный сигнал с частотой 100 Гц, обработанный с помощью процессора 386SX25, будет выведен с заметно заваленными фронтами. А со старым ПК на процессоре 8086/8 МГц или 8088/4,77 МГц нежелательно превышать даже частоту 10 Гц. Но какой бы ПК ни использовался, гарантированы отличные результаты для любого входного сигнала с частотой, меньшей или равной 1 Гц. Таким образом, обеспечено согласование с возможностями программы PICOSCOPE.
Во втором примере также регистрируется одно значение за одну миллисекунду, но тысячу раз подряд, т. е. в течение одной секунды.
Третий пример иллюстрирует измерение, проводимое в течение одной минуты, со скоростью одно значение за 10 мсек. Эта скорость выборки достаточно высока для того, чтобы можно было выводить отчет на экран непосредственно во время регистрации. В этом случае на экран будет выдано сообщение о том, что идет процесс регистрации.
В четвертом примере регистрируется 14400 значений в час со скоростью одно значение за 250 мсек (т. е. 4 значения в секунду), но каждый раз вычисляется среднее арифметическое по десяти измерениям вместо трех. Это позволяет лучше отфильтровать возможные помехи, способные исказить вид кривой. Такая скорость сбора данных позволяет выводить отчет на экран в течение всего периода измерений и даже изменять параметры процесса прямо во время работы.
Верхняя часть таблицы («Параметры сбора данных» и «Параметры канала») соответствует тем настройкам, которые необходимо провести до начала работы. Все остальные этапы относятся к обработке результатов, а значит, их установка может быть проведена по окончании процесса измерений. Можно задать вид отчетов и в самом начале, если заранее известно, какой результат надо получить. Естественно, это необходимо сделать и при выводе отчета непосредственно в процессе измерений.
Надо четко представлять, что на этапе сбора информации в файл записываются «сырые» данные, не имеющие размерности. Это просто двоичные числа, например, в интервале от 0 до 255 при использовании 8-разрядного АЦП ADC 10. Этот поток данных называется «каналом», и ему должно быть присвоено имя. В приведенных примерах выбрано имя «ADC10». Разумеется, несколько каналов могут существовать одновременно — например, при работе с многоканальным АЦП, таким как ADC 11.
Среди всех видов отчетов, которые программа PICOLOG может извлекать из «сырых» данных, записанных в файле, самым употребимым будет, без сомнения, кривая изменения параметра в зависимости от времени (т. е. то, что выдает обычный ленточный регистратор). Именно такой отчет приведен в табл. 5.1.
Хотя вертикальную ось шкалы можно градуировать в двоичных кодах АЦП, гораздо более интересно провести их преобразование в единицы, соответствующие реальным величинам (например, напряжение от 0 до +5 В). Значит, надо определить имя параметра (здесь: «Напряжение») и указать программе математическую зависимость, связывающую информационные данные в «канале» и сам параметр. В данном случае это очень просто: зависимость линейная, смещение отсутствует (нулевой код на выходе АЦП соответствует О В на входе), а коэффициент преобразования составляет 5 В на 255 МЗР, или 0,01961 В/МЗР. После этого надо определить представление кривой «Y = F(t)» (рис. 5.5), но можно также запросить и табличное представление, образец которого приведен на рис. 5.6.
Рис 5.5. Пример графического отчета
Рис. 5.6. Пример отчета в виде таблицы
Сначала можно присвоить графику имя, которое будет отражено на бумаге в виде заголовка; впрочем, это необязательно. Затем надо градуировать оси, соблюдая размерности и единицы, выбранные на предыдущих этапах. По оси X, например, следует обеспечить максимальное значение 60000, если требуется произвести запись в течение одной минуты, с временной шкалой, проградуированной в миллисекундах (неважно, с каким интервалом проводились измерения — каждые десять или сто миллисекунд). По оси Y градуирование провести проще — достаточно объявить максимальное значение параметра, соответствующее полной шкале АЦП.
Позволительно также выводить в отчете информацию лишь о части измеряемого интервала, указав параметры «X мин.» и «X макс.», ограничивающие интересующий участок. Теоретически возможно сделать то же самое и для величин, откладываемых по оси Y, но тогда ухудшается разрешение. Поэтому лучше предварительно масштабировать сигнал, если его уровень не достигает величины +5 В. После вывода на экран и, возможно, после коррекции того или иного параметра вывода можно произвести распечатку полученных отчетов. Несколько примеров, приведенных здесь, дают представление о точности и четкости, которые достигаются даже на простом принтере с девятью иголками и с 8-разрядным АЦП.
Рис. 5.7 представляет пример распечатки в режиме низкого разрешения и альбомной ориентации, а рис. 5.8 — пример распечатки в режиме высокого разрешения и книжной ориентации.
Рис. 5.7. Распечатка с низким разрешением
Рис. 5.8. Распечатка с высоким разрешением
Приведенная на графиках экспонента отображает процесс разряда конденсатора емкостью 10 мкФ, заряженного до напряжения 5 В, через резистор сопротивлением 1 МОм.
Другой интересный случай — обработка файла, содержащего числовые значения, специализированными программами для получения высококачественной графики. Это могут быть как распространенные пакеты деловой графики, так и пакеты, предназначенные для научных исследований. Так, график, изображенный на рис. 5.9, был построен при помощи программы SigmaPlot, разработанной компанией SPSS Science, с использованием короткой записи сигнала, полученного от функционального генератора.
Рис. 5.9. Результат обработки данных специализированной программой
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЧАСТНОГО ПРИМЕНЕНИЯ
Этот раздел можно назвать главным во всей книге: именно в нем рассказывается, как решать практически любые задачи, связанные со сбором данных при низких частотах дискретизации. Модульная структура нижеприведенных программ на языке BASIC или языке TurboPASCAL позволяет адаптировать их к новым задачам, изменяя лишь несколько строк.
На рис. 5.10 представлена структура, по которой будут строиться готовые к работе приложения.
Рис. 5.10. Общая структура прикладных программ, рассматриваемых в книге
В начале программы находится драйвер, соответствующий выбранному АЦП — либо готовому, либо собранному самостоятельно по описанию, которое приведено в этой книге. Каждый драйвер был написан в соответствии со спецификациями, представленными изготовителями используемых компонентов, причем особое внимание уделялось временным диаграммам протоколов связи. Драйверы можно рассматривать как ПО, поставляемое «под ключ», но допустимо также модифицировать в самых разных целях.
Первый блок каждого драйвера (строки 10–90) проводит инициализацию последовательного или параллельного порта, используемого для связи, и обеспечивает подачу напряжения питания на подключенный к нему АЦП. Блок заканчивается командой GOTO 200, передающей управление собственно прикладной программе (строки 200–290). Эта программа универсальна, она зависит только от выполняемой задачи, но ни в коей мере — от применяемого АЦП. Поэтому заменить драйвер при смене АЦП (например, при переходе от 8-разрядного к 12-разрядному) очень просто.
Прикладная программа может сама обращаться ко второму блоку драйвера (строки 100–190) настолько часто, насколько требуется. Эта часть драйвера отвечает за выполнение одного — и только одного — аналого-цифрового преобразования и за размещение результата (величины напряжения в диапазоне от 0 до 5 В) в переменной D. Только прикладная программа определяет, с какой скоростью будут проводиться преобразования, надо ли комбинировать полученные значения перед выводом результата и каков будет способ обработки результата (цифровое табло, построение кривой, запись на диск, включение сигнала и т. п.).
Если не хватит места между строками 200 и 290 программы, можно поместить оператор GOTO в строке 290, что позволит продолжать работу, например, со строки 2000. Еще одна зарезервированная область, начиная со строки 300, предназначена для операторов вывода графики. Блок между строками 300 и 490 отведен для операторов инициализации экрана (выбор графического режима, построение координатной сетки, определение цветов и т. п.) Процедура вывода результатов на экран начинается со строки 500. Именно прикладная программа (строки 200–290) будет в нужный момент вызывать графическую подпрограмму командой GOSUB 500.
Очевидно, что понадобится использовать графические процедуры, предназначенные для каждого из экранных режимов (CGA, VGA и т. п.), хотя режим CGA, например, без проблем (и даже с некоторыми преимуществами) поддерживается всеми современными графическими платами.
Драйверы для 8-разрядных АЦП
На сервере содержатся драйверы для четырех 8-разрядных АЦП:
• АЦП АDС 10 компании PICO Technology;
• версия АЦП на базе TLC 549 (рис. 4.1, 4.3);
• версия АЦП на базе МАХ 1243 (рис. 4.6);
• версия АЦП на базе TLC 549 (рис. 4.13, 4.14).
Заметим, что хотя АЦП ADC 10 и собран на базе TLC 549, он требует особого драйвера, так как подключается к параллельному порту. Вполне логично, что версия драйвера для ADC 10 на языке BASIC называется ADC10.BAS.
10 REM — ADC 10 —
20 KEY OFF: CLS
30 B=&H378: REM LPT1:
40 N=8: REM число разрядов
50 OUT В, 2
60 FOR T=0 TO 100: NEXT T
70 OUT B,254
80 FOR T=0 TO 500: NEXT T
90 GOTO 200
100 OUT B,252: D=0: REM получение данных
110 FOR F=0 TO N-1
120 OUT B,253
130 E=INP(B+1) AND 128
140 OUT B,252
150 IF E=0 THEN D=D+2 ^ (N-1-F)
160 NEXT F
170 D=5*D/(2^N-1)
180 OUT B,2: RETURN
190 REM (c) 1997 Patrick GUEULLE
Шестнадцатеричная величина 378 в строке 30 предполагает, что ADC 10 подключен к параллельному порту LPT1. Чтобы подключить ADC 10 к порту LPT2 (если таковой имеется), надо заменить эту величину на 278 или на любую другую величину, соответствующую установкам BIOS используемого компьютера.
Разработана также версия на языке TurboPASCAL, которая пригодится, если нужна более высокая частота дискретизации.
Исходный текст ADC10.PAS представляет собой не просто драйвер. В качестве примера он содержит небольшую прикладную программу вывода на экран результатов двадцати последовательных измерений, проводимых с интервалом в 500 мсек.
program adc10;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$378; n:=8;
port [b]:=2;
delay(100);
port [b]:=254;
delay(500);
end;
procedure acquisition;
begin
port[b]:=252; d:=0;
for f:=0 to n-1 do
begin
delay(2); port[b]:=253;
e:=port[b+1]: and 128;
port[b]:=252;
if e=0 then d:=d+exp((n-1-f) *ln(2));
end;
d:=(5*d)/(exp((n)*In(2))-1);
port[b]:=2;
end;
procedure affiche;
begin
acquisition;
d:=(int(100*d))/100;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Устройство на базе МАХ 1243 также требует особого драйвера, версия которого на языке BASIC называется MAXIM8.BAS. Он определяет 8-разрядный режим работы для данного компонента, вообще-то представляющего собой 10-разрядное устройство.
10 REM — MAXIM8 —
20 KEY OFF: CLS
30 B=&H3F8: REM COM1:
40 N=8: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
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
190 REM (c) 1997 Patrick GUEULLE
Шестнадцатеричная величина 3F8 в строке 30 предполагает, что устройство подключено к последовательному порту СОМ1. Чтобы иметь возможность использовать COM2 вместо СОМ1, надо заменить эту величину на 2F8, а при использовании COM3 или COM4 рекомендуется предварительно проверить установки BIOS по экрану настройки SETUP, выводимому на дисплей при включении ПК.
Версия на языке TurboPASCAL называется MAXIM8.PAS и также включает небольшую прикладную часть, выводящую на экран результаты двадцати измерений.
program maxim.8;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$3F8; n:=8;
port[b+4]:=1;
delay(100);
port[b+3]:=64
delay(500);
end;
procedure acquisition;
begin
port[b+4]:=0; d:=0;
port[b+4]:=2;port[b+4]:=2;
port[b+4]:=2;port[b+4]:=0;
for f: =0 to n-1 do
begin
port[b+4]:=2;
e:=port[b+6] and 16;
port[b+4]:=0;
if e=16 then d:=d+exp((n-1-f)*ln(2))
end;
d: = (5*d)/(exp((n)*ln(2)) -1);
port[b+4]:=1;
end;
procedure affiche;
begin
acquisition;
d: = (int(100*d))/100;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Драйвер на языке BASIC, предназначенный для устройств на базе TLC 549 (рис. 4.1 и 4.13), называется 8BITS.BAS. Он также предназначен для работы с последовательным портом СОМ 1 (3F8h).
10 REM — 8BITS —
20 KEY OFF: CLS
30 B=&H3F8: REM COM1:
40 N=8: 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
90 GOTO 200
100 OUT B+4,0: D=0: REM ACQUISITION
110 FOR F=0 TO N-1
120 OUT B+4,2
… В OCR-файле отсутствуют стр. 80, 81…
b:=$3F8; n:=10;
port[b+4]:=1;
delay(100);
port[b+3]:=64;
delay(500);
end;
procedure acquisition;
begin
port[b+4]:=0; d:=0;
for f:=0 to n-1 do
begin
port[b+4]:=2;
e:=port[b+6] and 16;
port [b+4]: =0;
if e=16 then d:=d+exp((n-1-f)*ln(2));
end;
d:=(5*d)/(exp((n)*ln(2))-1);
end;
procedure affiche;
begin
acquisition;
d:=(int(100*d))/100;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Устройство на базе МАХ 1243 требует особого драйвера MAXIM10.BAS и также предназначено для работы с последовательным портом СОМ1 (3F8h).
10 REM — MAXIM10 —
20 KEY OFF: CLS
30 B=&H3F8: REM COM1:
40 N=10: 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
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
190 REM (c) 1997 Patrick GUEULLE
Его версия на языке TurboPASCAL называется MAXIM 10.PAS.
program dixbits;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$3F8; n:=10;
port[b+4]:=1;
delay(100);
port[b+3]:=64;
delay(500);
end;
procedure acquisition;
begin
port[b+4]:=0; d:=0;
for f:=0 to n-1 do
begin
port[b+4]:=2;
e:=port[b+6] and 16;
port[b+4]:=0;
if e=16 then d:=d+exp((n-1-f)*ln(2));
end;
d:=(5*d)/(exp((n)*ln(2))-1);
end;
procedure affiche;
begin
acquisition;
d:=(int(100*d))/100;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Драйверы для 12-разрядных АЦП
На сервере содержатся драйверы для четырех 12-разрядных АЦП:
• АЦП ADC 12 компании PICO Technology;
• версия АЦП на базе LTC 1286 или ADS1286 (рис. 4.1,4.3);
• версия АЦП на базе МАХ 1241 (рис. 4.6);
• версия АЦП на базе LTC 1286 или ADS1286 (рис. 4.13,4.14).
Так как АЦП ADC12 собран на базе LTC 1292, он требует тактовой частоты не менее 100 кГц. В силу этого обстоятельства драйверы ADC12.BAS и даже ADC12.PAS следует с большой осторожностью использовать на старых и медленных ПК, поскольку в таком случае не всегда удается добиться результатов, которые может обеспечить АЦП ADC 10 при тех же условиях. Самая нежелательная ситуация возникает при исполнении программы в окне Windows, что еще больше замедляет работу по сравнению с выполнением непосредственно в DOS.
Иначе говоря, АЦП ADC 12 будет работать с полной отдачей только со своим программным обеспечением PICOSCOPE и PICO LOG, причем под DOS лучше, чем под Windows.
10 REM — ADC12 —
20 KEY OFF: CLS
30 B=&H378: REM LPT1:
40 N=12: REM число разрядов
50 OUT B,1
60 FOR T=0 TO 100: NEXT T
70 OUT B,254
80 FOR T=0 TO 500: NEXT T
90 GOTO 200
100 OUT B,252: D=0: REM ACQUISITION
105 OUT B,254: OUT B,252
106 OUT B,254: OUT B,252
110 FOR F=0 TO N-1
120 OUT B,254
130 E=INP(B+1) AND 128
140 OUT B,252
150 IF E=0 THEN D=D+2^(N-1-F)
160 NEXT F
170 D=5*D/(2^N-1)
180 OUT B,253: RETURN
190 REM (c) 1997 Patrick GUEULLE
program adc12;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$378; n:=12;
port[b]:=1;
delay(100);
port[b]:=254;
delay(500);
end;
procedure acquisition;
begin
port[b]:=0; d:=0;
port[b]:=254; port[b]:=252;
port[b]:=254; port[b]:=252;
for f:=0 to n-1 do
begin
port[b]:=254;
e:=port[b+1] and 128;
port[b];=252;
if e=0 then d;=d+exp((n-1-f)*ln(2));
end;
d;=(5*d)/(exp((n)*ln(2))-1);
port[b]:=253;
end;
procedure affiche;
begin
acquisition;
d:=(int(100*d))/100;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Описанные в книге устройства, работающие через последовательный порт (рис. 4.3 и 4.6), не имеют такого ограничения и могут наилучшим образом использовать точность примененных в них высококачественных АЦП. Только версия с оптоизоляцией (рис. 4.13, 4.14) потребует определенной аккуратности, так как использование оптронов слегка ухудшает характеристики устройства в 12-разрядном режиме.
Из сказанного можно сделать вывод, что с АЦП LTC 1286 или ADS 1286 будут работать программы 12-BITS.BAS и 12-BITS.PAS, c учетом того, что для связи с ПК используется последовательный порт СОМ1 (адрес 3F8h в строке 30).
10 REM — 12BITS —
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 TOR T=0 TO 500: NEXT T
90 GOTO 200
100 OUT B+4,0: D=0: REM ACQUISITION
102 OUT B+4,2: OUT B+4,0
103 OUT B+4,2: OUT B+4,0
104 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
190 REM (c) 1997 Patrick GUEULLE
program douzebits;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$3F8; n:=12;
port[b+4]:=1;
delay(100);
port[b+3]:=64;
delay(500);
end;
procedure acquisition;
begin
port[b+4]:=0; d:=0;
port[b+4]:=2; port[b+4]:=2;
port[b+4]:=2; port[b+4]:=0;
port[b+4]:=2; port[b+4]:=2;
port(b+4):=2; port[b+4]:=0;
port(b+4):=2; port[b+4]:=2;
port[b+4]:=2; port[b+4]:=0;
for f: = 0 to n-1 do
begin
port[b+4]:=2;
e:=port[b+6] and 16;
port[b+4]:=0;
if e=16 then d:=d+exp((n-1-f)*ln(2));
end;
d:=(5*d)/(exp((n)*ln(2))-1);
port[b+4]:=1;
end;
procedure affiche;
begin
acquisition;
d:=(int(1000*d))/1000;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g: =1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
С АЦП МАХ 1241 (рис. 4.6) будут работать программы MAXIM12.BAS на языке BASIC и MAXIM12.PAS на языке TurboPASCAL.
10 НЕМ — MAXIM12 —
20 KEY OFF: CLS
30 B=&H3F8: REM COM1:
40 N= 12: RЕМ число разрядов
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
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
190 REM (c) 1997 Patrick GUEULLE
program maxim12;
uses crt;
var n,f,e: byte;
b,g: integer;
d: real;
procedure init;
begin
b:=$3F8; n:=12;
port[b+4]:=1;
delay(100);
port[b+3]:=64;
delay(500);
end;
procedure acquisition;
begin
port[b+4]:=0; d:=0;
port[b+4]:=2; port[b+4]:=2;
port[b+4]:=2; port[b+4]:=0;
for f:=0 to n-1 do
begin
port[b+4]:=2;
e:=port[b+6] and 16;
port[b+4]:=0;
if e=16 then d:=d+exp((n-1-f)*ln(2))
end;
d:=(5*d)/(exp((n)*ln(2))—1);
port[b+4]:=1;
end;
procedure affiche;
begin
acquisition;
d:=(int(1000*d))/1000;
writeln(d);
delay(500);
end;
begin
clrscr;
init;
for g:=1 to 20 do
begin
affiche;
end;
end.
(* COPYRIGHT 1997 Patrick GUEULLE *)
Прикладные программы
Здесь будет продемонстрировано, как добавление нескольких строк программы к вышеописанным драйверам приносит полезные практические результаты. Читатели должны будут самостоятельно вносить требуемые изменения (часто минимальные), которые определяются конкретными задачами пользователя. В любом случае объединение соответствующего драйвера и прикладной программы выполняется по команде MERGE (в языке BASIC).
Для использования программы VOLTS.BAS совместно с АЦП ADC 10, например, на языке GWBASIC или эквивалентном надо написать следующие строки:
load "ADC10" (загрузка драйвера);
затем
MERGE "VOLTS" (добавление прикладной программы).
По команде RUN запускается полученная программа, которую можно сохранить целиком по команде:
SAVE "ИМЯ", А (если желательно сохранить файл в текстовом формате);
или просто:
SAVE "ИМЯ" (если желательно сохранить его в наиболее компактном виде).
Будет целесообразно произвести полную компиляцию составленной программы, а также и программы на языке TurboPASCAL, в файл ИМЯ.EXE, исполняемый непосредственно под DOS или Windows. Для этого надо иметь в распоряжении какой-нибудь компилятор, например, Turbo BASIC или Quick BASIC.
Цифровой вольтметр
Очень короткая программа VOLTS.BAS прекрасно подходит для первых шагов в изучении только что собранного или купленного АЦП, но она также пригодна и для более общих задач.
200 REM VOLTS
210 GOSUB 100
220 D=INT(100*D)/100
230 LOCATE 1,1
240 PRINT USING "##.##"; D
250 GOTO 210
260 REM (c) 1997 Patrick GUEULLE
Программа выводит в верхнем левом углу экрана величину напряжения (в вольтах), поданного на вход модуля преобразователя. Эта величина подвергается простейшей обработке, поэтому данная программа — одна из самых быстродействующих в «библиотеке», даже при использовании очень медленных ПК.
Применение команды LOCATE, каждый раз возвращающей курсор в верхний левый угол экрана, приводит к замещению старого значения новым. При этом индикация постоянно обновляется со скоростью, равной частоте взятия выборок, т. е. совершенно так же, как в классическом цифровом вольтметре.
Надо обратить внимание на способ, посредством которого измеренная величина округляется до двух знаков после запятой (строка 220), а потом выводится в жестком формате, наиболее соответствующем выбранной точности (строка 240). Подобное решение будет часто использоваться и в дальнейшем.
Эта программа рассчитана на работу совместно с 8- или 10-разрядным АЦП (точность 1 %), но ее можно оптимизировать и для работы с 12-раз рядным АЦП, исправив строки 220 и 240 следующим образом и обеспечив при этом три индицируемых знака после запятой (т. е. точность 0,1 %):
220 D=INT(1000*D)/1000
240 PRINT USING "##.###"; D
Не стоит также упускать из виду, что драйвер не выполняет никаких округлений, полностью соблюдая точность преобразователя. Только прикладная программа в соответствии с поставленной задачей должна так или иначе использовать получаемую точность, и не более того. Вывод трех знаков после запятой для 8-разрядного АЦП будет излишним, так как третий знак при этом не несет никакого смысла.
200 REM — BARRE —
210 LOCATE 6,1
220 FOR H=1 TO 5
230 PRINT "I….!..";
240 NEXT H
250 PRINT " I "
260 LOCATE 7,1
270 PRINT "0___1___2___"
280 PRINT "3___4___5"
290 GOSUB 100
300 D=INT(10*D)
310 LOCATE 5,1
320 PRINT SPC (D);" I";
330 PRINT SPC (50-D)
340 GOTO 290
350 REM (c) 1997 Patrick GUEULLE
Программа BARRE.BAS, в свою очередь, показывает, как легко можно организовать вывод аналоговой штриховой шкалы.
Эта форма представления результата, менее точная, чем цифровая индикация, гораздо более удобна, когда требуется лишь оценить направление и скорость изменений или отклонений измеряемой величины, например, при ручной регулировке или настройке. В приведенном примере шкала построена на базе 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
Это добавление было сделано в программе MINMAX.BAS; также в нее были включены операторы вывода трех значений времени (в часах, минутах и секундах):
• время текущего измерения;
• время регистрации максимума;
• время регистрации минимума.
Надо отметить, что мультиметр редко дает подобные возможности, столь легко реализованные в виртуальном приборе.
Регистратор длительных процессов
В этом разделе будет рассказано о том, как за несколько десятков долларов достичь результатов, обычно возможных только при использовании ленточных или магнитных регистраторов — приборов, стоящих в сотни раз дороже! Вместо того чтобы чертить на бумаге кривую в реальном масштабе времени, что технически трудновыполнимо, гораздо проще накапливать данные в файле на диске, а уже потом обрабатывать их.
Программа сбора данных (FICHIER.BAS), которую, конечно же, надо дополнить драйвером используемого АЦП при помощи команды MERGE, исключительно проста.
200 REM — FICHIER —
210 GOSUB 100
220 OPEN "dat.dat" FOR OUTPUT AS #1
230 PRINT "Идут измерения… "
240 FOR G=0 TO 639
250 GOSUB 100
260 PRINT# 1, D
270 FOR T=0 TO 2000: NEXT T
280 NEXT G: CLOSE# 1
290 REM (c) 1997 Patrick GUEULLE
В оригинальной версии эта программа создает файл DAT.DAT, содержащий 640 выборок, которые производятся с частотой дискретизации, определяемой в строке 270 (простая задержка). Конечно, число 2000 используется лишь при первых попытках, а потом надо будет подобрать эту величину в соответствии со скоростью используемого ПК и конкретной задачей.
В самых сложных случаях можно, по примеру SECONDE.BAS и MINUTE.BAS, использовать переменную TIME$ для улучшения точности и значительного снижения частоты дискретизации.
Число 640, в свою очередь, соответствует числу точек по горизонтали обычного графического экрана, что позволяет вывести график кривой непосредственно на экран, перед тем как скопировать его на бумагу, если это необходимо.
Графопостроитель
Вывод информации на экран осуществляет программа CGAVISU.BAS или VGAVISU.BAS. Вторая из них применяется, если желательно воспользоваться большим разрешением, соответствующим экранам VGA.
500 REM — CGAVISU —
510 OPEN "dat.dat" FOR INPUT AS #1
520 INPUT#1,Y: Y=199-INT(Y*199/5)
530 PSET(0,Y)
540 FOR X=1 TO 639
550 INPUT#1,Y: Y=199-INT(Y*199/5)
560 LINE — (X, Y)
570 NEXT X
580 CLOSE
590 REM (c) 1997 Patrick GUEULLE
500 REM — VGAVISU —
510 OPEN "dat.dat" FOR INPUT AS #1
520 INPUT#1,Y: Y=349-INT(Y*349/5)
530 PSET(0,Y)
540 FOR X=1 TO 639
550 INPUT#1,Y: Y=349-INT(Y*349/5)
560 LINE — (X, Y)
570 NEXT X
580 CLOSE
590 REM (c) 1997 Patrick GUEULLE
Очевидно, каждую из программ надо объединить с экранным драйвером CGA.BAS или VGA.BAS, соответствующим используемому оборудованию.
300 REM — CGA —
310 SCREEN 2
320 KEY OFF: CLS
330 LINE(0,0)-(0,199)
340 FOR Y=0 TO 199 STEP 20
350 LINE(0,Y)-(639,Y),&HCCCC
360 NEXT Y
370 FOR X=0 TO 639 STEP 32
380 LINE(X,0)-(X,199),&HCCCC
390 NEXT X
400 LINE(639,0)-(639,199)
410 LINE(0,199)-(639,199),&HCCCC
420 REM (c) 1997 Patrick GUEULLE
300 REM VGA
310 SCREEN 9
320 KEY OFF: CLS
330 LINE(0,0)-(0,349)
340 FOR Y=0 TO 349 STEP 35
350 LINE(0,Y)-(639,Y),&HCCCC
360 NEXT Y
370 FOR X=0 TO 639 STEP 32
380 LINE(X,0)-(X,349),&HCCCC
390 NEXT X
400 LINE(639,0)-(639,349)
410 LINE(0,349)-(639,349),&HCCCC
420 REM (c) 1997 Patrick GUEULLE
Это объединение можно сделать следующим образом:
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
Программа BICOURBE.BAS не должна рассматриваться только как иллюстрация того, что можно получить при комбинировании программных модулей, приведенных в данной книге. Это образец подхода, называемого англоговорящими программистами quick and dirty («быстро и грязно»), т. е. здесь отсутствует всякое стремление к структурированию и четкости. Программа работает, и это главное!
В частности, неоднократно применялась функция RENUM языка BASIC для переопределения в разных местах той или другой подпрограммы.
В том виде, в каком она приведена, программа управляет сразу двумя 12-разрядными АЦП — одним на базе МАХ 1241 и другим на базе LTC 1286. Для каждого из них определен один из каналов двухлучевого осциллографа (рис 5.14), в котором разные цвета лучей позволяют без проблем отличать один АЦП от другого.
Действительно, язык BASIC легко позволяет задавать атрибуты, определяющие цвет того или иного графического элемента, лишь бы его поддерживал графический экран. Ниже приведены коды цветов.
0 черный
1 синий
2 зеленый
3 голубой
4 красный
5 пурпурный
6 коричневый
7 белый (цвет по умолчанию)
8 серый
9 светло-синий
10 светло-зеленый
11 светло-голубой
12 светло-красный
13 светло-пурпурный
14 желтый
15 ярко-белый
Рис. 5.14. Пример работы виртуального двухлучевого осциллографа