РадиоКот :: Простой барометр/термометр на МК.
Простой барометр/термометр на МК.
Всем привет!
Во первых хочу поздравить Кота с днем рождения! Процветать!
Теперь к статье.
«Простой барометр/термометр на МК»
Данная конструкция была разработана по просьбе моего друга — любителя автомобильных путешествий и offroad. Им (другу и сотоварищам) в походах уж очень хочется знать в какую сторону и с какой скоростью меняется атмосферное давление, дабы попытаться понять, что будет с погодой. Он выбрал недорогой индикатор ME-GLCD128x64 представленный на фото:
Устройство собрано на двусторонней ПП, изготовленной методом ЛУТ:
Микроконтроллер был выбран ATMega32 в дип корпусе по причинам: он у меня был, найти другое применение такому большому корпусу (DIP40) я не смог, т.к. в последнее время делаю практически все на SMD.
Датчик давления фирмы HopeRF — HP03M, общающийся с МК по протоколу TWI. Датчики температуры DS18S20 фирмы Maxim.
Часы реального времени были выбраны на микросхеме M41T81 по причинам: наличие коррекции времени и наличие Timekeeper — позволяющего читать текущее время без потерь тактов основного счетчика.
В качестве источника питания решено использовать автомобильный адаптер USB — он выдает 5В при токе до 0.5А. В связи с тем, что при старте двигателя «провалы» в бортовой сети авто довольно большие, то была необходима схема аварийной записи текущих значений в eeprom. Для этого используется развязка питания МК и остальной схемы. Питание МК поддерживается конденсатором 1000 мкф, которого, как показали испытания, достаточно (более чем в два раза) для того, что-бы МК успел записать 6 байт текущих значений датчиков в eeprom. Контроль наличия питания и цепь сброса МК обеспечивают два супервизора питания. Первый следит за напряжением на входе схемы и при пропадании питания выдает лог.0 на int0, тем самым запуская процедуру сохранения. Второй обеспечивает «жесткий» сброс самого МК при понижении его питания — для исключения повреждения eeprom.
В обычном режиме данные записываются в eeprom каждые полчаса. Всего хранятся значения за 2-е суток. Текущее время, полученное с m41t81 преобразуется в кол-во секунд от 2000 года, и на основе этого значения вычисляется текущий адрес для записи (один из 96). После несложных вычислений можно увидеть, что ресурс eeprom выработается приблизительно за 540 лет (каждая ячейка перезаписывается раз в 2-е суток) или при ежеминутном выключении питания за 18 лет. Получасовые данные — это средние значения давления, температуры по каждому датчику, время в секундах (кратное 96) и контрольная сумма CRC16. При старте данные читаются из eeprom и проверяется контрольная сумма каждого блока, если сумма не верна — данные игнорируются. Так-же данные игнорируются если дата их записи превышает 2-е суток (нам такие старые данные не нужны). Аналогично считается и контрольная сумма основных настроек, и если она не верна — считаем, что это первый запуск программы и выставляем все значения по дефолту.
Далее пример работы устройства.
В верхнем левом углу текущее давление в мм.рт.ст и после стрелочки — изменение давления за последние 3 часа. Ниже показания двух датчиков температуры и max/min значения за прошедшие 24 часа. Совсем внизу график изменения давления. (провал в графике — специально на эти полчаса устройство было выключено — следовательно данных нет и показывать нечего)
Меню настроек:
Возможны установки: даты и времени, «поправки» хода часов, поправки давления (для приведения его к текущей высоте), регулировка максимальной и минимальной яркости, время, через которое яркость переключится с максимума на минимум.
Все настройки выполняются тремя кнопками Enter,+,- Для входа в меню настроек необходимо удерживать + и — более секунды.
В основном режиме кнопки + и — не работают и потому сделаны скрытыми. Кнопка Enter переключает яркость экрана с макс. на мин. и наоборот. При длительном удержании подсветка экрана полностью отключается.
Собственно схема устройства:
В архиве: Прошивка, схема, плата, плата в diptrace. Плюс набор различных цифр и символов с сишными кодами.
А вот тут — сайт проекта.
PS: проект будет развиваться, т.к. впереди еще зимние испытания на морозоустойчивость 🙂
Файлы:
Бонус: много цифирок с «C»шными массивами
Прошивка, исходники, схема, плата
Все вопросы в Форум.
www.radiokot.ru
Барометр-сигнализатор для метеозависимых людей БС-1 — Микроконтроллеры — Схемы на МК и микросхемах
Владимир Макаров.
Введение.
У здоровых людей смена погоды не оказывает особого влияния на их самочувствие, а вот метеозависимые люди на любую смену погоды или атмосферного давления, реагируют очень болезненно.
Предлагаемый в статье барометр-сигнализатор предназначен для информирования метеозависимых людей в режиме реального времени о текущем значении атмосферного давления, выходе значения атмосферного давления за установленные границы и его резких скачках.
Рисунок 1. Внешний вид устройства
Пользователь самостоятельно задает граничные значения – минимальный и максимальный пороги.
В случаях если атмосферное давление превысит максимальный порог или опустится ниже минимального порога, то устройство будет подавать прерывистые звуковые сигналы и световые сигналы «Порог».
После пятикратного повтора звуковых сигналов звук отключается, при этом световой сигнал будет подаваться до возврата значения атмосферного давления в заданные границы.
Пользователь задает величину контролируемого скачка атмосферного давления за устанавливаемый интервал времени.
В случаях если атмосферное давление в заданный интервал времени отклонилось на величину превышающую контролируемый скачок, то устройство будет подавать прерывистые звуковые сигналы и световые сигналы «Скачок».
Значения атмосферного давления представлены в устройстве в «мм рт. ст.».
Демонстрационный ролик
Принципиальная схема устройства.
Схема электрическая принципиальная устройства показана на рисунке (Рисунок 2).
Устройство собрано на микроконтроллере ATmega8.
Резистор R1 и конденсатор C3 обеспечивают аппаратный сброс МК при подаче питания.
Конденсаторы C2 и C1 защищают цепи питания от высокочастотных помех и бросков питания.
Значение атмосферного давления поступает от датчика BMP1 (GY68 BMP180).
Управление датчиком давления осуществляется по интерфейсу TWI (I2C).
Для отображения информации используется жидкокристаллический экран Nokia 5110. На экране отображается информация о текущем атмосферном давлении, а также параметры настройки устройства.
Оперативная индикация состояния атмосферного давления осуществляется с использованием светодиодов VD1..3 («Норма», «Порог», «Скачек»).
Звуковая сигнализация осуществляется с помощью усилителя низкой частоты на транзисторах VT1..2 и громкоговорителя SP1. Громкость звучания может быть отрегулирована с помощью переменного резистора R5.
Настройка устройства осуществляется с использованием кнопок SA2(«Установка»), SA3(«+»), SA4(«-»).
При нажатии на кнопку SA5(«Экран») отображается главный экран с текущим значением атмосферного давления.
Внимание! Фьюзы для настройки МК: HIGH=0xD9, LOW=0xE1.
Рисунок 2. Схема электрическая принципиальная
Программное обеспечение.
Программа для МК написана на языке Си в среде AtmelStudio (Version 7.0.1006).
В целях снижения энергопотребления устройства применен метод «засыпания» МК в режиме «power-save». При этом потребляемый ток в режиме сна уменьшается до 20мкА.
По расчетам это позволяет использовать две батареи типа АА по 1.5 Вольт в течение 4 месяцев.
Для пробуждения МК из режима «power-save» используется внутренний асинхронный таймер-счетчик №2, который работает постоянно.
Задающий генератор таймера счетчика использует кварцевый резонатор Y1 с частотой резонанса 32768Гц.
Таймер-счетчик №2 настроен так, что каждые 8 секунд происходит его переполнение и вызов прерывания, которое «будит» МК.
МК после пробуждения от таймера-счетчика №2 выясняет не прошло ли 10 минут с предыдущего пробуждения. Если нет, то МК выдает световой сигнал «Норма», «Порог» или «Скачок» в зависимости от условия, сложившегося после предыдущего измерения, и снова засыпает на 8 секунд.
Вторым источником пробуждения МК является внешнее прерывание на входе INT1, которое возникает при нажатии на кнопку «Экран».
МК, пробудившись и выяснив что его «разбудила» кнопка «Экран», включает жидкокристаллический дисплей Nokia 5110 и высвечивает на нем текущее значение атмосферного давления и другую информацию.
Экран будет отображать информацию до момента отпускания кнопки «Экран». После отпускания кнопки «Экран» МК выключает дисплей путем выдачи ему команды «power-down», затем МК «засыпает» сам.
Третьим, и последним, источником пробуждения МК является внешнее прерывание на входе INT0, которое возникает при нажатии на кнопку «Установка».
Повторное нажатие на кнопку «Установка» приводит к перемещению курсора на следующий параметр. Нажатие кнопок «+» и «-» приводит к изменению значения параметра, на котором установлен курсор.
После нажатия кнопки «Установка» на последнем параметре МК выключает дисплей и «засыпает» до очередного пробуждения.
Конструкция устройства.
Устройство выполнено в корпусе распределительной коробки «Tuco 79х79х32, для открытой проводки, цвет белый (65004)»(Рисунок 3).
Рисунок 3. Коробка распределительная Tyco (65004).
Плата выполнена на одностороннем фольгированном стеклотекстолите. Размер платы 72х72мм. Расположение деталей на плате показано на рисунке 4. На плате сверху проложены 9 (!) перемычек. Они выделены разными цветами. Если использовать двухстороннюю печатную плату, то перемычки могут быть преобразованы в дорожки.
Рисунок 4. Плата. Вид сверху.
Разводка печатной платы показана на рисунке 5. Изображение зеркальное.
Рисунок 5. Разводка печатной платы.
Динамик закрепляется на задней стенке корпуса устройства. Компоненты сборки показаны на рисунке 6.
Рисунок 6. Компоненты устройства.
Батареи питания (два элемента типа AA) размещаются в батарейном отсеке в специализированных держателях-кроватках (Рисунок 7).
Рисунок 7. Размещение батареи.
Настройка устройства.
На рисунке 8 показаны органы управления для настройки устройства.
Для входа в режим нажмите кнопку «Установка». На дисплее отобразятся настраиваемые параметры.
Кнопками «+» и «-» установите требуемое значение параметра.
Для перехода к настройке следующего параметра нажмите кнопку «Установка».
Для выхода из режима настройки нажмите несколько раз кнопку «Установка».
Параметры «Верхний <порог>», «Нижний <порог>» «Скачок» задаются в мм рт. ст., «Интервал» измерения скачка задается в часах. .
Рисунок 8. Органы настройки устройства.
Регулировка громкости звукового сигнала осуществляется потенциометром «Громкость». Для регулировки необходимо использовать миниатюрную крестообразную отвертку.
При необходимости может быть установлен потенциометр с выведенной наружу ручкой для удобства регулировки.
Эксплуатация устройства.
После включения устройство готово к работе и сразу производит первое измерение атмосферного давления. При этом экран погашен, а результаты измерения отображаются с помощью светодиодных индикаторов «Норма», «Порог» или «Скачок».
Индикатор, соответствующий результату измерения и анализа, производит пять коротких вспышек каждые 8 секунд.
При переходе от состояния «Норма» в состояния «Порог» или «Скачок» выдается звуковой сигнал. Сигнал звучит на протяжении пяти 8 секундных интервалов, начиная с интервала, следующего за изменением состояния.
Для детальной оценки текущего состояния необходимо нажать и удерживать кнопку «Экран». При этом будет отображаться информация, представленная на рисунке 9:
• текущее атмосферное давление;
• максимальное и минимальное значение давления, измеренного за интервал времени, указанный в настройках;
• величина скачка в мм рт.ст. как разница между величинами, указанными в предыдущем пункте;
• текстовая характеристика результата измерения: НОРМАЛЬНОЕ, ПОРОГ, СКАЧОК.
После нажатия кнопки «Экран» серия звуковых сигналов будет прервана.
Рисунок 9. Органы управления и индикации при эксплуатации устройства.
После отпускания кнопки «Экран» дисплей погаснет, а устройство продолжит работать в штатном режиме, выводя результат измерения и анализа только на светодиодные индикаторы.
Приложение:
SignalBarometer2.dch Схема электрическая в формате DipTrace
SignalBarometer2.dip Печатная плата в формате DipTrace
SignalBarometer.hex Загрузочный файл
SignalBarometer.rar Архив проекта Atmel Studio 7 на Си
Удачи Вам в творчестве и всего наилучшего!
Скачать архив.
vprl.ru
Самодельный барометр на pic контроллере
Опубликовал admin | Дата 19 декабря, 2017Челпанов О, Барановский В.
Схема барометра представлена на рисунке ниже. Основой схемы является микроконтроллер PIC16F684, на который возложено несколько функций, это взаимодействие с датчиком BMP180 т.е. считывание одиннадцати калибровочных коэффициентов и данных о температуре и давлении. Правда на индикатор выводится только данные об атмосферном давлении, а так же анализ считанных данных и дальнейший математический расчет значения атмосферного давления в миллиметрах ртутного столба.
Общение контроллера с датчиком происходит по двухпроводной линии с использованием протокола I²C. После всех необходимых математических преобразований данных, считанных с датчика, контроллер выводит необходимую информацию о давлении на светодиодный индикатор TM1637.
Это светодиодный модуль, имеющий в своем составе четырехразрядный семисегментный светодиодный часовой индикатор и микросхему, преобразователь последовательного кода в параллельный, в данном случае, выполненный на многофункциональной специализированной микросхеме TM1637.
Внешний вид индикаторного модуля показан на фото, взятых с магазина ru.aliexpress.com.
Внешний вид устройства показан на фото ниже.
Питается схема от батареи напряжением 12 вольт. В схему введен диод D1, выполняющий функцию защиты от неправильного подключения батареи. Микроконтроллер питается от стабилизатора напряжения 5 вольт VR1 – микросхема LM78L05. Все конденсаторы, указанные в схеме – блокировочные. Печатная плата имеет топологию для применения SMD элементов и микроконтроллера в корпусе SOIC. Что бы запрограммировать контроллер, на плате предусмотрен пятиконтактный разъем. Рисунок печатной платы с расширением Lay6 находится в общем архиве с файлом загрузки микроконтроллера и общей схемой устройсва.
Скачать файлы проекта
Скачать “izmeritel-atmosfernogo-davleniya” izmeritel-atmosfernogo-davleniya.rar – Загружено 458 раз – 98 KB
Обсудить эту статью на — форуме «Радиоэлектроника, вопросы и ответы».
Просмотров:1 226
www.kondratev-v.ru
Барометр и термометр на микроконтроллере PIC16F684
Опубликовал admin | Дата 17 января, 2018Челпанов О. Барановский В.
По просьбам тех, кто собрал предыдущую конструкцию барометра на PIC 16F684 и датчике давления BMP180, публикуем статью (продолжение). Данное устройство позволяет отображать одновременно и температуру и давление. Для этого в конструкции был применен индикатор на базе микросхемы MAX7219 которая позволяет работать с матрицей 8Х7, применение данного индикатора позволило сократить число задействованных портов микропроцессора.
Датчик температуры применен самый распространенный — 18b20, который имеет трехвыводную конструкцию. DS18B20 (Programmable Resolution 1-Wire® Digital Thermometer). Диапазон измерения температуры составляет от -55 до +125 °C. Для диапазона от -10 до +85 °C погрешность не превышает 0,5 °C.
Схема устройства показана на рисунке 1.
Индикатор MAX7219 приобретался на Aliexpress. Но данный индикатор продается уже в готовом виде и вам остается только 5ю проводниками его подключить к запрограммированной плате.
Принципиальная схема индикатора показана на рисунке 2, внизу показано фото такого индикатора.
Внешний вид собранного устройства показан на фото ниже.
Отрицательные температуры отображаются, минус перед числом и градусы отображаются без десятых долей.
Скачать рисунок печатной платы, схему и прошивку:
Скачать “barometr-i-termometr-svoimi-rukami” barometr-i-termometr-svoimi-rukami.rar – Загружено 440 раз – 13 KB
Обсудить эту статью на — форуме «Радиоэлектроника, вопросы и ответы».
Просмотров:1 085
www.kondratev-v.ru
СХЕМА БАРОМЕТРА ДЛЯ ИЗМЕРЕНИЯ ДАВЛЕНИЯ
Схема барометра для измерения атмосферного давления построена с использованием датчика давления MPXHG6115. Сам датчик обеспечивает на его выходе напряжение, пропорциональное давлению воздуха. Рабочий диапазон перекрывает атмосферное давление (90 — 110 кПа) на уровне моря. Минимальное рабочее давление воздуха датчика 15 кПа, что позволяет использовать его даже в горной области. Для этого, правда, нужно пересчитать резисторы на его плате. Для атмосферного давления в районе недалеко от уровня моря диапазон выходных напряжений датчика составляет 3.625 — 4.55 вольт. В аналоговой части схемы (затененная на схеме) на выходе формируется линейное напряжение диапазона 0 — 5 В, которое находится в нормальном диапазоне микроконтроллерного АЦП. Сопоставление выполняется с помощью двух ОУ. Левая (на схеме) обеспечивает оптимальное сопротивление нагрузки для датчика (51 кОм) и инвертирует опорноео напряжение около 2.5 В. Опорное напряжение получается с помощью делителя напряжения, состоящего из двух резисторов 11.5 к (точность 1%). Правая ОУ обеспечивает необходимое масштабирование напряжения и начальную установку в 0. Рекомендуем использовать сдвоенный OPA2374.
Принципиальная схема барометра
Технические характеристики
- Диапазон измерений: 700 — 800 мм Рт.ст
- Напряжение питания: 5 вольт
- Ток потребления: 40 мА
Датчик масштабирования и аналоговый усилитель собран на небольшой печатной плате. Он подключается к основной плате с помощью 3-х проводов. Тест схема состоит из микроконтроллера и ЖК-модуль с интерфейсом, смонтированный на ее задней стороне. Интерфейсная карта устанавливает все связи с PIC, используя только два провода и его программное обеспечение реализует упрощенную версию стандартного интерфейса I2C. Программа контроллера PIC16F84 присваивает ее ввод пин-RC3 на вход АЦП. Он просто вычисляет давление в зависимости от входного напряжения в соответствии с формулой, преобразует его в двоично-десятичный код и выдает на экран.
Точность измерения
Самое главное — подобрать точные значения для делителя напряжения (резисторы 11.5 кОм), это сопротивления R1, R2 и R3. Однако, программное обеспечение должно компенсировать некоторое рассогласование датчика давления. Все файлы для изготовления барометра можно скачать здесь.
Схемы измерительных приборовelwo.ru
Электронный барометр своими руками | Библиотека устройств на микроконтроллерах
Давно хотел иметь у себя в хозяйстве барометр. Да все никак не получалось — то дорого, то не попадался, то еще какие-то препятствия. В конце концов решил сделать сам, для чего и приобрел датчики давления MPX4115AP и влажности HIH-4000-004. Оба аналоговые, отсюда следует, что барометр по сути должен представлять из себя двухканальный вольтметр.
За основу я взял барометр из статьи «Небольшая метеостанция своими руками». Оттуда я добросовестно содрал пересчет показаний АЦП в мм.рт.ст. (миллиметры ртутного столба), и % (влажности воздуха).
Схемотехнику изменил, потому что свой проект хотелось сделать с внешним питанием и на светоидодных индикаторах. Их лучше видно, потому что они ярко светятся и имеют большой размер. Да и потребляют они гораздо меньше, чем подсветка ЖКИ.
В результате творческих экспериментов родилась такая схема:
Микроконтроллер Atmega8 — классика жанра, семисегментный индикатор ВА56-12SRWA в количесве двух штук и источник питания, построенный по типовой схеме. Датчики давления и влажности MPX4115AP и HIH-4000-004, соответственно.
Цифровая и аналоговая земля на плате разделены. Питание тоже разделено на аналоговое и цифровое и подается через дроссели — 25 мкГн на аналоговые цепи и проводник в ферритовой трубочке на цифровые.
На входе АЦП низкочастотный пассивный RC фильтр с частотой среза 640 Гц для подавления помех. Выводы микроконтроллера AVCC и AREF (собственно как и положено) зашунтированы керамическим конденсаторами по 0,1 мкФ и еще танталовыми по 10,0 мкФ (желтенькие со старых материнских плат).
Для правильной работы датчика влажности, его необходимо вынести за пределы помещения (на улицу), и соединить с платой кабелем (лучше экранированным). Также датчик необходимо защитить от прямого попадания осадков, ведь кристалл совсем открытый.
Написанная мной программа не образец для подражания, но как вариант для начинающих сгодится. Можно, конечно, добавить гашение незначащего нуля в индикаторе влажности — это несложно, а можно покопаться и подправить что-нибудь еще, ведь совершенству нет предела.
Файлы:
Коммерческое использование данного устройства запрещено!
По материалам: http://chipenable.ru/
elektro-shemi.ru
BMP180 – подключение датчика атмосферного давления | RadioLaba.ru
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H’3F18′ ;Конфигурация микроконтроллера
errorlevel -302 ;не выводить сообщения с ошибкой 302 в листинге
Sec equ 0020h ;вспомогательные регистры счета
Sec1 equ 0021h ;
Sec2 equ 0022h ;
nomer equ 0023h ;регистр хранения кода ascii символа
scetbit equ 0024h ;регистр счета кол-ва бит
perem equ 0025h ;вспомогательный регистр приема/передачи байта по spi, i2c
temp equ 0026h ;вспомогательный регистр счета
tmp_symb equ 0027h ;вспомогательный регистр счета для таблицы данных
oss equ 0028h ;регистр хранения значения точности преобразование результата давления
DIGIT1 equ 0030h ;регистры подпрограммы преобразования двоичного числа
DIGIT2 equ 0031h ;в десятичное по разрядам
DIGIT3 equ 0032h
DIGIT4 equ 0033h
DIGIT5 equ 0034h
DIGIT6 equ 0035h
DIGIT7 equ 0036h
DIGIT8 equ 0037h
DIGIT9 equ 0038h
DIGIT10 equ 0039h
count_1 equ 003Ah
count_2 equ 003Bh
bin_HH equ 003Ch
bin_HL equ 003Dh
bin_LH equ 003Eh
bin_LL equ 003Fh
adr_i2c equ 0040h ;регистры подпрограммы передачи данных интерфейса i2c
tmp_i2c equ 0041h
slave_adr equ 0042h
data_i2c equ 0043h
AC1_LH equ 00A0h ;регистры хранения калибровочных констант датчика BMP180
AC1_LL equ 00A1h
AC2_LH equ 00A2h
AC2_LL equ 00A3h
AC3_LH equ 00A4h
AC3_LL equ 00A5h
AC4_LH equ 00A6h
AC4_LL equ 00A7h
AC5_LH equ 00A8h
AC5_LL equ 00A9h
AC6_LH equ 00AAh
AC6_LL equ 00ABh
B1_LH equ 00ACh
B1_LL equ 00ADh
B2_LH equ 00AEh
B2_LL equ 00AFh
MB_LH equ 00B0h
MB_LL equ 00B1h
MC_LH equ 00B2h
MC_LL equ 00B3h
MD_LH equ 00B4h
MD_LL equ 00B5h
X1_HH equ 00B6h ;регистры для расчета значений температуры и давления датчика BMP180
X1_HL equ 00B7h
X1_LH equ 00B8h
X1_LL equ 00B9h
X2_HH equ 00BAh
X2_HL equ 00BBh
X2_LH equ 00BCh
X2_LL equ 00BDh
X3_HH equ 00BEh
X3_HL equ 00BFh
X3_LH equ 00C0h
X3_LL equ 00C1h
B3_HH equ 00C2h
B3_HL equ 00C3h
B3_LH equ 00C4h
B3_LL equ 00C5h
B5_HH equ 00C6h
B5_HL equ 00C7h
B5_LH equ 00C8h
B5_LL equ 00C9h
B4_HH equ 00CAh
B4_HL equ 00CBh
B4_LH equ 00CCh
B4_LL equ 00CDh
B6_HH equ 00CEh
B6_HL equ 00CFh
B6_LH equ 00D0h
B6_LL equ 00D1h
REGA3 equ 00D2h
REGA2 equ 00D3h
REGA1 equ 00D4h
REGA0 equ 00D5h
REGB3 equ 00D6h
REGB2 equ 00D7h
REGB1 equ 00D8h
REGB0 equ 00D9h
REGC3 equ 00DAh
REGC2 equ 00DBh
REGC1 equ 00DCh
REGC0 equ 00DDh
MTEMP equ 00DEh
MCOUNT equ 00DFh
P_HH equ 00E0h ;регистры хранения значения давления
P_HL equ 00E1h
P_LH equ 00E2h
P_LL equ 00E3h
P_M equ 00E4h ;регистры хранения значения давления в мм рт.ст.
P_L equ 00E5h
T_HH equ 00E6h ;регистры хранения значения температуры
T_HL equ 00E7h
T_LH equ 00E8h
T_LL equ 00E9h
tmp equ 00EAh ;вспомогательный регистр счета
flag equ 007Fh ;регистр флагов
#DEFINE res_lcd PORTB,4 ;присвоение названий линиям ввода-вывода
#DEFINE cs PORTB,5 ;для работы с LCD дисплеем Nokia 5110
#DEFINE dat_com PORTB,6 ;
#DEFINE sdata PORTB,7 ;
#DEFINE sclk PORTA,1 ;
#DEFINE sda PORTB,2 ;линия SDA для подключения датчика BMP180
#DEFINE scl PORTB,3 ;линия SCL для подключения датчика BMP180
#DEFINE sda_io TRISB,2 ;линия направления SDA
#DEFINE scl_io TRISB,3 ;линия направления SCL
#DEFINE led PORTA,0 ;светодиод ошибки i2c
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b’00000010′ ;установка значений выходных защелок порта A
movwf PORTA ;
movlw b’00110000′ ;установка значений выходных защелок порта B
movwf PORTB ;
movlw b’00000111′ ;выключение компараторов
movwf CMCON ;
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b’00001111′ ;настройка линий ввода\вывода порта B
movwf TRISB ;RB0,RB1 — на вход, остальные на выход
movlw b’11111100′ ;настройка линий ввода\вывода порта A
movwf TRISA ;RA0,RA1 — на выход, остальные на вход
bcf STATUS,RP0 ;выбрать 0-й банк
clrf flag ;сброс регистра флагов
call init_lcd ;вызов подпрограммы инициализации дисплея
call clear_lcd ;вызов подпрограммы очистки дисплея
call viv_not ;вывод на дисплей сообщения «— «
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw b’11101110′ ;адрес устройства(BMP180)
movwf slave_adr
call paus ;вызов подпрограммы паузы 5,3 мс
movlw .22 ;загрузка констант из датчика (22 байта) во 2-й банк ОЗУ
movwf tmp_i2c ;
movlw 0xAA ;запись адреса ячейки с которой начнется чтение
movwf adr_i2c ;
bsf flag,3 ;установка флага загрузки констант из датчика
call read_i2c ;вызов подпрограммы чтения по I2C
call err_prov ;проверка на ошибки записи/чтения I2C
bmp_1 call rd_temp ;вызов подпрограммы чтения температуры с датчика BMP180
movlw data_i2c ;загрузка температуры в регистры T
movwf FSR
bsf STATUS,RP0
movf INDF,W
movwf T_LH
incf FSR,F
movf INDF,W
movwf T_LL
bcf STATUS,RP0
movlw .0 ;установка точности измерения давления (16-19бит, 0-3(oss))
movwf oss
call rd_pres ;вызов подпрограммы чтения давления с датчика BMP180
movlw data_i2c ;загрузка давления в регистры P
movwf FSR
bsf STATUS,RP0
movf INDF,W
movwf P_HL
incf FSR,F
movf INDF,W
movwf P_LH
incf FSR,F
movf INDF,W
movwf P_LL
clrf P_HH
bcf STATUS,RP0
movf oss,W ;смещение результата преобразования в регистрах P
sublw .8 ;в соответвтвии с точностью преобразования
bsf STATUS,RP0
movwf tmp
bmp_2 bcf STATUS,C
rrf P_HH,F
rrf P_HL,F
rrf P_LH,F
rrf P_LL,F
decfsz tmp,F
goto bmp_2
call rash_T_P ;вызов подпрограммы расчета температуры и давления
bsf STATUS,RP0 ;копирование расчитанной температуры в регистры bin
movf T_HH,W
bcf STATUS,RP0
movwf bin_HH
bsf STATUS,RP0
movf T_HL,W
bcf STATUS,RP0
movwf bin_HL
bsf STATUS,RP0
movf T_LH,W
bcf STATUS,RP0
movwf bin_LH
bsf STATUS,RP0
movf T_LL,W
bcf STATUS,RP0
movwf bin_LL
call bin2dec ;вызов подпрограммы преобразования двоичного числа в десятичное
call ust_cur_1 ;установка курсора на 1-й строке LCD дисплея
call vivod_temp ;вывод значения температуры на LCD
bsf STATUS,RP0 ;копирование расчитанного давления в регистры bin
movf P_HH,W
bcf STATUS,RP0
movwf bin_HH
bsf STATUS,RP0
movf P_HL,W
bcf STATUS,RP0
movwf bin_HL
bsf STATUS,RP0
movf P_LH,W
bcf STATUS,RP0
movwf bin_LH
bsf STATUS,RP0
movf P_LL,W
bcf STATUS,RP0
movwf bin_LL
call bin2dec ;вызов подпрограммы преобразования двоичного числа в десятичное
call ust_cur_3 ;установка курсора на 3-й строке LCD дисплея
call vivod_p ;вывод значения давления (Паскали) на LCD
bsf STATUS,RP0
movf P_M,W ;копирование расчитанного давления (мм рт. ст) в регистры bin
bcf STATUS,RP0
movwf bin_LH
bsf STATUS,RP0
movf P_L,W
bcf STATUS,RP0
movwf bin_LL
clrf bin_HL
clrf bin_HH
call bin2dec ;вызов подпрограммы преобразования двоичного числа в десятичное
call ust_cur_2 ;установка курсора на 2-ю строку LCD дисплея
call viv_p_mm ;вывод значения давления (мм рт.ст.) на LCD
call paus1s ;пауза 1 сек
goto bmp_1 ;переход на метку bmp_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрорамма чтение температуры и давления с датчика BMP180 по интерфейсу I2C
rd_temp movlw 0x2E ;загрузка команды на преобразование температуры
movwf data_i2c
goto rd_bmp1
rd_pres movlw 0x34 ;загрузка команды на преобразование давления в зависимости
movwf data_i2c ;от точности преобразования результата
movf oss,W
movwf perem
incf perem,F
pres_2 decfsz perem,F
goto pres_1
goto rd_bmp1
pres_1 movlw 0x40
addwf data_i2c,F
goto pres_2
rd_bmp1 movlw .1 ;передача команды на преобразование по I2C
movwf tmp_i2c ;передача одного байта по I2C
movlw 0xF4 ;
movwf adr_i2c ;запись адреса ячейки с которой начнется чтение
call write_i2c ;вызов подпрограммы записи по I2C
call err_prov ;проверка на ошибки записи/чтения I2C
rd_bmp2 call paus ;вызов подпрограммы паузы 5,3 мс
movlw .1 ;проверка окончания преобразования
movwf tmp_i2c ;передача одного байта по I2C
movlw 0xF4 ;
movwf adr_i2c ;запись адреса ячейки с которой начнется чтение
call read_i2c ;вызов подпрограммы записи по I2C
call err_prov ;проверка на ошибки записи/чтения I2C
movlw data_i2c
movwf FSR
btfsc INDF,5 ;проверка бита готовности результата
goto rd_bmp2 ;преобразование не окончено: переход на метку rd_bmp2
movlw .3 ;чтение результата преобразования
movwf tmp_i2c ;передача 3-х байта по I2C
movlw 0xF6 ;
movwf adr_i2c ;запись адреса ячейки с которой начнется чтение
call read_i2c ;вызов подпрограммы чтения по I2C
call err_prov ;проверка на ошибки записи/чтения I2C
return ;выход из подпрограммы
err_prov btfss flag,6 ;проверка ошибок передачи данных I2C
return ;нет ошибок: выход из подпрограммы
err_1 bsf led ;ошибка: включить светодиод led
goto err_1 ;переход на метку err_1: зацикливание программы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
rash_T_P bsf STATUS,RP0 ;переключение во 2-й банк
clrf REGA3 ;загрузка значения температуры UT в REGA
clrf REGA2
movf T_LH,W
movwf REGA1
movf T_LL,W
movwf REGA0
clrf REGB3 ;загрузка значения константы AC6 в REGB
clrf REGB2
movf AC6_LH,W
movwf REGB1
movf AC6_LL,W
movwf REGB0
call subtract ;вычитание UT-AC6
clrf REGB3 ;загрузка значения константы AC5 в REGB
clrf REGB2
movf AC5_LH,W
movwf REGB1
movf AC5_LL,W
movwf REGB0
call multiply ;умножение (UT-AC6)*AC5
movlw .15 ;деление [(UT-AC6)*AC5]/2^15 = X1
movwf tmp
tdel_a1 rlf REGA3,W
rrf REGA3,F
rrf REGA2,F
rrf REGA1,F
rrf REGA0,F
decfsz tmp,F
goto tdel_a1
movf REGA3,W ;сохранение результата в регистре X1
movwf X1_HH
movf REGA2,W
movwf X1_HL
movf REGA1,W
movwf X1_LH
movf REGA0,W
movwf X1_LL
btfsc MD_LH,7 ;загрузка значения константы MD в REGB
goto tzag_a1
clrf REGB3
clrf REGB2
goto tzag_a2
tzag_a1 movlw .255
movwf REGB3
movlw .255
movwf REGB2
tzag_a2 movf MD_LH,W
movwf REGB1
movf MD_LL,W
movwf REGB0
call add ;сумма X1+MD
movf REGA0,W ;копирование результата (X1+MD) в REGB
movwf REGB0
movf REGA1,W
movwf REGB1
movf REGA2,W
&
radiolaba.ru