Искусство схемотехники. Том 3 (Изд.4-е) - Хоровиц Пауль (бесплатная регистрация книга .TXT) 📗
Мы привели эту скороспелую программу только для того, чтобы показать, как просто она может выглядеть. Не перенимайте наш стиль-многое мы сделали грубо, экономя место и не желая вдаваться в пояснения. В более совершенной программе мы могли повысить «интеллектуальный уровень» таймера, например, заставив один из портов АЦП фиксировать момент закипания воды; именно в этот момент следовало начать отсчет времени кипячения яйца, а можно было ради экономики электроэнергии еще и выключить кипятильник! Естественно также предусмотреть ввод, с помощью кнопки NMI, времени пробуждения, длительности кипячения и т. д. Порт ЦАП можно использовать для индикации времени, возможно, в виде «живых цифр», в то время как другой порт ЦАП (подключенный к динамику в подушке) мягко будит вас, тихо рассказывая что-то задушевное под аккомпанемент записанной в память мелодии…, но мы отклонились от темы. Ну что же, пора нырять!
11.06. Программирование: определение задачи
Самый верный способ напрасно потерять время и запутаться раньше, чем вы сделаете что-нибудь полезное — это начать программировать, не определив заранее, что именно вам надо. Это особенно справедливо, если вы программируете прикладной контроллер на языке ассемблера, потому что программа на языке ассемблера сама по себе не отличается ясностью построения, которую ей дает структурированный язык высокого уровня; более того, желая оптимизировать действия программы в реальном времени, вы вынуждены прибегать к разного рода хитроумным приемам и относительно туманным алгоритмам. В результате ваша программа — с переходами и ветвлениями, с разделением функций между главной программой и обработчиками прерываний, с программными флагами, модифицируемыми в самых неожиданных местах, с управляющими байтами для периферийных устройств и многим другим - ваша программа быстро превращается в ужасающую мешанину, особенно если на полдороги вы все еще не представляете целиком свою задачу. Как и при покраске дома, приготовления могут занять больше времени, чем сама работа, но в итоге оказываются оправданными.
Разрабатываемый нами усреднитель сигналов является удачным примером. Он не относится к числу очень сложных приборов, однако беглый взгляд на структурную схему обработчика прерываний, приведенную на рис. 11.21, должен убедить вас, что не так уж просто разобраться в установке и чтении флагов и сигналов, изменении векторов прерываний в реальном времени и вообще в порядке выполнения программных строк. Так что стоит потратить время и разобраться, как же должен функционировать наш прибор.
Что такое усреднитель сигналов? Усреднитель сигналов, иногда называемый многоканальным накопителем, предназначен для повышения качества (т. е. увеличения отношения сигнал/шум) периодического аналогового сигнала, неизбежно смешанного с непериодическим шумом (или сигналами помех). Повышение качества осуществляется путем измерения значений сигнала много раз в течение каждого периода, занесения этих выборочных значений в набор последовательных «ящиков» или каналов и затем сложения в каждом канале соответствующих выборок от многих периодов входного сигнала. Другими словами, сигнал складывается сам с собой по модулю его периода. Как будет показано в разд. 15.13, такая процедура повышает отношение сигнал/шум для сигнала, накапливающегося в каналах, потому что суммарное значение (периодического) сигнала растет линейно со временем, а флуктуации (случайного) шума растут только как квадратный корень из времени. Будем называть каждый последовательный период накопления значений в ячейках «разверткой»; типичный сеанс накопления данных может состоять из нескольких тысяч разверток.
Хороший усреднитель сигналов постоянно показывает на экране дисплея накопленную форму сигнала (хранящуюся в 1000 или около того каналов) и предоставляет вам широкий выбор ширины каналов («задержки на ячейку»), режимов запуска, масштаба изображения и т. д. Многие из этих возможностей мы реализуем в нашей разработке, однако далеко не все, иначе описание прибора выйдет за рамки главы. Из всего многообразия возможностей мы отобрали набор функций, который позволит продемонстрировать весь диапазон программных приемов и компромиссных решений, но и не даст нам унестись на крыльях мечты в царство идеальных усреднителей сигналов.
Характеристики. По причинам, которые будут описаны позже, мы решили снабдить прибор обычной управляющей (передней) панелью с надписанными переключателями вместо того, чтобы использовать современную методику с клавиатурой и экранными меню. В результате наш усреднитель выглядит, как обычный прибор такого рода, а его органы управления имеют предопределенные функции и диапазоны. Продумывая план этой главы, мы в действительности начали с того же, с чего начинаем сейчас - с выбора реализуемых функций и диапазонов настройки.
Мы решили ограничиться фиксированным числом каналов (256) с широким диапазоном их ширин. Поскольку усреднитель сигналов используется для исследования периодических явлений двух видов - с собственным внутренним периодом (например, океанские приливы) и запускаемых периодически нами (например, нервные импульсы или резонансные явления), мы предусмотрели два режима развертки: с внешним запуском, когда прибор ждет внешнего сигнала, чтобы начать цикл развертки, и с автозапуском, когда циклы развертки следуют друг за другом непрерывно. Далее, мы предусмотрели два способа завершения процедуры усреднения сигнала: по определенному заранее числу разверток и по нажатию на кнопку «стоп». В последнем случае усреднение завершается после окончания очередной развертки. Для наблюдения усредненного сигнала на экране ЭЛТ (с непрерывным обновлением изображения) мы формируем аналоговые X и Y сигналы (вместе с сигналом подсветки Z). При этом масштаб изображения можно изменять в широких пределах умножением на 2n; имеется также режим «автомасштабирования», в котором данные непрерывно пересчитываются (нормализуются) в соответствии с числом выполненных разверток. Наконец, на управляющую панель выведены ЭЛД, индицирующие состояние (ожидание, развертка) и логические выходные сигналы, характеризующие наличие развертки и конец развертки. Ниже приведены характеристики нашего усреднителя сигналов.
Диапазон аналогового входного сигнала: ±5В
Число каналов: 256
Внутреннее представление: 32-разрядные целые со знаком
Ширина канала: от 100 мкс до 1 с, с интервалами 1-2-5
Накопление: конечное суммирование (сумма 100 мкс-выборок)
Определяемое заранее число разверток: от 1 до 20000, с интервалами 1-2-5
Режимы развертки: внешний запуск; периодический (автозапуск)
Режимы наблюдения: с выбором масштаба (изображение, выходящее за верхнюю границу экрана, переносится вниз); с автомасштабированием
Масштаб изображения: от 1 до 16К входного диапазона, ступенями с умножением на 2
Входы: аналоговый сигнал, внешний запуск развертки
Выходы: X, Y, Z (на ЭЛТ), РАЗВЕРТКА, КОНЕЦ
Дополнительное управление: ПУСК, СТОП, СБРОС (перезагрузка)
На рис. 11.15 показаны входные и выходные сигналы микропроцессорной платы.
Рис. 11.15. Входные, выходные и управляющие сигналы усреднителя сигналов. «ЭЛД» обозначает порт индикации (см. рис. 11.10); «А», «В» и «С» относятся к битам параллельного порта 8536.
Для всех цифровых сигналов мы использовали параллельный порт 8536, причем направление и полярность сигналов соответствующим образом программируются; все цифровые входы, на которые поступают сигналы от органов управления, должны быть подключены через резисторы к уровню +5 В и заземляться при замыкании ключа. В схемах устранения дребезга нет необходимости, поскольку дребезг мы устраним программно.