ГЛАВНАЯ Визы Виза в Грецию Виза в Грецию для россиян в 2016 году: нужна ли, как сделать

Электронный термометр с выносным датчиком DS18B20 на микроконтроллере Attiny2313. Делаем простой термометр на микроконтроллере Автомобильный термометр на pic16f628a

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

Схема термометра на ATmega8 и DS18B20

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

Схема и программа очень простого цифрового термометра с использованием микроконтроллера ATmega8 и датчика температуры DS18B20 . Термометр позволяет измерять температуру от 0 до 99 градусов с точностью до 0,5 градусов с разрешением 0,1 градуса

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

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

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

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

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


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

Детали термометра на микроконтроллере ATmega и DS18B20



Распиновка микроконтроллера ATmega8:

Трехразрядный семисегментный индикатор FYT-5631AUR-21:

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

Транзисторы BC547C:

Алгоритм работы программы термометра на ATmega и DS18B20

Все установки микроконтроллера заводские, FUSE-биты трогать не надо.

Для работы программы задействовано два таймера/счетчика микроконтроллера:
восьмиразрядный Т0
шестнадцатиразрядный Т1
С помощью восьмиразрядного таймера Т0 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/8 (период 2 миллисекунды) организован:
— расчет текущей температуры
— динамический вывод результатов измерения температуры датчиком DS18B20
С помощью шестнадцатиразрядного таймера Т1 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/64 (период 4 секунды) организованно:
— подача команды датчику DS18B20 на измерение температуры
— считывание измеренной температуры с датчика
В принципе, можно задействовать и один восьмиразрядный таймер/счетчик, также настроенный на вызов прерывания по переполнению, с внутренней частотой СК/8, и всю работу схемы организовать в процессе обработки прерывания. Но дело в том, что смысла в этом нет — датчику DS18B20 необходимо чуть меньше 1 секунды (при 12-ти битном разрешении) для конвертирования (определения) температуры, т.е., чаще чем 1 раз в секунду мы не сможем обновлять данные температуры. Кроме того, столь частое обновление температуры приведет к нагреву датчика и, соответственно, к искажению реальных данных. Использование второго счетчика позволяет отдельно задавать промежутки времени измерения температуры.

Вот так выглядит основная часть программы в Algorithm Builder:

Где:

SP — настройка начального адреса стека

Timer 0 — настройка таймера T0:

Timer 1 — настройка таймера Т1:

TIMSK — настройка прерываний от таймеров:

Init_Display — подпрограмма настройки разрядов портов, участвующих в динамической индикации вывода данных на трехразрядный семисегментный индикатор

1 —> I — глобальное разрешение прерываний

Если возникнут вопросы, если что-то изложено не понятно или есть вопросы по программе, пишите — отвечу.

(2,4 KiB, 7 004 hits)

Answer

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry"s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five http://jquery2dotnet.com/ centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

Девайс предназначен для измерения температуры во всем диапазоне датчика DS18B20 (от -55 до +125 градусов), с точностью до 0,1 градуса. Точность 0,1 является весьма условной, т.к. заявленная производителем точность самого датчика DS18B20 - 0,5 градуса. Тем не менее, ко мне очень часто обращались люди с предложением сделать термометр с индикацией до 0,1 градуса, что я и сделал.

Термометр измеряет температуру и индицирует ее на 4-х разрядном светодиодном индикаторе. Разные диапазоны температур индицируются по разному:
-55,0...-10,0 - в формате -ХХ.Х без символа градуса
-9,9...0,1 - в формате -Х.Х и символ градуса
0,0...9,9 - в формате Х.Х и символ градуса
10,0...99,9 - ХХ.Х и символ градуса
100,0...125,0 - ХХХ.Х без символа градуса


Кроме того в термометре реализована функции приглушения яркости индикаторов. Яркость выбирается кнопкой S. Пока кнопка нажата - яркость высокая, если не нажата - яркость низкая. Вместо кнопки можно подключить датчик освещенности, чтобы яркость менялась автоматически в зависимости от времени суток (точнее освещенности).

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

Термометр будет правильно работать только с датчиком DS18B20, датчики DS1820, DS18S20 и т.п. для данного термометра не пригодны! Для питания прибора подойдет любой стабилизированный или не стабилизированный блок питания выдающий постоянное напряжение 7...12 вольт. Например, можно использовать не нужное зарядное устройство для мобильника. Если выходное напряжение блока питания не превышает 8 вольт, то вместо стабилизатор 7805 можно применить и 78L05, но если будет сильный его нагрев, придеться увеличить сопротивления в катодах индикатора до 220 ом.

Конструкция 2-х канального термометра на PIC16F628A и DS18B20, предназначенного для домашнего применения, заинтересовала, как простых радиолюбителей, так и тех у кого есть автомобиль.

Для применения в автомобиле конструкция термометра претерпела ряд изменений, как схемотехнических, так и программных. Надпись "Дом" была заменена на "Салон", а в нижней строке дисплея теперь выводится напряжение бортовой сети автомобиля. При реализации функции измерения напряжения бортовой сети возникли трудности, связанные с отсутствием у примененного микроконтроллера цифро-аналогового преобразователя (АЦП). Зато в микроконтроллере имеется модуль компараторов, который и был использован для измерения бортового напряжения. С помощью модуля компараторов оказалось возможным измерять напряжение в диапазоне входных напряжений от 5,6В до 16В с дискретностью измерения 0,7В. Это самый оптимальный вариант для решения поставленной задачи без замены микроконтроллера. Зная напряжения бортовой сети можно оценить состояние аккумуляторной батареи. Сразу при включении устройства (с помощью замка зажигания или другим способом) выполняется измерение бортового напряжения. Если величина бортового напряжение оказалась меньше чем 10,5В автомобильный термометр-вольтметр оповестит звуковым сигналом (в течении 1,5с.) и одновременно выведет в нижней строке дисплея сообщение "Аккум - разряжен" примерно на 3...4с. Далее в нижней строке будет отображаться текущее значение бортового напряжения. Если величина напряжения будет меньше 5,6В на индикаторе будет отображаться сообщение " Напряжение <6B ", а если больше 16В - " Напряжение >16B ".

Описание схемы:

В качестве управляющего контроллера D1 используется микроконтроллер фирмы Microchip PIC16F628A, работающий в данном устройстве от внутреннего тактового генератора (4МГц).

Вывод информации о величине измеренных температур и напряжении бортовой сети автомобиля микроконтроллер осуществляет на LCD индикатор E1 от мобильного телефона Nokia3310. Передача данной информации осуществляется по последовательному интерфейсному каналу типа SPI. Обмен информации между микроконтроллером и дисплеем одностороний, данные передаются только от микроконтроллера к индикатору.

Резисторы R11...R15, совмесно с входными встроенными защитными цепями индикатора, обеспечивают согласование уровней сигналов управления, поступающих на индикатор.

Питание индикатора осуществляется от параметрического стабилизатора напряжения, обеспечивающего значение напряжения питания индикатора около +3,3В. Стабилизатор напряжения выполнен на стабилитроне V5, резисторе R10 и конденсаторе фильтра С8. Питание на стабилизатор поступает от источника стабилизированного напряжения +5В. Измерение температур осуществляется цифровыми датчиками температуры U1 и U2 фирмы Maxim DS18B20. Эти датчики имеют заводскую калибровку и позволяют измерять температуру окружающей среды от -55 до +125°С, причем в интервале -10...+85°С производитель гарантирует абсолютную погрешность измерения не хуже ±0,5°С. На границах диапазона измеряемых температур точность ухудшается до ±2°С.Индикация показаний термометра во всем диапазоне измеряемых температур выполняется с дискретностью ±0.1°C.

Обмен данными и командами между микроконтроллером D1 и датчиками температуры U1 и U2 осуществляется с помощью последовательного интерфейсного канала 1-Wire. Для упрощения программного обеспечения датчики подключены на отдельные входы микроконтроллера. Протокол обмена при этом по шине 1-Wire упрощается: не требуется адресация датчиков и их предварительная инициализация.

Резисторы R4, R6 являются нагрузочными резистороми для линий интерфейса 1-Wire. Резисторы R5, R7 выполняют функцию защиты внутреннего источника питания термометра при коротком замыкании цепей питаний датчиков.

Разъем Х3 используется для внутрисхемного программирования микроконтроллера D1. Его необходимо устанавливать в случае использования микроконтроллера в SMD исполнении или когда микроконтроллер в DIP корпусе непосредственно впаивается в плату, а не устанавливается в панельку. Разъем Х3 обеспечивает непосредственное подключение программатора PICKIT2 к термометру.

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

Внутренняя схема питания автомобильного термометра реализована следующим образом:- с разъема Х4 бортовое напряжение поступает через диод V1 и резистор R3 на микросхему интегрального стабилизатора напряжения U3 типа 7805.

Данная микросхема из напряжения бортовой сети формирует стабилизированное напряжение +5В для питания микроконтроллера, параметрического стабилизатора индикатора и цифровых датчиков температуры;

Диод V1 препятствует прохождению импульсных помех отрицательного напряжения в цепи питания термометра, защищает устройство при неправильной подачи питания на устройство (переполюсовка питания), а также совместно с конденсатором С1 препятствует перезапуску микроконтроллера устройства при провалах напряжения бортовой сети при включении стартера автомобиля или других энергоемких потребителей электроэнергии автомобиля; - Резистор R3 совместно с ограничительным диодом (супрессором) V2 защищает внутренние цепи термометра от перенапряжений, возникающих от влияния импульсных помех.

Узел формирования аналогового сигнала, необходимого для измерения напряжения бортовой сети, собран на резистивном делителе напряжения R1,R2, конденсаторе C2 помехоподовляющего фильтра (R1, C2), и диодах V3, V4, защищающих совместно с резистором R1 аналоговый вход микроконтроллера от перенапряжений.

Желательно для повышения точности измерения напряжения резисторы R1 и R2 использовать с 1% точностью, но так, как дискретность измерения очень большая (0,7В) - это условие не обязательно.

Мощность резистора R3 должна быть не менее 0,5Вт, а мощность стальных резисторов может быть 0,125Вт для выводных и 0,1Вт для SMD резисторов

Опытный образец автомобильного термометра был собран на односторонней печатной плате:

Внимание печатная плата и монтаж опытного образца выполнены по схеме - Shema_avto_termo_3310_pic16f628.spl, файл которой представлен ниже. Отличие от представленной выше схемы только в оформлении и в позиционных обозначениях элементов.

На рисунке показана схема термометра выполненного на основе микроконтроллера PIC16F628A, в качестве датчика используется цифровой датчик температуры DS18B20. Индикатор термометра состоит из 4-х разрадного семисегментного индикатора. Диапазон измеряемой температуры от -55 до + 125 градусов Цельсия. Температура считывается каждые 15 секунд, время считывания можно изменить в коде.

Напряжение питания термометра 5В, ток потребления 90 мА. В схеме используются транзисторы BC337 или аналогичные. Ток потребления каждого сегмента индикатора 15 мА (динамическая индикация), который ограничен резисторами 220 Ом (индикатор с общим катодом).

Файл прошивки —

DS18B20 цифровой термометр с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Все процессы на шине управляются центральным микропроцессором.

Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения.
Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20 установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20, распределенных по большому участку. Приложения, которые могут извлечь выгоду из этой особенности, включают системы контроля температуры в зданиях, и оборудовании или машинах, а так же контроль и управление температурными процессами.

  • Похожие статьи

Войти с помощью:

Случайные статьи

  • 10.10.2014

    На рисунке показана схема предварительного усилителя с тембро-блоком, тембро-блок включен в цепь обратной связи предварительного усилителя. Напряжение питания уст-ва может варьироваться от 12 до 24В, потребляемый ток не более 10 мА. Входной сигнал поступает через разделительный конденсатор С1, резисторы R1 и R2 определяют напряжение смещения транзистора VT1, после предварительного усиления …

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

Предел измерения термометра от -55,0°С до +125,0°С. Датчик DS18B20 оцифровывает температуру с шагом 0,0625°С. На индикаторе результат измерения выводится с точностью 0,1°С. Реально производитель заявляет от погрешности +/- 0,5°С в диапазоне от -10°С до +85°С.

Индикация сделана на 4х разрядах семисегментных индикаторов. Питание термометра автономное, от литиевой батарейки на 12В, которая используется в брелках сигнализации авто. Решение нельзя назвать экономичным, но оцифровка температуры занимает доли секунды и поэтому достаточно кратковременно подать питание и оценить температуру.
Итак, схема устройства.

Схема:

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

Конструкция:


Конструктивно термометр собран на двух платах: плата индикации и плата контроллера. Платы расположены одна над другой и соединены через межплатные разъемы.

По рисунку печатной платы всё довольно просто, хотя схема выглядит не совсем традиционно. Предполагалось конструкцию одарить корпусом, но с этим напряженно. Датчик DS18B20 подключается через аудио-разъем.

Незначащий ноль не гасится, инициализация на +85,0°С не игнорируется (ну не интересно это было делать). В первом разряде в случае отрицательной температуры высвечивается символ "-" (минус).
Для любителей синтетического моделирования собран проект в Proteus Professional 7.2 SP6.