Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Термометр с четырьмя датчиками DS18B20

К этому микроконтроллерному термометру можно подключить до четырёх цифровых датчиков температуры DS18B20, расположив их в тех местах, где необходимо контролировать температуру, и соединив с прибором, общим для всех трёхпроводным кабелем. Значения температуры отображаются на четырёхстрочном символьном ЖКИ.
Схема термометра изображена на рис. 1. Напряжение 5 В для его питания подают, например, от зарядного устройства для сотового телефона. Включают и выключают термометр выключателем SA1. Управляет датчиками температуры BK1—BK4 и считывает результаты их работы микроконтроллер DD1 (PIC16F628A-I/P), работающий от встроенного тактового генератора. Индикатор HG1 связан с микроконтроллером трёхразрядной шиной управления (линии RA2—RA4 микроконтроллера) и четырёхразрядной шиной данных (линии RB0—RB3). Поскольку выход RA4 микроконтроллера, в отличие от других, выполнен по схеме с открытым стоком, для него предусмотрен нагрузочный резистор R2, поддерживающий здесь высокий логический уровень, когда внутренний транзистор микроконтроллера закрыт.

 


Неиспользуемые линии разрядов D0—D3 шины данных индикатора во избежание воздействия на них помех соединены с общим проводом. Оптимальную контрастность изображения на экране ЖКИ устанавливают подстроечным резистором R4.

 

 

Термометр собран на односторонней печатной плате из фольгированного стеклотекстолита, изображённой на рис. 2. В собранном виде вместе с индикатором она показана на рис. 3. 

 


Когда датчики BK1—BK4 подключены к прибору, как показано на схеме, цепи +5 В (выв. 3) и ввода—вывода информации (выв. 2) всех четырёх датчиков соединены параллельно. Но их выводы 1, обычно соединяемые с общим проводом прибора, в данном случае подключены раздельно к линиям RA0, RA1, RA6 и RA7 микроконтроллера. Это позволяет его программе включать датчики раздельно. Чтобы включить, например, датчик BK1, программа переводит линию RA0 в режим выхода и устанавливает на нём низкий логический уровень напряжения. Это эквивалентно соединению вывода 1 датчика с общим проводом. Цепь питания датчика замыкается, и он включается. Потребляемый им ток не превышает 1,5 мА при нагрузочной способности линии порта микроконтроллера 25 мА. Остальные три линии из четырёх, перечисленные выше, программа оставляет в режиме входов. Их входное сопротивление в этом режиме очень велико, и цепи питания трёх датчиков остаются разомкнутыми.



Следует заметить, что нельзя управлять питанием датчиков DS18B20, отключая от плюса питающего напряжения их выводы 3. Дело в том, что в этих датчиках предусмотрена возможность так называемого "паразитного питания", когда для их нормальной работы достаточно напряжения высокого логического уровня, поступающего на информационный вывод 2 в процессе обмена информацией с микроконтроллером.

Каждый датчик DS18B20 имеет уникальный номер длиной 64 двоичных разряда, хранящийся в его ПЗУ Это позволяет ведущему устройству интерфейса 1 -Wire (микроконтроллеру) различать соединённые параллельно ведомые устройства (датчики) по этим номерам, не прибегая к отключению питания от каждого из них. Для этого предусмотрены специальные команды, на которые реагирует только ведомое устройство с указанным в команде номером. Но чтобы воспользоваться такой командой, нужно знать этот номер, а он уникален и от датчика к датчику не повторяется. Существует алгоритм программного определения номеров всех соединённых параллельно датчиков. Но он очень сложен, проще оказалось определять номера, включая датчики по одному, и лишь затем подключать их все параллельно. 

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

Завершив определение номеров датчиков, программа включает их все и отправляет общую (без указания номеров) команду выполнить измерение температуры. Её принимают и исполняют все датчики. По готовности результатов программа обращается к каждому датчику отдельно по его уникальному номеру, считывает измеренные значения температуры и отправляет их на индикатор. Далее циклы измерения, считывания результатов и их вывода на индикатор периодически повторяются.

При повторном включении термометра вновь нажимать на кнопку SB1 для определения номеров датчиков нет никакой необходимости, поскольку эти номера уже записаны в энергонезависимой памяти микроконтроллера. Программа сразу же начнёт выполнять циклы измерения температуры. Более того, теперь все зарегистрированные датчики можно соединить одноимёнными выводами параллельно и подключить их к устройству одной тройкой проводов. Например, такой, как показана на рис. 4 (датчики в разъёмы не вставлены). Новое раздельное подключение датчиков и нажатие на кнопку SB1 потребуются лишь при замене любого из них или всего комплекта.

Программа микроконтроллера создана в среде PIC Simulator IDE v6.97, в которой предусмотрены средства работы с интерфейсом 1-Wire. Но для связи с устройствами по этому интерфейсу может быть использован только один вывод микроконтроллера, заданный при инициализации программы. Для датчика DS18B20 в среде программирования имеются процедуры высокого уровня (например, послать определённую команду), но в программе они не использованы, так как могут работать только при условии, что к микроконтроллеру подключён единственный датчик. Применены только низкоуровневые процедуры 1wireInit (инициализация интерфейса), 1wireSendByte (передача байта), 1wireGetByte (приём байта) и 1wireGetBit (приём одного двоичного разряда).

 


Измеренное датчиком DS18B20 12-разрядное значение температуры находится в двух байтах его оперативной памяти, которые могут быть прочитаны ведущим интерфейса. Сразу после включения датчика, когда измерение ещё не выполнялось, это значение равно 85 °C. Чтобы датчик выполнил измерение, ему нужно подать соответствующую команду. Процесс определения температуры занимает около 750 мс, после чего полученное значение может быть считано.

Чтобы точно узнать момент готовности информации о температуре, после команды начала измерения ведущий может периодически посылать запросы чтения разряда состояния датчика. Ответом на запрос будет логический 0, если измерение ещё продолжается, или логическая 1, когда оно завершено. При параллельном соединении датчиков, получивших команду одновременно, логическая 1 будет принята только по завершении измерения всеми датчиками. 

Чтобы избежать операций с дробными числами, полученные от датчиков 12-разрядные значения температуры с ценой младшего разряда 0,0625 оС программа округляет для вывода на индикатор до целых чисел, в 10 раз больших реальных значений. Например, при температуре 25,25 оС прочитанное из датчика двоичное число 000110010100 умножением на десять и последующим сдвигом на четыре разряда вправо преобразуется в целое десятичное число 252.

На индикаторе оно будет выглядеть как 25,2, поскольку после второго разряда всегда предусмотрен вывод десятичной запятой. ЖКИ-модуль LCD1604 на основе контролера HD44780, применённый в качестве HG1, не содержит в своём знакогенераторе русских букв и некоторых других символов, необходимых для формирования нужных сообщений на экране. Многие русские буквы можно вывести, используя их схожесть с латинскими. Для вывода остальных использована возможность загрузить в первые восемь ячеек знакогенератора изображения символов, вид которых на экране определён пользователем с помощью операторов Lcddefchar.

Если двоичные коды, заданные в рассматриваемой программе этими операторами, расположить столбцами, как в таблице, то можно увидеть, что единицами в них сформированы изображения символа, образующего вместе с буквой N знак номера №, символа градуса и букв Я, З, И. Эти буквы использованы для вывода сообщения "НЕТ СВЯЗИ" вместо значения температуры при отсутствии подключённого датчика. 

Исходный код программы и прошивка микроконтроллера PIC16F628A доступны по этой ссылке.

Автор: К. Абдукаримов, г. Шымкент, Казахстан
Источник: Журнал Радио 2014 №8


C этой схемой также часто просматривают:

Электронный термометр
МЕДИЦИНСКИЙ ТРАНЗИСТОРНЫЙ ТЕРМОМЕТР
Цифровой термометр
Цифровой термометр.
Автомобильные часы-термометр-вольтметр
Два вывода микроконтроллера PIC управляют шестью светодиодами
Два E-CW-ключа на микроконтроллере PIC12F675
Бегущая строка с вводом текста с помощью компьютерной клавиатуры
Встраиваемый измеритель тока и напряжения на PIC12F675

Главные категории

Arduino


Аудио


В Вашу мастерскую


Видео


Для автомобиля


Для дома и быта


Для начинающих


Зарядные устройства


Измерительные приборы


Источники питания


Компьютер


Медицина и здоровье


Микроконтроллеры


Музыкантам


Опасные, но интересные конструкции


Охранные устройства


Программаторы


Радио и связь


Радиоуправление моделями


Световые эффекты


Связь по проводам и не только...


Телевидение


Телефония


Узлы цифровой электроники


Фототехника


Шпионская техника



Реклама на KAZUS.RU




Последние поступления

Автоматизация смывного бачка

Кухонный таймер

Прибор для поиска скрытой проводки на PIC12F629

Фотореле-таймер на микроконтроллере

Термометр на DS18B20

Часы с термометром дом-улица и таймером

Автомат полива для дачи и огорода

Стабилизация мощности тока электродной батареи на микроконтроллере

Ёмкостный измеритель уровня жидкости

Умывальник с бесконтактным управлением на PIC16F84A



© 2003—2017 «KAZUS.RU - Электронный портал»