Простой цифровой термометр на attiny2313. Термометр меньше не бывает на Attiny2313. И вот, что получилось

В Интернете есть куча схем термометров на AVR, но как всегда хочется чего-то своего.. Да и мозги размять тоже следует. Этот термометр был одним из первых моих проектов.

Чего хотелось:

  • минимальные размеры (в разумных пределах)
  • минимальная стоимость
  • простота конструкции
  • высокая повторяемость
  • универсальность (об этом чуть позже)

Что получилось:

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

На схеме показан второй вариант включения термодатчика, если он не захотеть работать по однопроводной шине (что встречается очень редко). Обратите внимание, что подтягивающий резистор на 11 выводе должен быть именно 4,7кОм . Уменьшение или увеличение может привести к нестабильной работе датчика в случае включения по однопроводной схеме.

Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 4 транзистора и 4 резистора, по сравнению с аналогичными схемами. Тут некоторые скажут: «так нельзя — большая нагрузка на порты!!!». Читаем на сей контроллер «DC Current per I/O Pin — 40.0 mA «. У нас 8 сегментов в каждом символе, по 5 мА каждый — получается 40мА!!!.

Теперь посмотрим графики из того же описания:

Из графиков видно, что ток может достигать и 60 мА и даже 80 мА на пин. Ну не будем увлекаться — нам 5 мА на сегмент (40мА на символ) хватит с головой! Ограничительные резисторы подобраны для получения тока около 5 мА на сегмент. В моей схеме стоят 470 Ом. Яркость сегментов при этом отличная!!! Так, чё-то я увлёкся теорией.

Практика!!!

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

На рисунке есть место под кварц — это для небольшой универсальности — у меня было несколько штук AT90S2313, у которых нет внутреннего генератора. КРЕНка применена в корпусе SOT-89. Защитные стабилитроны BZX79-C5V1 в корпусе DO-35. Конденсаторы в фильтре питания — 10mkF * 16V танталовые (других не нашлось), размера 3528 (SMD-B). Я их обычно не ставлю, а вместо них — 1mkF * 50V размера 1206.Глюков связанных с питанием не замечено.

пустая плата, изготовленная «лазерным утюгом»

собранная плата: вид со стороны проводников (не хватает стабилизатора)

вид со стороны элементов (не запаян индикатор)

Проект собран по кускам, что-то из готовых проектов из Интернета, что-то дописано мной… Оригинальной идеей стала динамическая индикация. Проблема заключалась в том, что во время общения с датчиком температуры DS18B20 возникали моменты, когда «сканирование» индикации останавливалось. Поэтому обновление индикатора сделано не по прерываниям, а в главном цикле программы, и ещё вставлено кой-где в процедуре общения с датчиком… Плюсом данного способа стала высокая частота обновления, что исключило проблему мерцания.

Чуть не забыл — фьюзы для нормальной работы термометра:

Итак, прошили, включили… Хм… работает!!!

Итак как видим получилось довольно простое (куда уж проще???) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика — «±0.5°C accuracy from –10°C to +85°C». Как показала практика точность гораздо выше — около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль…

В данной статье проведем обзор цифрового термометра , построенного на микроконтроллере Attiny2313 , снабженного выносным цифровым датчиком DS18B20 . Пределы измерения температуры составляет от -55 до +125 градусов Цельсия, шаг измерения температуры составляет 0,1 градус. Схема очень простая, содержит минимум деталей и ее запросто можно собрать своими руками.

Описание работы схемы термометра

Самодельный электронный термометр с выносным датчиком построен на всем известном . В роли температурного датчика выступает микросхема DS18B20 фирмы Dallas. В схеме термометра можно применить до 8 цифровых датчиков. Микроконтроллер взаимодействует с DS18B20 по протоколу 1Wire.

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

Для Attiny2313 необходимо выставить фьюзы следующим образом (для программы

Сразу снимаю с себя всю ответственность за потраченное вами время, деньги, детали, итд... Если у вас что-то не заработало, то вините во всём свои кривые руки.....

Недавно занимался сборкой компьютера с полностью пассивным охлаждением. Чтобы было удобно контролировать температуру процессора, нужно было по быстрому собрать термометр. Всяческие программы типа "Everest", "Aida", и прочие мне не подходили по одной простой причине: хотелось контролировать температуру даже при выключенном мониторе. Или даже при полностью отключенном мониторе. Было решено собрать термометр на основе цифрового датчика DS18B20, дешёвого микроконтроллера AVR, и семисегментного индикатора. Сначала я хотел повторить схему термометра по одному из вариантов, предложенных в интернете. Но после анализа схем, размещённых в интернете, я пришёл к выводу, что придётся изобретать свой "велосипед".

Конструкции, представленные в интернете, имели ряд недостатков, а именно:
* низкая скорость динамической индикации (50...100 герц), изза которой становится некомфортно смотреть на индикатор, если быстро бросить на него взгляд, кажется что цифры "шевелятся";
* не все конструкции адекватно измеряли весь диапазон температур (от -55 до +125), попадались например конструкции, не измеряющие температуру ниже нуля градусов, или некорректно измеряющие температуру выше 100 градусов;
* отсутствовала проверка контрольной суммы (CRC);
* общие выводы сегментов подключались к одной ножке микроконтроллера без ключевых транзисторов, ПЕРЕГРУЖАЯ ПОРТЫ МИКРОКОНТРОЛЛЕРА.

При перегрузке портов МК, яркость свечения индикатора может снизиться, а также можно пожечь ножки микроконтроллера. Несколько лет назад я собирал термометр на ATtiny2313+DS18B20 по схеме с интернета. Схема была без ключевых транзисторов. При температуре 18 градусов, цифра "1" светилась ярко, а цифра "8" светилась заметно тусклее, надеюсь всем понятно почему всё происходит именно так. Поэтому я пообещал себе в будущем не перегружать ножки МК. Вот кстати фотка того термометра, собранного по схеме из инета, думаю что в комментариях не нуждается:

Также хотелось сделать несколько доработок:
* вывести на индикатор символ градуса (десятые доли градуса мне были не так критичны);
* затактировать микроконтроллер от внешнего кварца, так как протокол "1-Wire", который использует датчик, критичен к формированию временнЫх интервалов (тайм-слотов), поэтому молиться о стабильности встроенного тактового генератора мне не хотелось;
* ввести в программу проверку контрольной суммы, при несовпадении контрольной суммы выводить на индикатор: "Crc";
* добавить в схему диод (для защиты схемы от переполюсовки питания);
* при подаче питания в течении 1 секунды засветить все сегменты (так называемый тест сегментов);
* реализовать проверку контрольной суммы DS18B20.

Проект я написал в среде AVR Studio 5, функции работы с датчиком нашёл где-то в инете, а остальное переписал на свой лад, обильно снабдив комментраиями исходный код. В конце статьи есть ссылка на скачивание прошивки и исходника.

Семисегментный индикатор я использовал на 3 знакоместа, сегменты с общим анодом. Также в архиве (в конце статьи) есть прошивки под индикатор с общим катодом. Общие выводы сегментов я подключил сразу к двум выводам МК, соединённым параллельно. Таким образом, каждый общий вывод сегментного индикатора использует 2 ножки МК для повышения нагрузочной способности выводов.

Микроконтроллер я использовал ATtiny2313A (также можно использовать ATtiny2313 или ATtiny2313L), задействовал практически все свободные ножки (за исключением ножки сброса). Если собирать термометр на ATmega8, то можно соединять параллельно по 3 или по 4 ножки для повышения нагрузочной способности портов.

Схема девайса:

Прилагаю фотографии собранного термометра. Корпуса покачто нет, так как термометр будет встраиваться в корпус ПК.

Индикация.
Не подключен датчик температуры, либо короткое замыкание на линии данных:

Ошибка контрольной суммы (CRC):

Подключен датчик температуры, температура от -55 до -10 градусов:

Подключен датчик температуры, температура от -9 до -1 градуса:

Подключен датчик температуры, температура от 0 до 9 градусов:

Подключен датчик температуры, температура от 10 до 99 градусов:

Подключен датчик температуры, температура от 100 до 125 градусов:

Частота динамической индикации - несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор.
Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц.
Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже).

UPD
Обновил прошивку. Мелкие исправления, мелкие плюшечки. Из основного - stdint типы данных, гибкая настройка ног под сегменты. Все изменения описаны в шапке исходника.

Предлагается схема на микроконтроллере ATMega8 для измерения температуры в диапазоне от -55C до +127C с точностью не хуже +-0,5C. В качестве индикатора применен "динамический" трехразрядный светодиодный индикатор.

Рис.1 Принципиальная схема

Принципиальная схема девайса показана на рисунке 1 . Мне кажется она настолько проста, что в пояснениях не нуждается. Некоторая странность в расположении выводов индикатора объясняется стремлением сделать красивую схему без пересечений линий и шин. Резисторы и конденсаторы SMD - это жертва стремлению сделать устройство буквально на 5 мм больше индикатора. Кстати, индикатор применен без опознавательных знаков, продавался как "динамический" индикатор. Скорее всего, это какая-то левая китайская поделка, однако работает хорошо. При повторении конструкции следует удостовериться, что номера выводов соответствуют нужным разрядам и сегментам. Питается схема от источника 3...5В.

Рис. 2 Нижняя сторона платы

Рис. 3 Верхня сторона платы

На рисунках 2 и 3 показаны рисунки дорожек сторон платы, а на рисунках 4 и 5 - размещение элементов на этих сторонах. Как видите, элементы размещаются мало того, что с обеих сторон, так еще часть SMD -компонентов размещается под не-SMD -компонентами. Благодаря таким ухищрениям размеры платы всего 50х22 мм. В общем, монтаж проблем вызвать не должен.

Рис.4 Монтаж снизу

Рис.5 Монтаж сверху

Так как плата очень проста, рисунка с высоким качеством я не делал - думаю, что такую плату повторить удастся даже при помощи традиционной "лаковой" технологии, а для ЛУТ можно слегка подправить рисунки 2 и 3 .

Прошивки доступны в . Их 4 варианта : для индикаторов с общим анодом и с общим катодом, а так же для датчиков DS18S20 или DS18B20 . Название файлов прошивок таково, что определить соответствие элементарно, например: mt_18S20_oa.hex - прошивка для датчика DS18S20 и индикатора с общим анодом . При программировании микроконтроллера следует задать fuse -битами режим тактирования от встроенного RC-генератора 8 МГц.

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


(12) | Просмотров: 119051

На радиорынке я присмотрел трехразрядный семисегментник. Приобрел микроконтроллер Attiny2313 в SOIC корпусе, DS18B20, smd-резистор и smd-конденсатор. Нарисовал печатную плату, по печатной плате нарисовал схему, написал программу, залил в МК и:

И вот, что получилось:

На индикатор наклеена тонировочная пленка (без нее нормально сфотограыировать индикатор не удавалось).

О размерах можно судить и по примененному индикатору:

Схема:

Несколько слов схеме и о программе. Компактность не обошлась без жертв. В схеме отсутствуют токоограничивающие сопротивления, что есть не совсем хорошо. Для увеличения нагрузоспособности катоды индикатора подключены сразу к двум выводам МК.
В программе ничего оригинального нет. Шаблон подготовлен с помощью мастера из CVAVR, остальные части взяты из моих часов с термометром. Я применил подправленную библиотеку DS18B20, а точнее это сумма двух библиотек из CVAVR для DS1820/DS18S20 и DS18B20, т.е. в термометре можно применять любой из вышеперечисленных датчиков. Если точнее, то не более 4-х датчиков в любой комбинации.
Фузы: МК настроен на работу от внутреннего RC-генератора на 4 МГц. CKSEL = 0010 , SUT = 10 , все остальные = 1.

Итог:
Я не уверен, что мой вариант термометра с применением семисегментного индикатора самый маленький.

Файлы:

- Печатная плата в формате SL 5.0.

У вас нет доступа к скачиванию файлов с нашего сервера - Прошивка МК.

У вас нет доступа к скачиванию файлов с нашего сервера - Исходники прошивки.

У вас нет доступа к скачиванию файлов с нашего сервера - Проект для Proteus.

Поделиться