Обработчик прерывания: несколько точек входа или флаги?
В программе обработчика прерываний мы предусмотрели несколько входных точек, по одной на каждое возможное состояние прибора (бездействие, ожидание сигнала запуска, начало развертки, накопление данных). Поскольку обработчик прерываний не является вызываемой подпрограммой, и вход в него осуществляется по вектору, программа при каждом изменении состояния изменяет и точку входа, загружая ее адрес в ячейки вектора (в начале памяти). Очевидно, что вместо этого можно иметь в обработчике одну точку входа, а для передачи управления на требуемый программный блок предусмотреть строки анализа флага. В этом случае программа передает обработчику информацию о требуемых действиях путем изменения состояния программного флага (вместо того, чтобы настраивать вектор прерываний). Такой метод отличается простотой, однако программа выполняется медленнее, поскольку при каждом входе в обработчик осуществляются проверки и переходы. Разница, впрочем, не так уж велика, и вы вполне можете изменять функцию драйвера с помощью флагов, если этот способ вам нравится больше.Последовательный порт: дамп данных и управление ведомым.
Как уже отмечалось вЕсли предположить, что связь с другим компьютером осуществляется через последовательный порт, имеет смысл использовать этот порт и в качестве альтернативной управляющей панели, чтобы внешний компьютер мог настраивать параметры и запускать накопление данных. Для этого специальная программа анализа должна «отлавливать» определенные байты, которые компьютер посылает в усреднитель, чтобы получить управление. С помощью дополнительных байтов определяются сами параметры (ширина канала, число разверток и др.), причем диапазоны изменения параметров не ограничиваются количеством фиксированных положений переключателей, как это имеет место в нашем приборе с управляющей панелью. Разумеется, надо предусмотреть программное обеспечение, переключающее прибор на управление от управляющей панели, если из компьютера не поступает запрос на управление. Это позволит нам и на земле погулять, и в рай попасть: простота настройки с помощью ручек на передней панели будет сочетаться с гибкостью компьютерного управления.
Чтение органов управления с плавной регулировкой.
В описываемом микропроцессорном приборе нам удалось избежать сложностей, присущих органам управления с плавной регулировкой, так как мы использовали более простые устройства - переключатели, каждый из которых связан с одним из битов параллельного порта. Нежелание разработчиков усложнять себе жизнь привело к появлению неоправданной тенденции полного отказа от органов плавной регулировки, которые заменяются (например, в генераторе с микропроцессорным управлением) парами кнопок «вверх» и «вниз». Возможно, вы, как и мы, испытываете ностальгическое желание плавно покрутить ручки. Наш усреднитель сильно выиграл бы при наличии ручки, позволяющей выбрать определенный канал и вывести на экран его адрес и число отсчетов в нем.Простейший способ организации плавного управления в микропроцессорном приборе заключается в использовании АЦП, преобразующего напряжение от переменного резистора, укрепленного на передней панели и подключенного между напряжением +5 вольт (или другим, более удобным) и землей. В продаже имеются небольшие дешевые микросхемы 8-битных АЦП, скомпонованных с 8-битными мультиплексорами и дискретизаторами с памятью; обычно у вас остается несколько свободных входов, которые можно использовать для чтения нескольких органов управления на передней панели. Можно даже с помощью АЦП прочитать состояние «-позиционного поворотного переключателя — достаточно подключить его выводы к цепочке из
Если вам нужно иметь лучшее разрешение, чем обеспечивает простой 8-битный АЦП, подумайте о многооборотном кодировщике. Он укрепляется на передней панели и имеет размер не больше обычного переменного резистора. Кодировщик содержит пару оптических прерывателей, формирующих, по мере вращения ручки, импульсы, сдвинутые по фазе на 90°. Сдвиг импульсов по фазе дает возможность определить, в каком направлении поворачивается ручка (см. рис. 8.97). В отличие от обычного переменного резистора, многооборотный кодировщик не имеет фиксатора, что и позволяет поворачивать его ось на много оборотов. Типичный узел такого рода серии Bourns EN формирует 256 импульсов на один оборот.