Барометр на микроконтроллере своими руками – Барометр-сигнализатор для метеозависимых людей БС-1 — Микроконтроллеры — Схемы на МК и микросхемах

Своими руками
alexxlab

Содержание

РадиоКот :: Простой барометр/термометр на МК.

Простой барометр/термометр на МК.

Всем привет!

Во первых хочу поздравить Кота с днем рождения! Процветать!

Теперь к статье.

«Простой барометр/термометр на МК»

Данная конструкция была разработана по просьбе моего друга — любителя автомобильных путешествий и 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.

Рисунок 1. Внешний вид устройства

 

Пользователь самостоятельно задает граничные значения – минимальный и максимальный пороги.
В случаях если атмосферное давление превысит максимальный порог или опустится ниже минимального порога, то устройство будет подавать прерывистые звуковые сигналы и световые сигналы «Порог».
После пятикратного повтора звуковых сигналов звук отключается, при этом световой сигнал будет подаваться до возврата значения атмосферного давления в заданные границы.

Пользователь задает величину контролируемого скачка атмосферного давления за устанавливаемый интервал времени.
В случаях если атмосферное давление в заданный интервал времени отклонилось на величину превышающую контролируемый скачок, то устройство будет подавать прерывистые звуковые сигналы и световые сигналы «Скачок».

После пятикратного повтора звуковых сигналов звук отключается, при этом световой сигнал будет подаваться до возврата значения атмосферного давления в условия, когда скачок считается неконтролируемым.
Значения атмосферного давления представлены в устройстве в «мм рт. ст.».

Демонстрационный ролик

 

Принципиальная схема устройства.

 

Схема электрическая принципиальная устройства показана на рисунке (Рисунок 2).
Устройство собрано на микроконтроллере ATmega8.
Резистор R1 и конденсатор C3 обеспечивают аппаратный сброс МК при подаче питания.
Конденсаторы C2 и C1 защищают цепи питания от высокочастотных помех и бросков питания.

Значение атмосферного давления поступает от датчика BMP1 (GY68 BMP180).
Управление датчиком давления осуществляется по интерфейсу TWI (I2C).

Входы датчика подтянуты к напряжению питания резисторами R8 и R10.

Для отображения информации используется жидкокристаллический экран Nokia 5110. На экране отображается информация о текущем атмосферном давлении, а также параметры настройки устройства.
Оперативная индикация состояния атмосферного давления осуществляется с использованием светодиодов VD1..3 («Норма», «Порог», «Скачек»).
Звуковая сигнализация осуществляется с помощью усилителя низкой частоты на транзисторах VT1..2 и громкоговорителя SP1. Громкость звучания может быть отрегулирована с помощью переменного резистора R5.

Настройка устройства осуществляется с использованием кнопок SA2(«Установка»), SA3(«+»), SA4(«-»).
При нажатии на кнопку SA5(«Экран») отображается главный экран с текущим значением атмосферного давления.

Внимание! Фьюзы для настройки МК: HIGH=0xD9, LOW=0xE1.

Рисунок 2. Схема электрическая принципиальная

 

Программное обеспечение.

Программа для МК написана на языке Си в среде AtmelStudio (Version 7.0.1006).

Код программы приведен в Приложении (SignalBarometer.rar Архив проекта Atmel Studio 7 на Си).
В целях снижения энергопотребления устройства применен метод «засыпания» МК в режиме «power-save». При этом потребляемый ток в режиме сна уменьшается до 20мкА.
По расчетам это позволяет использовать две батареи типа АА по 1.5 Вольт в течение 4 месяцев.
Для пробуждения МК из режима «power-save» используется внутренний асинхронный таймер-счетчик №2, который работает постоянно.
Задающий генератор таймера счетчика использует кварцевый резонатор Y1 с частотой резонанса 32768Гц.

Таймер-счетчик №2 настроен так, что каждые 8 секунд происходит его переполнение и вызов прерывания, которое «будит» МК.
МК после пробуждения от таймера-счетчика №2 выясняет не прошло ли 10 минут с предыдущего пробуждения. Если нет, то МК выдает световой сигнал «Норма», «Порог» или «Скачок» в зависимости от условия, сложившегося после предыдущего измерения, и снова засыпает на 8 секунд.

Если с момента предыдущего измерения прошло 10 минут, то МК подает команду датчику давления на проведение измерений, получает ответ от датчика, обрабатывает данные, сравнивая полученное значение с пороговыми значениями или условиями фиксации скачка, выдает световой сигнал «Норма», «Порог» или «Скачок» и звуковой сигнал, если это необходимо. И снова «засыпает» на 8 секунд.

Вторым источником пробуждения МК является внешнее прерывание на входе INT1, которое возникает при нажатии на кнопку «Экран».
МК, пробудившись и выяснив что его «разбудила» кнопка «Экран», включает жидкокристаллический дисплей Nokia 5110 и высвечивает на нем текущее значение атмосферного давления и другую информацию.
Экран будет отображать информацию до момента отпускания кнопки «Экран». После отпускания кнопки «Экран» МК выключает дисплей путем выдачи ему команды «power-down», затем МК «засыпает» сам.

Третьим, и последним, источником пробуждения МК является внешнее прерывание на входе INT0, которое возникает при нажатии на кнопку «Установка».

МК, пробудившись и выяснив что его «разбудила» кнопка «Установка», включает жидкокристаллический дисплей Nokia 5110 и высвечивает на нем параметры настройки устройства.
Повторное нажатие на кнопку «Установка» приводит к перемещению курсора на следующий параметр. Нажатие кнопок «+» и «-» приводит к изменению значения параметра, на котором установлен курсор.
После нажатия кнопки «Установка» на последнем параметре МК выключает дисплей и «засыпает» до очередного пробуждения.

Конструкция устройства.

Устройство выполнено в корпусе распределительной коробки «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

Related Post