Юрий Ревич - Занимательная электроника
- Название:Занимательная электроника
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2015
- Город:Санкт-Петербург
- ISBN:978-5-9775-3479-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Юрий Ревич - Занимательная электроника краткое содержание
На практических примерах рассказано о том, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. От физических основ электроники, описания устройства и принципов работы различных радиоэлектронных компонентов, советов по оборудованию домашней лаборатории автор переходит к конкретным аналоговым и цифровым схемам, включая устройства на основе микроконтроллеров. Приведены элементарные сведения по метрологии и теоретическим основам электроники. Дано множество практических рекомендаций: от принципов правильной организации электропитания до получения информации о приборах и приобретении компонентов применительно к российским условиям. Третье издание дополнено сведениями о популярной платформе Arduino, с которой любому радиолюбителю становятся доступными самые современные радиоэлектронные средства.
Для широкого круга радиолюбителей
Занимательная электроника - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Так как здесь выводов портов хватает, то можно назначить для управления сегментами разряды подряд, для чего выбран порт С (семь его битов из восьми). Тогда для упрощения программы можно применить следующий прием: где-либо в программе определяются константы, соответствующие маске сегментов для рисунка цифр (зажженному сегменту соответствует единица, младший бит соответствует сегменту а, далее по порядку):

Затем в процедуре индикации мы читаем эти константы с помощью инструкции lpm , которая специально предназначена для чтения констант из памяти программ. Инструкция находит их по адресу, в данном случае по метке OUT_N (т. к. адресация в памяти производится байтами, а нумерация команд выполняется словами, то адрес метки приходится умножать на два). После чего выводим в порт С непосредственно маску цифр:

Маски расположены по порядку цифр от 0 до 9. Поэтому перед выполнением этой последовательности команд у нас в рабочем регистре temp должно содержаться значение, соответствующее цифре, выводимой в текущем такте индикации. Так мы избавляемся от процедур рисования знаков. Разряды РВ0-РВ5 назначаем для управления разрядами индикации, а вывод PD7 — для управления знаком температуры.
Не показан на схеме и программирующий разъем, который одинаков для любой схемы на AVR и приведен на рис. 19.2 (соответствующие выводы для ATmega8535 названы на схеме рис. 20.4).
То, что вывод MOSI (вывод 6 ) совпадает с выводом индикации единиц давления, вас смущать уже не должно. Однако незадействованные в других функциях выводы программирования (в данном случае MISO и SLK, выводы 7 и 8 ) следует не забыть подсоединить к питанию (в нашем случае к цифровому питанию +5 Вц) «подтягивающими» резисторами номиналом от 1 до 10 кОм, как и показано на рис. 19.2.
Схема источника питания показана на рис. 20.6.

Рис. 20.6. Схема источника питания для измерителя температуры и давления
Измеритель имеет четыре питания (+5 Вц, +5 Ва, — 5 Ва и +12 В для индикации) и три «земли», причем обычным значком « » здесь обозначена аналоговая «земля» GNDa. Линия цифровой «земли» обозначена GNDц, кроме этого, имеется еще общий провод индикаторов GNDи. Все три «земли» соединяются только на плате источника питания. Отмечу, что готовый трансформатор с характеристиками, указанными на схеме, вы можете не найти. Поэтому смело выбирайте тороидальный трансформатор мощностью порядка 10–15 Вт на напряжение вторичной обмотки 10–12 В (которое будет использоваться для индикаторов и стабилизатора +5 Вц), измерьте на нем количество витков на вольт (как описано в главе 9 ) и домотайте три одинаковых обмотки на 7–8 В, каждая поверх существующих, проводом не тоньше 0,3 мм в диаметре. Удобнее всего их мотать одновременно сложенным втрое проводом заранее рассчитанной длины.
Программа
Чтобы перейти к обсуждению непосредственно программы измерителя, нам нужно решить еще один принципиальный вопрос. Передаточная характеристика любого измерителя температуры, показывающего ее в градусах Цельсия, должна «ломаться» в нуле — ниже и выше абсолютные значения показаний возрастают. Так как мы тут действуем в области положительных напряжений, то этот вопрос придется решать самостоятельно (в АЦП типа 572ПВ2, напомним, oпpeделeниe абсолютной величины и индикация знака производились автоматически).
Это несложно сделать, если представить формулу пересчета значений температуры в виде уравнения N= K·| x— Z|, где N — число на индикаторе, х — текущий код АЦП, Z — код АЦП, соответствующий нулю градусов Цельсия (при наших установках он должен соответствовать примерно середине диапазона). Чтобы вычислить значение абсолютной величины, нам придется сначала определять, что больше — х или Z , и вычитать из большего меньшее. Заодно при этой операции сравнения мы определяем значение знака. Если в регистрах AregH: AregL содержится значение текущего кода АЦП х , а в регистрах KoeffH: KoeffL значение коэффициента Z , то алгоритм выглядит примерно вот так:

Здесь разряд 7 порта D (вывод 21 контроллера) управляет плоским светодиодом «минус», который горит, если температура ниже нуля, и погашен, если выше. Давление занимает только положительную область значений, поэтому там такой сложной процедуры не понадобится. Если вы посмотрите на характеристику датчика в фирменном описании, то выясните, что он работает не с начала шкалы — нулевому напряжению на выходе (и, соответственно, нулевому коду АЦП) будет соответствовать некоторое значение давления. В результате можно ожидать, что в формуле пересчета значений давления, представленной в виде N= K( x+ Z), все величины будут в положительной области.
Физический смысл коэффициента К — крутизна характеристики датчиков в координатах «входной код АЦП — число на индикаторах». Умножение на коэффициент К мы будем производить описанным ранее методом — через представление его в виде двоичной дроби (за основу берется 2 10= 1024, этого будет достаточно). Вычисление ориентировочных значений коэффициентов К и Z поясняется далее, при описании процедуры калибровки.
Теперь можно окинуть взглядом собственно программу. Целиком ее текст и результирующий hex-файл можно скачать с сайта автора по адресу http://revich.lib.ru/AVR/TPineter.zip. При всей своей видимой «навороченности», программа TPmeter занимает в памяти программ контроллера всего 632 байта — сравните со многими килобайтами и даже десятками килобайт, которые будет занимать аналогичная программа на Arduino .
Как вы видите из таблицы прерываний, здесь используется всего один, самый простой Timer 0, который срабатывает с частотой около 2000 раз в секунду. В его обработчике по метке TIM0 и заключена большая часть функциональности. В каждом цикле сначала проверяется счетчик cRazr , который отсчитывает разряды индикаторов (от 0 до 5). В соответствии с его значением происходит формирование кода индицируемого знака и затем на нужный разряд подается питание. После формирования цифры программа переходит к довольно запутанному, на первый взгляд, алгоритму работы АЦП. На самом деле он не так уж и сложен.
Читать дальшеИнтервал:
Закладка: