Термометр на ATtiny2313 и DS18B20 (ATtiny2313, С)
В Интернете есть куча схем термометров на AVR, но как всегда хочется чего-то своего.. Да и мозги размять тоже следует. Этот термометр был одним из первых моих проектов.
Чего хотелось:
- минимальные размеры (в разумных пределах)
- минимальная стоимость
- простота конструкции
- высокая повторяемость
- универсальность (об этом чуть позже)
Что получилось:
Посмотрев подобные конструкции и покурив описалово на тиньку, которая оказалась под рукой (ATtiny2313), пришёл к выводу, что можно несколько упростить существующие конструкции и немного улучшить их характеристики.
Схема.
На схеме показан второй вариант включения термодатчика, если он не захотеть работать по однопроводной шине (что встречается очень редко). Обратите внимание, что подтягивающий резистор на 11 выводе должен быть именно 4,7кОм. Уменьшение или увеличение может привести к нестабильной работе датчика в случае включения по однопроводной схеме.
Как видим эта схема отличается от подобных отсутствием транзисторов на управление сегментов. Таким образом схема упростилась на 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.Глюков связанных с питанием не замечено.
Ну и далее фотки платы:
пустая плата, изготовленная «лазерным утюгом»
собранная плата: вид со стороны проводников (не хватает стабилизатора)
вид со стороны элементов (не запаян индикатор)
Далее запаиваем индикатор и программируем:
Проект собран по кускам, что-то из готовых проектов из Интернета, что-то дописано мной… Оригинальной идеей стала динамическая индикация. Проблема заключалась в том, что во время общения с датчиком температуры DS18B20 возникали моменты, когда «сканирование» индикации останавливалось. Поэтому обновление индикатора сделано не по прерываниям, а в главном цикле программы, и ещё вставлено кой-где в процедуре общения с датчиком… Плюсом данного способа стала высокая частота обновления, что исключило проблему мерцания.
Чуть не забыл — фьюзы для нормальной работы термометра:
Итак, прошили, включили… Хм… работает!!!
Итак как видим получилось довольно простое (куда уж проще???) устройство, которое по размерам не превышает размер индикатора. Кроме всего ещё и точность высокая: по описанию датчика — «±0.5°C accuracy from –10°C to +85°C». Как показала практика точность гораздо выше — около ±0,1°C. Сверял 10 экземпляров с лабораторным термометром, прошедшим метрологический контроль…
Скачать прошивку для индикатора с ОК(-)
Скачать прошивку для индикатора с ОА(+)
Скачать исходный код на С (CodeVisionAVR)
Автор Юрий. Е-mail: hardlock (пёсик) bk Сайт автора.
4 комментария