Прототипы этого прибора - измеритель атмосферного давления, описанный в [1], и измерители уровня радиации [2] и [3]. Автору удалось исправить некоторые ошибки в программе первого и дополнить прибор и программу некоторыми новыми функциями, в том числе радиометром и отображением результатов его работы.
Рис. 1. Внешний вид прибора
Прибор измеряет атмосферное давление в пределах 300...1100 гПа, высоту места измерения давления относительно места, принятого за исходное, в пределах от -500 до +9000 м, температуру воздуха от -40 до +85 оС и мощность экспозиционной дозы радиоактивного излучения от 0 до 99 мкР/ч. Размеры прибора - 74x53x17 мм. Питается он от встроенного литий-ионного аккумулятора напряжением 3,7 В и ёмкостью 650 мА·ч. Для аккумулятора предусмотрено встроенное зарядное устройство, питающееся напряжением 5 В от порта USB любого электронного прибора. Имеется светодиодная индикация хода зарядки и степени заряженности аккумулятора.
Прибор выводит с дискретностью один час суточные графики изменений атмосферного давления и уровня радиации. Он прогнозирует изменения погоды и подаёт звуковой, световой и вибрационный сигналы при угрожающем увеличении уровня радиации.
Схема метеостанции-высотомера-радиометра представлена на рис. 2. Подключение ЖКИ от сотового телефона Nokia 510 (HG1) и модуля датчика давления и температуры BMP180 (B1) к микроконтроллеру DD1 в основном соответствует схеме, приведённой в [1]. Добавлен стабилизатор напряжения 3 В. Такое напряжение питания допустимо как для микроконтроллера (2...5,5 В), таки для датчика(1,8...3,6 В) и ЖКИ (2,7...3,3 В).
Рис. 2. Схема метеостанции-высотомера-радиометра
Добавлены также приобретённые в интернет-магазинах готовые платы зарядки аккумулятора от разъёма USB и контроля заряженности аккумулятора. Имеющиеся на этих платах светодиодные индикаторы хода зарядки и уровня заряженности на схеме не показаны. Индикаторы заряженности работают только при нажатой кнопке SB5. Если питать прибор от трёхвольтного источника (например, от двух гальванических элементов), стабилизатор напряжения DA1 и упомянутые выше платы не нужны.
Узлы на транзисторах VT1, VT3 и VT4, диодах VD1-VD5 и счётчик Гейгера BD1 относятся к измерителю радиоактивного излучения. При отказе от его измерения они вместе с обеспечивающими их работу другими элементами могут быть исключены из схемы. При этом выводы 6, 11 и 16 микроконтроллера DD1 остаются свободными.
Из предлагавшихся в [1] вариантов я взял за основу своего прибора измеритель атмосферного давления с выводом информации на индикатор крупным шрифтом. В предложенной там программе микроконтроллера устранил две неточности. Первая - для преобразования измеренного в паскалях значения атмосферного давления в миллиметры ртутного столба использован целочисленный коэффициент 133. Поскольку его точное значение немного больше (133,32233684.), результат преобразования в интервале 700...800 мм Hg получается заниженным на 1,7...1,9 мм Hg. Эта погрешность в значительной мере устранена простым вычитанием 2 мм Hg из результата умножения. Кроме того, устранена ошибка, приводившая к тому, что показания прибора в гектопаскалях завышались в 10 раз.
Дальнейшему совершенствованию прибора препятствовали возможности микроконтроллера PIC16F628A, имеющиеся в котором 2048 14-разрядных слов программной памяти были заполнены практически полностью. Поэтому вместо него был применён микроконтроллер PIC16F648A с вдвое большим объёмом памяти. Однако программная память этого микроконтроллера состоит из двух страниц (нулевой и первой), в отличие от одностраничной программной памяти микроконтроллера PIC16F628A. Это создаёт некоторые сложности. Например, перед выполнением инструкций CALL, GOTO, RETURN теперь необходимо указывать в третьем разряде регистра PCLATH номер текущей страницы программной памяти.
Ситуация осложняется использованием уже имеющихся подпрограмм математических вычислений, вывода информации на ЖКИ и некоторых других. Теперь требуется обеспечивать их корректный вызов с любой страницы программной памяти. Кроме того, некоторые подпрограммы приходится вызывать не только из главной программы, но также из других подпрограмм. Следствие этого - невозможность однозначно указать подпрограмме страницу памяти, на которую из неё следует вернуться.
Открыв в процессе разработки программы окно "View→Program Memory" среды MPLAB IDE, границу между страницами программной памяти легко обнаружить по адресу в столбце Address этого окна. Всё, что имеет адрес 800 H и более, находится на первой странице, а всё с адресом меньше указанного - на нулевой.
Для корректного обращения к страницам программной памяти я организовал регистр STOR_POVERN (Примечание: от укр. "страница возврата"). В его нулевой разряд перед вызовом подпрограммы, используемой обеими страницами памяти, следует заносить номер страницы, с которой произойдёт вызов. В начале своей работы подпрограмма сдвигает содержимое этого регистра на один разряд влево, в результате чего номер страницы возврата оказывается в его первом разряде. В освободившийся нулевой разряд регистра STOR_POVERN вызванная подпрограмма заносит номер страницы, на которой находится.
Перед инструкцией RETURN в подпрограмме должен быть выполнен сдвиг содержимого регистра STOR_ POVERN на один разряд вправо, а после этого содержимое его нулевого разряда должно быть записано в третий разряд регистра PCLATH. Это обеспечит возврат из подпрограммы на ту страницу памяти, с которой она была вызвана.
Такая логика соблюдается и при вызове из одной подпрограммы другой. Благодаря ей вложенность подпрограмм, находящихся на разных страницах и вызываемых с разных страниц, может достигать семи. Для "дальних" вызовов подпрограмм и безусловных переходов между страницами использованы предусмотренные в ассемблере MPASM инструкции LCALLи LGOTO.
Ассемблер MPASM во время трансляции программы по умолчанию выводит на экран компьютера предупреждения о каждом переходе с одной страницы программной памяти на другую. Чтобы не засорять экран этими предупреждениями, среди которых можно легко пропустить действительно важные сообщения, в начало исходного текста программы помещена запрещающая их вывод директива
errorlevel -302, -307, -202
При желании увидеть эти предупреждения указанную директиву следует удалить или закомментировать.
Дальнейшая модификация программы заключалась в организации вывода на ЖКИ графика изменения атмосферного давления и пиктограмм прогноза погоды, а также вычисления разницы высоты двух точек по разнице атмосферного давления в них.
Известно, что атмосферное давление изменяется на один гектопаскаль при подъёме или опускании точки измерения на 8,43 м. Поскольку имеющиеся в программе вычислительные подпрограммы оперируют только целыми числами, для вычисления приращения высоты Δh в метрах использована формула
Δh = 8,43·(P1 - P2) = 2158·(P1 - P2)/256,
где P, и P2 - атмосферное давление соответственно в первой и второй точках, гПа. Операция деления на 256 легко реализуется в программе сдвигом целочисленного результата умножения на восемь двоичных разрядов (один байт) вправо.
Согласно своим техническим данным, датчик BM180 способен измерять давление от 300 до 1100 гПа, так что максимально возможная разность его показаний - 800 гПа. Результат умножения этого числа на 2158 (1726400) займёт 18 двоичных разрядов (менее трёх байтов). Поскольку имеющиеся в программе математические подпрограммы оперируют с четырёхбайтными числами, переполнения разрядной сетки и вызванного этим искажения результатов вычислений можно не опасаться.
Рис. 3. Информация на экране ЖКИ
В программу добавлена процедура обслуживания кнопки SB1. При первом нажатии на неё программа запоминает текущее значение атмосферного давления, а вместо него выводит на ЖКИ строку "h = 0000м", как показано на рис. 3. Для вывода символов "h", "=", "м" в программе модифицирована таблица знакогенератора. В дальнейшем в соответствии с изменениями измеренного давления программа вычисляет относительную высоту, которую со знаком плюс или минус отображает на индикаторе вместо последовательно-
сти нулей. Следующее нажатие на кнопку SB 1 возвращает на ЖКИ текущее значение давления.
После опроса датчика давления и всех вычислений, которые происходят один раз в минуту, программа переводит микроконтроллер в "спящий" режим. Минутный интервал выдерживается подсчётом периодов переполнения сторожевого таймера (WDT) длительностью приблизительно 2,3 с. Почти всё это время микроконтроллер "спит", за счёт чего средний ток, потребляемый прибором от аккумулятора, снижается до 0,3 мА.
Поскольку прибор карманный, когда он находится в темноте, логично выключать ЖКИ. Датчиком освещённости служит фототранзистор VT2. При его затемнении на минуту и более программа выключит ЖКИ и будет держать его выключенным, пока при очередном "пробуждении" микроконтроллера, происходящем каждые 2,3 с, она не определит, что фототранзистор освещён. Ток, потребляемый от аккумулятора G1, в темноте снижается приблизительно до 60 мкА. Их потребляет в основном интегральный стабилизатор DA1. С аккумулятором ёмкостью 650 мА·ч прибор способен проработать около 450 суток, если, конечно, редко доставать его из кармана.
Важно учесть, что для появления на ЖКИ изображения простой подачи на него напряжения питания недостаточно. Необходимо ещё выполнить так называемую инициализацию ЖКИ, что и делает программа, прежде чем приступить к опросу датчика давления, необходимым вычислениям и выводу их результатов на экран индикатора.
Чтобы можно было прочитать показания прибора и при плохом внешнем освещении, в него добавлена кнопка SB2. Когда она нажата, включены подсветка экрана ЖКИ и осветительный светодиод ("фонарик") EL1. В изготовленном мной приборе - даже два "фонарика". Один (EL1) - белого свечения, а второй, не показанный на схеме, но подключённый к кнопке SB3 аналогичным образом, - ультрафиолетового. Номиналы включённых последовательно с ними резисторов (например R10) следует подобрать в зависимости от характеристик применённых светодиодов и необходимой яркости их свечения. При питании осветительных светодиодов от стабилизированного источника напряжением 3 В эти резисторы могут совсем не потребоваться.
Продолжение следует
Литература
1.BMP180 - подключение датчика атмосферного давления. - URL: http:// radiolaba.ru/microcotrollers/ bmp180-podklyuchenie-datchika-atmos-fernogo-davleniya.html (15.11.17).
2. Макарец С. Два варианта статистического измерителя уровня радиации с ЖКИ от Nokia 5110. - Радио, 2017, № 3, с. 42-46.
3. Макарец С. Измеритель-индикатор уровня радиации. - Радио, 2015, № 5, с. 42-45.
Автор: С. Макарец, г. Киев, Украина