Термометр с самописцем на atmega8

Термометр на ATmega8 и датчике DS18B20

Доброго дня уважаемые друзья!
Приветствую Вас на сайте «Мир микроконтроллеров»

Схема термометра на ATmega8 и DS18B20
Микроконтроллер ATmega8
Цифровой термометр DS18B20
Семисегментный светодиодный индикатор
Алгоритм программы термометра
Программа цифрового термометра на DS18B20

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

Но дело в том, что эта конструкция — основа для дальнейшего развития проекта с использованием цифрового датчика температуры DS18B20.

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

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

Схема термометра на ATmega8 и датчике температуры DS18B20

Давайте посмотрим на схему термометра:

Как видите, схема очень проста, используется только необходимый минимум деталей.
В схеме, для индикации показаний, применен семисегментный трехразрядный светодиодный индикатор (описание и подключение семисегментных индикаторов к микроконтроллеру).

Напряжение питания конструкции — 5 вольт.

Если вы примените микроконтроллер с низковольтным питанием (линейка микроконтроллеров ATmega), то можно и понизить питающее напряжение конструкции, но в этом случае, возможно придется уменьшить номинал гасящих сопротивлений в сегментах индикатора. Приблизительно номиналы сопротивлений можно брать: — при питании 5 вольт — 200-300 Ом — при питании 2,7 — 3 вольта — 100-150 Ом

(здесь вы можете ознакомиться с расчетом гасящих сопротивлений для семисегментных индикаторов)

(здесь вы можете ознакомиться с маркировкой микроконтроллеров)
Транзисторы — любые, маломощные, структуры NPN.
Датчик температуры — DS18B20 (ознакомиться с датчиком температуры DS18B20)
Семисегментный индикатор — любой трехразрядный с общим катодом. Если вы захотите применить другие, с общим анодом, тогда придется заменить транзисторы на PNP и внести изменения в программу (заменить массив двоичных кодов для вывода цифр на индикатор). Я применил индикатор красного цвета свечения, и заодно, для следующей схемы, приготовил такой-же, но голубого цвета свечения.

Источник: https://microkontroller.ru/shemyi-konstruktsii-na-mikrokontrollerah/termometr-na-atmega8-i-datchike-ds18b20/

Термометр – регистратор для компьютера на микроконтроллере Atmega8 и датчиках DS18B20

Этот цифровой термометр предназначен для длительного измерения и записи на жесткий диск компьютера информации о температуре с четырех датчиков, например в разных помещениях либо в четырех точках какого-либо устройства или конструкции. 
   

Посмотреть видео про этот проект

Устройство разрабатывалось для применения в системе регистрации данных для контроля температуры в нескольких точках помещения. Такой термометр можно использовать в быту, в качестве узла метеорологической станции или в промышленных условиях. Для радиолюбителей, осваивающих конструирование устройств   на
  

микроконтроллерах, повторение этой конструкция будет полезно еще и с точки зрения сопряжения самодельных устройств с персональным компьютером.

Управляющая программа (“прошивка”) микроконтроллера Atmega8, используемого в термометре, написана на языке Си в довольно удобном на мой взгляд компиляторе mikroC PRO for AVR, который разрабатывается очень позитивной Сербской компанией Mikroelectronica.

Записывающая программа для компьютера TLogger написана на языке Delphi  c использованием бесплатной компоненты BComPort для работы с последовательным портом компьютера. Опрос  данных с термодатчиков осуществляется с частотой 1 Гц (один раз в секунду) и передается в компьютер по интерфейсам RS-232 или RS-485 со скоростью со стандартной скоростью 9600.

Узлы для работы с RS-232 и RS-485 встроены в схему термометра и для связи с компьютером можно использовать любой из них или оба одновременно. Тогда находящийся рядом с термометром компьютер можно подключить по RS-232, а более удаленную машину – по RS-485. В этом случае можно вести запись данных на два компьютера одновременно.

Передавать данные чаще чем один раз в секунду не имеет смысла, так как время измерения для датчика 18Х20 в 12 битном режиме составляет около 0,75 секунды. Интервал измерений 1 секунда очень удобен для последующей обработки данных.

Поскольку микроконтроллер Atmega8 передает данные о температуре в виде обыкновенных текстовых строк, для их приема можно использовать вообще любую программу – терминал.Программа TLogger принимает данные из платы термометра, и записывает их на жесткий диск компьютера в виде обычного текстового файла.

В дальнейшем эти данные легко преобразовать в графики или другие форматы представления информации.  В качестве датчиков температуры использованы очень распространенные цифровые 12-битные термодатчики DS18B20. Эти устройства очень надежны, обладают достаточным для наших целей разрешением (0,0625 градуса по Цельсию) и просты в использовании.

    Цифровой датчик температуры DS18B20Датчики обмениваются информацией с управляющим микроконтроллером по интерфейсу 1-Wire. Это несложный в программировании цифровой последовательный протокол, который, к тому же, поддерживается практически всеми “микроконтроллерными” компиляторами на уровне встроенных библиотек.

Так что при использовании такого датчика радиолюбителю не нужно вдаваться в тонкости работы протокола, высчитывать точные временные интервалы, достаточно просто подключить встроенную в компилятор библиотеку и почитать документацию по ее использованию.

    Связь микроконтроллера с устройствами по шине 1-WireКак видно из рисунка, несколько термодатчиков можно “повестить” на один единственный порт микроконтроллера и работать с каждым датчиком в отдельности, обращаясь к нему по его уникальному серийному номеру, который записан в память датчика (т.н. Scratchpad).

Тогда придется предварительно считать эти номера и записать их в прошивку микроконтроллера, либо использовать довольно хитроумный алгоритм для определения номеров датчиков на шине 1-Wire в момент включения устройства.

“Хитроумность” этого алгоритма связана с тем, что все датчики “висят” на одном и том же проводе данных и для правильного определения их нужно использовать программные “танцы с бубном”, работающие по методу исключений.  Недостаток первого метода заключается в том, что прошивка становится привязанной к датчикам.

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

В моем случае решено было отказаться от обоих методов и для связи с каждым датчиком использовать отдельный порт микроконтроллера, поэтому программа на Си получилась очень простой и короткой. Поскольку термодатчиков всего 4, то используются 4 порта ввода/вывода микроконтроллера Atmega8. Несмотря на это, у нашей “меги ” осталось еще много свободных портов, которые можно использовать для других целей, или подключить к ним дополнительные датчики температуры (если необходимо проводить измерения более чем в четырех точках). При желании можно всегда перейти к варианту с включением датчиков на один провод. Для этого придется только изменить прошивку устройства, печатную плату и схему менять не нужно.   Далее привожу принципиальную схему аппаратной части многоканального термометра – регистратора (кликните на схеме чтобы ее увеличить. Схема откроется в отдельном окне браузера).   

Принципиальная схема аппаратной части термометра – регистратора
    

Шлейф для подключения термодатчиков необходимо соединить с контактами  (слева вверху  схемы) в таком порядке:
TS_5V  – к выводам VDD всех датчиков 18B20
TSD1…TSD4 – к выводам данных DQ датчиков от 1 до 4 соответственно.
TS_GND – к выводам земли GND всех датчиков

Кварцевый резонатор использован на 8 Мгц. Напряжение питания +5V подается на схему со стабилизатора напряжения, собранного на микросхеме U2 типа 7805. Это довольно мощная микросхема, она используется здесь, так как приемопередатчик интерфейса RS-485 в режиме передачи потребляет сравнительно большой ток.

Если вы не планируете использовать интерфейс RS-485, то микросхему MAX485 устанавливать не нужно. Тогда можно обойтись маломощным стабилизатором 78L05 в корпусе TO-92. Как вы уже догадались, на микросхеме U3 типа MAX485  и резисторе R2 собран узел интерфейса RS-485. Такой интерфейс нужно использовать если расстояние между платой термометра и компьютером больше нескольких метров.

По интерфейсу  RS-485 расстояние может быть до километра. На небольшом расстоянии можно использовать порт RS-232 а микросхему  MAX485 и резистор  R2 на плату не устанавливать. С программной точки зрения RS-232 и RS-485 – одно и то же, отличаются они только физическими параметрами сигналов в линии связи.

На микросхеме U4 типа MAX232 (MAX202) собран узел согласования UART интерфейса микроконтроллера в соответствии со стандартами интерфейса RS-232. С выхода MAX232 сигнал подается на стандартный разъем типа DB9 для соединения с COM портом компьютера.

Нужно сказать, что в современных компьютерах, и особенно ноутбуках сейчас уже не оснащаются портами RS-232, хотя вы можете найти его в десктопных материнских платах в виде разъема на плате, то есть порт может присутствовать в вашем компьютере, но не быть выведенным на его корпус. Можно использовать дешевый переходник USB-TO-COM, купленный в Китае.

Он будет также хорошо работать с нашими конструкциями на микроконтроллерах, как и настоящий “железный” RS-232. При покупке переходника следует отдавать предпочтение устройствам, основанным на микросхеме FTDI, с ними меньше всего проблем, конечно если у вас будет возможность идентифицировать микросхему, на которой сделан переходник. 

Переходник Usb – COM из Китая
   

Так же, как и в случае с RS-485, если вы не планируете использовать RS-232, а думаете использовать только 485,  то можно не устанавливать микросхему MAX232 и окружающие её конденсаторы обвязки и разъем DB9F.

Несмотря на то, что микроконтроллер нашего термометра в данной конструкции работает только на передачу, схема сделана так, что при делании ее можно использовать и на прием данных, то есть пот RXD контроллера соединен с соответствующими цепями микросхем MAX232  и MAX485, ножки управления Прием-передача микросхемы MAX485 соединены с портом PB5 контроллера и задействован пин 3 (RX) разъема DB9F. Это сделано для того, чтобы при желании можно было реализовать прием данных от компьютера в будущих версиях прошивки или для использования этой платы как основы для других конструкций на микроконтроллере Atmega8. Светодиод LED1 мигает в процессе работы платы. Опрос датчиков температуры и передача данных в порт осуществляется по прерыванию от переполнения таймера микроконтроллера с частотой ровно 1 герц, то есть один раз в секунду. Светодиод горит когда датчики измеряют температуру и гаснет в те моменты, когда производится передача информации в компьютер по последовательному интерфейсу.

Печатная плата термометра

Печатная плата устройства разведена в программе DipTrace и изготовлена методом фрезеровки на моем станке с ЧПУ. Проект для DipTRace (плату и схему) вы найдете в архиве в конце статьи. В том же архиве будет программа TLogger и прошивка микроконтроллера с исходниками для компилятора MikroC Pro For Avr

Печатная плата термометра вид со стороны меди

Печатная плата термометра вид со стороны компонентов

С этим программатором прекрасно работает удобная бесплатная программа AVRDUDESHELL, скачать которую можно по этой ссылке.Для программирования микроконтроллеров я использую вот такой адаптер с панелькой ZIF. В принципе, в качестве адаптера можно использовать обычную панельку DIP28, соединив соответствующие ножки с выводами программатора. Но лучше конечно сделать адаптер.   

Адаптер с ZIF панельной и китайский программатор USBAsp

Устанавливаем микроконтроллер в панельку адаптера, подключаем адаптер к программатору, а программатор – в USB порт компьютера. Запускаем программу AVRDUDESHELL и выбираем в списке устройств наш Atmega8.
  

После этого загружаем в программу прошивку – файл TLoggerMega8.hex. Прежде чем прошить микроконтроллер необходимо правильно установить фьюзы (биты конфигурации) микроконтроллера. Здесь нужно действовать очень внимательно, так как установив неправильные биты можно “залочить” микроконтроллер, тогда оживить его обычными средствами не получится. Установите фьюзы так, как показано на этом изображении:  Устанавливаем фьюзы как на картинке и заливаем фюзы и прошивку в микроконтроллер. После этого можно устанавливать контроллер в панельку на собранной плате термометра. При включении питания устройства на плате должен замигать светодиод. Это говорит о том, что микроконтроллер термометра успешно запустился. Теперь можно подключить плату к компьютеру кабелем RS232, запустить программу TLogger. В программе TLogger нужно выбрать нужный COM порт. В моем случае – это COM3  BaudRate нужно установить в 9600 – именно с такой скоростью передает данные прошивка нашего микроконтроллера. После этого нажимаем кнопку Connect.    Если всё хорошо, программа начнет принимать строки данных из нашего термометра. На скриншоте видно, что все данные равны -00.0625. Такая картина наблюдается если не подключить к плате термодатчики. У меня сейчас термодатчики не подключены. Давайте их подключим. Я сделал вот такой тестовый шлейф с четырьмя датчиками DS18B20.    Потом первый датчик я решил припаять на шлейф из трех проводов, чтобы можно было поместить его за окно на улицу. Теперь программа показывает реальную температуру за окном и у меня в комнате:    Для запуска сбора данных нажимаем кнопку Start Data Logger. Теперь данные в окне программы окрашены в зеленый цвет. Это означает что началась запись в файл.    Файл будет записан в папку, которую мы должны предварительно выбрать, нажав на кнопку Log Folder. Имя файла будет создано автоматически, в соответствии в датой и временем начала записи. Для того чтобы остановить запись нажмите Stop Data Logger. Просмотреть записанный файл можно сразу же, нажав на кнопку Open Last File. Только что записанный файл будет открыт в блокноте Windows.

ВНИМАНИЕ! Файл проекта для симуляции в PROTEUS 8 находится в папке с исходниками прошивки термометра. Файл называется TLoggerMega8.pdsprj
  

Источник: https://musbench.com/e_digital/TLogger.html

ЧАСЫ-ТЕРМОМЕТР НА МИКРОКОНТРОЛЛЕРЕ ATMEGA8

Источник: http://radioskot.ru/publ/izmeriteli/chasy_termometr_na_mikrokontrollere_atmega8/15-1-0-1182

USB термометр на микроконтроллере ATmega8

Конкурс начинающих радиолюбителей
“Моя радиолюбительская конструкция”

Схема и программное обеспечение простого  USB  термометра на микроконтроллере ATmega8, который может собрать своими руками и начинающий радиолюбитель

Конкурсная конструкция начинающего радиолюбителя:
“USB термометр на микроконтроллере ATmega8″

Здравствуйте уважаемые друзья и гости сайта! Представляю на ваш суд вторую конкурсную работу.

Автор конструкции – Григорьев Илья Сергеевич.

Всем добрый день! Захотелось мне собрать термометр для того, чтобы знать температуру или дома или за окном. Сторона у меня солнечная и обычный термометр очень врет, нагреваясь.
Стал рыть интернет. Как всегда много ненужного, слишком сложного, затратного.
Наконец, я нашел схему по душе, по которой и стал делать ЮСБ термометр.

Итак, вот схема:

Для сборки нам понадобятся:
♦ МС Атмега 8 и кроватка для нее на 28 ног
♦ Датчик температуры DS18B20
♦ Резисторы(у меня 0.5Вт):
– 10к
– 4,7к
– 68ом *2шт
– 1,5к
– 200ом
♦ Кондеры
– 22пФ *2шт
– 100мкФ на 16В электролит
♦ 2 стабилитрона на 3.6В
♦ Кварцевый резонатор 12MHz
♦ Светодиод
♦ Кусок одностороннего текстолита 5*5см

Начинаем все с разметки на текстолите, потом вырезаем
Кстати, раньше я долго мучился вырезанием нужных кусков канцелярским ножиком, было это долго, муторно… недавно я заказал на ebay отрезные алмазные круги для дремеля. За секунду…вввжик и отрезано!

10штук вот таких кругов 100 рублей (для поиска- 10X 20mm Emery Diamond Coated Double Side Cutting Discs with 2 Joint Lever).

Затем, печатаем на журнале схему, потом утюгом нагреваем, далее отмачиваем:

Потом травим, оттираем тонер, сверлим:

И потом начинаем собирать:

Atmega 8-16PU в кроватке:

Отмываем плату от флюса, т.к. я использовал активный да и очень вид портит:

Далее я взялся за датчик. Я решил сделать 2 датчика. Первый будет короткий и находиться в комнате. Второй я сделаю длинным и выставлю его на улицу.

Вставляем датчик в разъем, согласно распиновке.

Теперь нам надо прошить Атмегу. Берем ранее изготовленный мной программатор на фт232рл и заливаем прошивку.
В SinaProg нам надо выставить фьюзы:

ОБЯЗАТЕЛЬНО! Перед подключением проверяем плату на наличие КЗ!!!

Вставляем плату в юсб и у нас сразу же появляется неизвестное устройство:

Заходим в диспетчер устройств, находим неизвестное устройство и обновляем дрова. Во время установки появится окно, где выбираем – “Все равно установить этот драйвер”

После этого в диспетчере устройств появится новое устройство:

Источник: http://radio-stv.ru/nachinayushhim-radiolyubitelyam/konkurs-dlya-nachinayushhih-radiolyubitel/usb-termometr-na-mikrokontrollere-atmega8

Часы, будильник, термометр на ATmega8, DS1307, DS18B20

Привет всем читателям и почитателям сайта Радиосхемы! Сегодня хочу поделиться с вами очередной простенькой конструкцией «Часы-термометр». Немного предыстории: вечером очень плохо видно показания уличного термометра, чтобы разглядеть положение стрелки, необходимо довольно долго вглядываться и иной раз пользоваться фонариком.

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

Схем данного устройства в сети полно, но я, как человек относящийся к семейству Радиолюбителей, решил собрать свою. Так как с недавних пор пытаюсь осваивать микроконтроллеры, то выбор пал на широко распространённый и дешёвый МК Atmega8. Далее была изготовлена плата по технологии ЛУТ, после чего уже приступил к программной части.

Программа написана на языке Си с помощью среды разработки CodeVisionAVR.

Схема принципиальная электрическая

В одном устройстве объединено две функции: собственно измерение температуры и времени (часы). Индикация производится попеременно, сменяясь через десять секунд.

Для настройки часов используется две кнопки, аналогично простым китайским электронным часам: одна отвечает за выбор параметра, вторая за его изменение.

Питается устройство от сети с помощью постоянного стабилизированного источника тока напряжением пять вольт (плата от зарядного устройства телефона).

Датчиком температуры является микросхема DS18B20. Так как в устройстве «Часы-термометр» нет своей батареи, при пропадании питания естественно показания будут сбиваться.

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

Корпусом самодельного измерителя температуры послужила подходящая коробочка от запонок. В неё была помещена сама плата часов-термометра и плата вытащенная из телефонного зарядника. Датчик DS18B20 сделан выносным и подсоединяется через разъём.

Список необходимых деталей

  • Микроконтроллер Atmega8 – 1шт.
  • Кварц  32768 Гц – 1 шт.
  • Датчик температуры DS18B20 – 1шт.
  • Семи сегментный индикатор(4 – разряда) – 1 шт.
  • Резисторы SMD типоразмера 0805:
  • 620 Ом – 8шт.
  • 0 Ом (перемычка) – 1шт.
  • 4,7 кОм – 1шт.
  • Тактовые кнопки – 2 шт.

Видео работы устройства на Ютуб-канале

Часы, будильник, термометр | Часы, Будильники | Будильник, Часы на МК

Более четырех лет назад я собрал простые часы на ATmega8.

Все это время они исправно работали и приносили пользу, особенно в темнее время суток.

Но мне показалось, что такой микроконтроллер, как ATmega8 может делать намного больше, чем просто подсчитывать колебания кварца и выводить их в виде времени.

Захотел, чтобы новые часы информировали не только о текущем времени, но и о температуре в помещении, где они находятся.

Задался поиском подобных схем в интернете, отталкиваясь от уже имеющихся комплектующих, а именно: микроконтроллер ATmega8 и светодиодный индикатор с общим катодом.

Отличное решение нашлось на странице, которое предоставил пользователь Soir, за что ему большая благодарность.

Схема часов не сложная, плюс, я сделал в ней некоторые упрощения. Что получилось, я привожу ниже. Оригинальная и упрощенная схема, разведенная в Proteus, имеется в АРХИВЕ.

В данном архиве приведены также прошивки ATmega8, дающие разный функционал часам, пример выставления фьюзов, полная инструкция по настройке часов и их возможностях, а так же разведенная печатная плата в формате *.lay6.

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

Хочу признать, что часы получились отлично. В часах есть будильник (как разовый, так и по дням недели), термометр. Для регулировки освещения индикатора в дневное и ночное время, могут использоваться как предустановки в часах, так и специальный датчик (фоторезистор). Есть возможность коррекции времени, если оно отстает или спешит; цифровая коррекция отображения температуры с градацией 0,1ºС.

Большим плюсом является наличие сохранения настроек в энергонезависимой памяти микроконтроллера. Помимо этого, применение микросхемы DS1307, в паре, с батарейкой, делают часы абсолютно энергонезависимыми.

Батарейка выполняет дежурное питание часов.

Теперь, сколько бы поставка электричества у Вас не обрывалась, при ее возобновлении, часы буду идти, без каких-либо изменений и отклонений, даже останется заведенным будильник(и).

В эстетическом плане, данные часы, также хороши. Есть более десяти видов визуальных эффектов смены отображения времени и температуры. Кстати, эти эффекты можно выбирать самостоятельно или выставить их отображение в случайном порядке.

Страницы:

1 2 3

Необходимо авторизоваться, чтобы комментировать.

Источник: http://best-chart.ru/samodelnye-elektronnye-chasy-budilniki/chasy-budilnik-termometr-na-atmega8-ds1307-ds18b20.html

Двуканальный термометр-термостат на ATmega8.DS18B20

Источник: http://radio-bes.do.am/publ/ustrojstva_na_mk/dvukanalnyj_termometr_termostat_na_atmega8_ds18b20/2-1-0-50

Часы, термометр, барометр, гигрометр в одном флаконе

Источник: http://AVRproject.ru/publ/chasy_termometr_barometr_gigrometr_v_odnom_flakone/1-1-0-110

Барометр и термометр на ATmega8 (с печатной платой)

Температура и давление окружающего воздуха оказывают большое влияние на самочувствие человека. Их важно знать и в походе, и на даче, и дома. Предлагаемый компактный прибор как нельзя лучше подходит для этого.

Его можно использовать также для приблизительной оценки высоты, например, при подъеме в горы. Уменьшение давления на 1 мм ртутного столба соответствует увеличению высоты над уровнем

моря приблизи­тельно на 10 м.

Пределы измерения и погрешность  прибора определяются в основном примененными в нем датчиками тем­пература -55…+125 °С, атмосферное давление 225.

825 мм ртутного столба Прибор питается напряжением 9 В от гальванической батареи типа “Крона” или сетевого адаптера Потребляемый ток — 30 мА (при выключенной под­светке ЖКИ). Размеры корпуса — 118×72 28 мм.

Работа прибора была проверена при температуре от -5 до +25 С Погрешность измерения давле­ния не превысила 4 мм ртутного столба Схема прибора изображена на рис. 1 причем собранный на отдель­ной плате модуль

измерения давления выделен штрихпунктирной линией.

Необходимые для работы датчика так­товые импульсы частотой 32768 Гц выра­батывает кварцевый генератор на эле­ментах микросхемы DD1 В принципе, эти импульсы мог бы формировать и микро­контроллер DD2 с помощью одного из имеющихся в нем таймеров

Но это по­требовало бы усложнения программы.

Напряжение 3,6 В для питания датчи­ка В1 и микросхемы DD1 получено с помощью стабилитрона VD1 Резисторы R1 —R3 — нагрузочные для линий свя­зывающего датчик с микроконтролле­ром интерфейса 1С и сигнала XCLR Печатная плата модуля измерения дав­ления показана

на рис. 2

Хотя датчик HP03SB содержит и встроенный измеритель температуры, его показания используются програм­мой микроконтроллера DD2 только для уточнения результатов измерения дав­ления.

На ЖКИ HG1 вместе со значени­ем давления выводятся показания дру­гого датчика температуры — DS1624 (В2) Причина этого проста — он точнее При необходимости датчик В2 можно сделать выносным и расположить там где температура представляет наиболь­ший интерес.

При установке в корпусе прибора этот датчик следует вынести на боковую стенку, сделав в ней окно по его размерам Иначе неизбежна ошибка на 1,5 ..

1,8 ‘С, в чем я убедился на практике Напряжение питания +5 В стабилизи­ровано микросхемой DA1 Подстроеч ным резистором R8 устанавливают наи­лучшую контрастность изображения на ЖКИ Кнопкой SB1 включают подсветку его табло. Остальные элементы необхо­димы для работы микроконтроллера Элементы R7 R9 СЮ VD2 — цепь уста­новки микроконтроллера в исходное состояние Кварцевый резонатор ZQ2 с конденсаторами С11.С12 — частотозадающая

цепь тактового генератора мик роконтроллера.

На рис. 3 представлен чертеж ос­новной печатной платы прибора а на рис. 4 — расположения деталей на ней В переходное отверстие показанное залитыми (плата на рис. 2), необходимо вставить и пропаять с двух сторон прово­лочную перемычку. Для микроконтрол­лера DD1 должна быть предусмотрена панель, так как в процессе налаживания прибора эту микросхему придется из­влекать и вновь

устанавливать.

Остановимся на некоторых особен­ностях датчика HP03SB. общий вид и га­баритные размеры показаны на рис. 5 Для определения давления необходимо предварительно прочитать из памя­ти установленного в приборе экземпля­ра этого датчика двухбайтные значения коэффициентов С,—С- и однобайтные значения параметров A—D. Все они ин­дивидуальны

для данного экземпляра.

Результаты измерения представляют собой два двухбайтных числа- D1 — дав­ление D2 — температура.  Прочитав их из памяти

датчика программа должна вычислить вспомогательные значения

Более подробные сведения о датчике HP03SB имеются в [1]. Однако необ­ходимо отметить что там указаны невер­но адреса внутренней памяти датчика, по которым хранятся его индивидуаль­ные константы. Следует пользоваться теми адресами что приведены в [2] В приборе можно применить и другие дат­чики серии НРОЗ Некоторые из них

име­ют меньшую точность, другие отлича­ются конструктивным оформлением.

Работа программы начинается с ини­циализации портов микроконтроллера и ЖКИ Успешную инициализацию под­тверждает вывод на табло надписи “TER- MOBAR” (буква Н пропущена). Затем инициализируется датчик давления, счи состояние регистра

статуса модуля TW1 микроконтроллера не проверяется.

Для чтения коэффициентов и пара­метров датчика предназначена специ­альная программа ReadCC, которую необходимо загрузить в программную  память микроконтроллера полностью собранного прибора (с подключенным модулем измерения давления), вклю­чить его и через несколько секунд выключить.

После этого нужно извлечь микроконтроллер и с помощью про­грамматора прочитать содержимое его EEPROM. В нем по адресам, указанным в табл. 1, находятся значения индиви­дуальных коэффициентов и парамет­ров датчика. Далее необходимо открыть файл рабочей про­граммы баро­метра-термо­метра BARO-2 asm, найти в нем фрагмент, приведенный в табл.

2, и ис­править значе­ния объявлен­ных там конс­тант в соответ­ствии с прочи­танными из EEPROM Пара­метр D

в про­грамме не ис­пользуется

Теперь про­грамма готова к работе с уста­новленным в прибор экзем­пляром датчика Остается от­транслировать ее с помощью AVR Studio и загрузить полу­ченный НЕХ- файл в микро­контроллер Уч­тите, что анало­гичный файл, приложенный к статье, рассчи­тан на работу с датчиком, имев­шимся у автора Если загрузить его в микрокон­троллер при­бор с другим эк­земпляром дат­чика давления будет работать но давать неточ­ные

показания

В разработке использованы фрагменты программ из [3] и [4]. Подпро­граммы преоб­разования чи­сел из шестнадцатеричного формата в дво­ично-десяти­чный перерабо­таны с учетом разрядности чисел.

Подпро­граммы пере­множения и де­ления двух­байтных чисел, предназначен­ные для микро­контроллеров семейства MCS-51, пере­ведены на язык ассемблера AVRASM Мень­ше всего под­верглась изме­нениям подпрограмма управления ЖКИ, учтены лишь особенности индикатора MT-10S1 а для ввода и вывода

сигналов использо­ваны другие порты микроконтроллера.

Источник: http://nauchebe.net/2012/09/barometr-i-termometr-na-atmega8-s-pechatnoj-platoj/

USB HID термометр на ATmega8

Этот термометр выполнен на основе микроконтроллера ATmega8

и датчика температуры DS18B20

Программа для контроллера была написанна и отладена в среде Bascom-AVR 1.11.9.8 с использованием USB драйвера swusb.LBX Программа для компьютера была разработана и отладена в среде PureBasic с использованием библиотеки HID_Lib.  Для установки библиотеки, нужно извлечь содержимое архива  в папку со средой PureBasic.

Код программы для компьютера

#USB_PID=$EF04 : #USB_VID=$AAAA #NO_Device=”Нет связи с термометром” LoadFont(2,”Arial”,22,#PB_Font_Bold)   Procedure FindDevice_Timer() ; Периодическая (каждые 400 мс.

) проверка доступности термометра Shared DeviceHandle Static Old_Test Test=HID_Lib_DeviceTest(#USB_PID, #USB_VID) ; Есть ли требуемое USB HID устройство?  If TestOld_Test   Old_Test=Test   If Test      HID_Lib_CloseDevice(DeviceHandle)      DeviceHandle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) ; Подключение к USB HID устройству      SetGadgetText(0,”Термометр подключён”)   Else      HID_Lib_CloseDevice(DeviceHandle)                   ; Разрыв связи с USB HID устройством      DeviceHandle=0      SetGadgetText(0,#NO_Device)      SetGadgetText(1,”OFF”)   EndIf  EndIf EndProcedure   Procedure Thread(*x) ; Эта процедура работает в отдельном потоке  Shared DeviceHandle  Repeat    If DeviceHandle   ; Установлена ли связь с USB термометром?      In.l=0      HID_Lib_ReadDevice(DeviceHandle, @In, 3) ; Чтение данных из USB термометра        In=In>>8                               ; Сдвиг вправо на 8 позиций        Result.f=In/16        If Result-50           ; Отсеиваем возможные глюки!          SetGadgetText(1,StrF(Result,1)+” °C”)      ; Отображение температуры в окне        EndIf    EndIf    Delay(100)  ForEver EndProcedure   ; Открываем окно OpenWindow(0,0,0,170,70,”USB_Termo”, #PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_ScreenCentered)  StickyWindow(0,1)  TextGadget(0,4,4,162,16,#NO_Device,#PB_Text_Center)  StringGadget(1,16,24,140,40,”OFF”,#PB_Text_Center|#PB_String_ReadOnly)    SetGadgetFont(1,FontID(2))    SetGadgetColor(1,#PB_Gadget_FrontColor,$DF0000) FindDevice_Timer() HideWindow(0,0)   AddWindowTimer(0,1,400)    ; Запуск таймера CreateThread(@Thread(),0)  ; Создание отдельного потока из процедуры Thread()   Repeat ; Главный цикл проги Repeat – Until    Event=WaitWindowEvent() ; Идентификатор события    If  Event=#PB_Event_Timer      If EventTimer()=1        FindDevice_Timer()  ; Вызов процедуры по таймеру, каждые 400 мс.      EndIf    EndIf

Until Event=#PB_Event_CloseWindow ; Прерывание главного цикла при закрытии окна

Скриншот скомпилированой программы

Для компиляции, требуется версия 4.40 или 4.41 компилятора PureBasic.

Скачать бесплатную демоверсию PureBasic441

Библиотека HID_Lib

В папке “Examples”, вы найдёте примеры устройств на PIC и AVR контролерах.

Скачать программы с их исходными текстами

Источник: http://radio-hobby.org/modules/news/article.php?storyid=905

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

Представляю Вашему вниманию свое устройство – двухканальный термометр-термостат. Термостат был сделан мною по просьбе родственников, для поддержания в ящике с картошкой постоянной температуры. Если в другие годы в нём не было необходимости, то прошлая зима показала, что он необходим.

В качестве датчиков использовал DS18B20. Микроконтроллер (ATmega8) работает от внутреннего задающего генератора на 4 мГц (дополнительно, на плате предусмотрена возможность установки кварца).

  Из-за артефактов динамической индикации (заметно было подмигивания в момент опроса датчика) пришлось отказаться от чтения ROM датчика и подсчёта CRC. Тем не менее, в устройстве используются два датчика, которые подключены к разным выводам МК.

Один измеряет температуру наружного воздуха, другой в ящике. Термостатирование организовано только для датчика №2 (ящик).


Термометр-термостат разделён по двум корпусам. В одном управляющая часть и дисплей, в другом блок питания и реле управления нагрузкой.

На плате управления предусмотрена установка стабилизатора питания с конденсаторами для питания микроконтроллера, но так как питание приходит и так 5 v он не впаян (в случае питания от блоков питания с выходным напряжением больше 5 v, его необходимо впаять).

  Корпус управления снабжён кронштейном который позволяет устанавливать его как на DIN-рейку или просто саморезами к стене.


Разъёмы устройства: – по USB разъёму передаются управляющие сигналя для включения реле;

– через аудио разъёмы подключены датчики температуры.

Описание работы термостата.
Устройство имеет три кнопки для управления. Кнопка (ОК), (Up), (Dn). При включении питания на индикаторе высвечивается температура датчика №1 (наружный воздух).


Для просмотра температуры в ящике необходимо нажать кнопку (ОК). При этом загорается светодиод синий HL1  (см. схему), указывающий, что на дисплей выведена температура датчика №2.


При повторном нажатии кнопки (ОК), на дисплей выводится температура датчика №1, а светодиод HL1 гаснет.

Для входа в режим установки верхнего порога отключения и нижнего порога включения обогрева. Необходимо нажать обе кнопки (Up), (Dn) и удерживать их нажатыми не менее 5 сек.

По истечении этого времени устройство перейдёт в режим просмотра верхнего порога выключения обогрева. Теперь кнопки нужно отпустить.

На дисплее будет высвечиваться значение порога и у четвёртого разряда засветится верхний сегмент, указывающий, что это верхний порог.


Для изменения уставки порога, необходимо нажать кнопку (ОК). Значение на дисплее начнёт мигать, сигнализирующее о готовности к изменению уставки. Уставку можно менять в пределах от +1 до +10 градусов, с дискретностью 1 градус.

Увеличение значения происходит с помощью кнопки (Up), а уменьшение с помощью кнопки (Dn). Для сохранения уставки или просто для перехода на следующий порог, необходимо нажать кнопку (ОК).

На дисплее высветится нижний порог и у четвёртого разряда засветится нижний сегмент, указывающий, что это нижний порог.


Для изменения уставки порога, необходимо опять нажать кнопку (ОК). Значение на дисплее начнёт мигать, сигнализирующее о готовности к изменению уставки. После установки порога включения, нажимаем кнопку (ОК) для сохранения и выхода из режима установки порогов термостатирования. Уставки сохраняются в энергонезависимой памяти МК и при исчезновении питания не сбрасываются.

Для удобства контроля состояния температуры в ящике, был введён дополнительный алгоритм сигнализации о низкой температуре в ящике.

Что он из себя представляет? Когда на дисплее отображается температура датчика №1, а температура в ящике снижается (допустим, из-за неисправности нагревателя) и достигает значения ниже +1 градуса, светодиод  HL1 начинает мигать, сигнализируя о низкой температуре в ящике. Если температура в ящике поднимется выше + 2 градусов, светодиод перестанет мигать.

Алгоритм неисправности датчиков. При неисправности датчика да дисплее выводится надпись Err №. Номер обозначает код неисправности от 1 до 3. Цифра 1 обозначает – нет высокого уровня, 2 – нет датчика, 3 – высокий уровень не восстановлен.


Когда на дисплее отображается температура датчика №1, и произошла неисправность датчика №2,то светодиод HL1 начинает мигать, сигнализируя о неисправности. Таким образом, при выведенной на дисплей температуре датчика №1 Вы не пропустите возникшую неисправность термостата. Естественно при неисправности датчика №2, обогрев отключается.

Ещё несколько моментов. Термостат отключен если уставка нижнего порога равна уставке верхнего порога, или уставка нижнего порога выше уставки верхнего порога. Если неисправны датчик №1 или №2, то в меню уставок, значение уставки Вы не увидите, хотя уставку изменить можно, но вслепую. Это сделано для того, что бы пользователь не лез изменять уставки при неисправных датчиках.


Файлы для сборки устройства.

Termostat_PCB_ATtmega8_OK – Рисунки печатных плат термостата
7_seg_term_OK_v2b_ATtmega8 – Исходник термостата на Билдере v2b_1
Termostat_7_LED.hex – Прошивка термостата для ATmega8 v2b_1
FuseBits – Фьюзы для прошивки термостата Для Algorithm Builder и UniProf галочки ставятся как на картинке. Для PonyProg, AVR Studio, SinaProg галочки ставяться инверсно.

Как правильно прошить AVR фьюзы

SVN ATmega8, семисегментник

Источник: http://www.getchip.net/posts/084-dvukanalnyjj-termometr-termostat-na-atmega8/

 Очередной проект продвинутого показометра, включающий в себя измерение температуры, атмосферного давления, влажности воздуха и отсчет времени с календарем.

  В общем в него включены все мои наработки по работе с датчиками за все время увлечения микроконтроллерами,  да и все накупленное добро нужно куда-то применить 🙂 В итоге должен получится усовершенствованный логгер температуры, первую версию которого я забросил.

Ну это позже, а сейчас приведу описание этой платы и тестовый код для проверки работоспособности  напичканных  туда датчиков и микросхем.

 Схема устройства ниже, конвертер USB-UART на FT232RL показан схемотически, схема в нем стандартная и уже описана здесь.

 Сердцем схемы служит микроконтроллер ATMega64 фирмы Atmel, работающий от внешнего кварца на 16 МГц. Отсчитыванием времени занимается микросхема часов реального времени DS1307, я уже имел с ней дело и поэтому пошел по проверенному пути.

 Для измерения температруы и влажности применен датчик DHT11, хоть и китай чистейшей воды, но показания выдает вполне удовлетворительные. У меня в заначке лежит еще SHT21, но тогда повторяемость схемы сильно упадет, потому как достaть его сложней и по стоимости он выйдет как вся схема в сборе.

 Следующий датчик BMP085 – занимается измерениями атмосферного давления. Помимо этого он умеет измерять и температуру, так что можно будет с него дублировать показания. 

 Так как в дальнейшем планируется превратить устройство в логгер, предусмотрено место для подключения внешней EEPROM памяти 24LCxx. 

 Для сопряжения 3х вольтового датчика давления использована зарекомендовавшая себя схема согласования на полевых тарнзисторах. 

 Все элементы (за исключением двух резисторов) находятся на верхнем слое, на нижнем разведены дороги которые не уместились на верху. Интересного там мало поэтому фото не привожу.

 Чтобы иметь возможность напрямую подключать утсройство к компьютеру (к примеру, для того чтобы скинуть накопленные данные) на плате установлен преобразователь USB-UART на микросхеме FT232RL. Так же через этот преобразователь можно загружать в микроконтроллер прошивку, если предварительно зашить в микроконтроллер загрузчик (Bootloader). Как это сделать я писал ранее.

 Для подключения внешних датчиков, навсякий случай предусмотрены выводы с портов PA0-PA3. А также выведены контакты SPI-интерфейса, на случай если захочется подключить NRF24L01 и организовать радиоканал.

 Тестовый код выводит на экран время и дату с часов DS1307, с возможностью ручной установки (см. видео). На вторую строку выводится информация с датчика влажности DHT11, на третью – с датчика давления BMP085.

Как видите китаец DHT не уступает по показаниям температуры своему немецкому собрату BMP085 от Bosh. Кстати, китаец тоже умеет выдавать показания с десятыми долями градуса, позже добавлю в код эту функцию.

 И напоследок видео, демонстрирующее возможность ручной установки даты и времени.

Схемма в Proteus

Печатная плата в Dip Trace

Исходник тестовой прошивки

Прошивка