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


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

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

  • минимальные размеры (в разумных пределах)

  • минимальная стоимость

  • простота конструкции

  • высокая повторяемость

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

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

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

      Итак схема:

Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 4 транзистора и 4 резистора, по сравнению с аналогичными схемами. Тут некоторые скажут: "так нельзя - большая нагрузка на порты!!!". Читаем datasheet на сей контроллер "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.Глюков связанных с питанием не замечено.

Ну и далее фотки платы:

пустая плата, изготовленная "лазерным утюгом"
собранная плата: вид со стороны проводников (не хватает стабилизатора)
вид со стороны элементов (не запаян индикатор)

Далее запаиваем индикатор и программируем:

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

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

Заработало!!!

Итак, прошили, включили... Хм... работает!!! (а вот про эту красную штуку справа - читаем тут)

Ну ещё вот в таком виде:

Ответ на вопрос "что делают кнопочки ПЛЮС и МИНУС - читаем в статье ТЕРМОСТАТ". Это то, о чём говорилось в 5-м пункте "Чего хотелось".

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

Если есть вопросы или предложение - пишите! Мой e-mail под аватарой.

X