пятница, 7 сентября 2012 г.

Термометр с линейной шкалой.


Классический термометр на микроконтроллере строится с использованием светодиодного или жидкокристаллического цифрового индикатора. Информативность и удобство использования таких устройств не вызывают сомнений, но иногда хочется чего-то более интересного. Одним из вариантов измерителя температуры может стать термометр с линейной шкалой, имитирующий работу жидкостных или ртутных приборов. Реализовать подобное устройство оказалось не очень сложно.
Проект термометра с линейной шкалой вынашивался несколько лет. Основная идея предполагала использование простого процессора типа PIC12F629 и микросхемы светодиодной индикации MAX7219. Главным сдерживающим фактором оказалась печатная плата. Вырисовывалась она только двухсторонней. Желание попробовать сделать ее с помощью ЛУТ наталкивалось на опасения получить неудачный экземпляр. К счастью появилась возможность получить экземпляр промышленного качества, что и было сделано. При этом габариты термометра очень сильно уменьшились от первоначального проекта. 
Основу схемы термометра составляет связка микроконтроллера PIC12F629 и драйвера MAX7219. Выбор на эти компоненты пал по одной причине –есть в наличии. В принципе все то же самое можно реализовать на каком-либо одном контроллере. Учитывая, что сегодня появились многоножечные модели, есть вариант обойтись даже без динамической индикации.
Микросхема MAX7219 может управлять свечением 64 отдельных светодиодов, либо 8 семисегментных индикаторов. Для проекта была применена комбинированная схема, в которой задействованы 40 светодиодов и 3 индикатора. Количество светодиодов позволяет выполнить отображение температуры в диапазоне от 0 до 40 градусов, с шагом в 1 градус, что вполне достаточно для комнатного термометра. При желании можно изменить диапазон на -40 +40 градусов, но шаг уже составит 2 градуса.
Микроконтроллер PIC12F629 предназначен для опроса датчиков, преобразования температуры и управления драйвером. Работает он от встроенного тактового генератора, и не требует никаких дополнительных элементов. В качестве датчиков изначально планировалось использовать DS18B20, но в процессе изготовления появилась идея применить какой-либо измеритель с шиной I2C. В качестве такового опробован датчик STLM75.
Печатная плата полностью разведена в Eagle. Потребовалась некоторая дополнительная доработка, но в остальном все получилось неплохо. Уже на этапе программирования проявилась одна небольшая ошибка. Светодиод, отвечающий за десятичную точку(при использовании индикаторов), был установлен первым, а зажигается последним в линейке. Проблема устранена программно, но хотелось бы что бы ее вообще не было.
Печатная плата была заказана на сайте http://newpcb.ru/. Большое спасибо производителям за быстрое и качественное изготовление.
Управляющая программа микроконтроллера написана в среде mikroPascal. Использована демонстрационная версия компилятора. Объем генерируемого кода в этой версии ограничен 2Кб, что вполне достаточно для PIC12F629, имеющего на борту 1Кб ПЗУ. В процессе написания кода были использованы встроенные библиотеки для работы с датчиками, вернее с шинами 1-Wire и I2C.
В процессе изготовления постоянно мешали новые варианты, применения данной конструкции. В первую очередь напрашиваются два датчика. Для этого предусмотрены два светодиода, связанные с неиспользуемыми десятичными точками на индикаторах. Второй вариант – линейная шкала для разнообразных приборов. При этом если использовать процессор PIC12F675, имеющий АЦП, то можно получить вольтметры, амперметры и другие устройства. Единственное, что может потребоваться – изменить расположение семисегментных индикаторов.
P.S. Если кого-то заинтересует конструкция, есть несколько печатных плат и комплект деталей. Пишите.