Универсальный мини термометр

Описанная здесь система представляет собой универсальный двухканальный термометр. Работает в диапазоне температур от -50,0 до +99,9 градуса. Система была разработана для измерения температуры в доме и на улице, но вы можете найти множество других применений.  После изменения программного обеспечения устройство может действовать как простой термостат или более сложный регулятор температуры. Система была построена на основе популярного датчика DS18B20 и микроконтроллера ATTiny2313 , что значительно упростило его конструкцию и уменьшило его размеры. Термометр собран на SMD компонентах, так что почти все элементы поместились под обычный трехзначный дисплей высотой 15 мм.
   Это позволяет установить готовый модуль термометра или простой термостат в существующее устройство или использовать корпус, немного больший, чем дисплей. В базовой версии термометр может измерять две температуры, используя два датчика, подключенных к независимым шинам. Изменение отображаемой в данный момент температуры осуществляется с помощью двух кнопок. 
 На рис.1 приведена принципиальная схема термометра. Сердцем устройства является микроконтроллер U1 (ATTINY2313), который работает на внутреннем генераторе частотой 8 МГц без делителя частоты. Отсутствие кварцевого резонатора позволило уменьшить размеры платы и дополнительно позволило использовать свободный вывод XTAL в качестве входного порта PA0, к которому  подключена кнопка S2 . Задача микроконтроллера - считывать измерения температуры с двух датчиков, пересчитывать показания в удобную для отображения форму и управлять кнопками S1 и S2 .

                                               

Простота схемы обусловлена используемым датчиком температуры DS18B20 . Это типичный 12-разрядный цифровой термометр, способный работать в диапазоне от -55 до +125 градусов. Время обработки (преобразования) температуры в двоичное значение (число) длится не более 750 мс. Показания температуры являются полностью цифровыми, а связь с микроконтроллером обеспечивается популярной шиной 1-Wire.
 Для представления температуры используется трехзначный семисегментный светодиодный дисплей с общим анодом (LTD056BSR-10) с внутренне соединенными сегментами, адаптированными для мультиплексирования.  Резисторы R4-R11 (330) ограничивают ток светодиодного дисплея максимальным значением 10-12 мА (на сегмент). Тем не менее, средний ток будет меньше из-за мультиплексирования. Три транзистора T1-T3 (BC857) используются для управления анодами дисплея. Их базовые токи ограничены резисторами R1-R3 (3к3). Цифры подсвечиваются  путем циклической подачи низкого состояния на базу одного из транзисторов T1-T3 . В то же время на порту B микроконтроллера должно появляться кодированное значение, которое отображает отображаемый символ. Важным компонентом здесь является разъем GP1 , который также является местом подключения датчиков и выходом управления (в случае термостата). Можно не ставить разъем, просто припаяйте провода прямо к плате. В программе термометра низкое состояние на выходе управления появляется при отрицательной температуре. Просто подключите светодиод с последовательным резистором 470R между выводом 3 (OUT) и + 5В, чтобы получить знак «-».Описание контактов разъема GP1 показано на рис.2.
 

                                               

                                                     Монтаж платы

Расположение элементов показано на рис.3, а печатная плата в формате Sprint-Layout 6.0 находится в архиве. При изготовлении плату зеркалить.
 

                                           

Сборка не сложная, но требует небольшой практики пайки SMD. 
В самом начале надо припаять элементы SMD . Белая полоса на корпусе танталовых конденсаторов обозначает плюс. Недостатком маленькой платы является отсутствие разъема для программирования процессора. Поэтому для прошивки контроллера, подпаяйте провода для программирования к соответствующим выводам микроконтроллера. Провода питания также припаивают непосредственно к плате. 
Контакты 1 и 2 этого разъема - это питание и земля соответственно. Управляющий выход (OUT) доступен здесь на контакте 3. Датчики должны быть подключены в три провода с использованием линий питания, заземления и сигнальных линий 5 и 6. Линия данных первого датчика должна быть подключена к контакту 5, а второго датчика - к контакту 6 разъема GP1 (см. рис.2). Термометр питается от 7-12 В, благодаря наличию стабилизатора 78L05 . Ничто не мешает  подавать внешнее напряжение питания 5В непосредственно на термометр.

                           Описание программы

Программа управления термометром  написана на BASCOM AVR . Он занимает около 70% доступной памяти микроконтроллера. Работа программы не сложна и, в двух словах, выглядит так: все время "процесс" вращается в бесконечном цикле Do Loop, ожидая установки одного из временных флагов в прерывании. Timer0 отвечает за правильное время. Каждые 4 мс запускается процедура мультиплексирования дисплея, в которой в нужный момент выскакивает показание температуры.
 Процедура обработки прерываний Timer0 показана ниже                                        

                                

Первоначально значение 131 загружается в счетчик таймера, который дает прерывание после 125 импульсов (256-131). Таймер работает с аппаратным делителем 256, который на тактовой частоте 8 МГц дает прерывание каждые 4 мс. Сразу после прерывания устанавливается флаг F4ms. Переменные Dziel (1) и Dziel (2) являются делителями частоты. Первый отвечает за деление на 25, и после переполнения счетчика устанавливается флаг F100ms (это происходит каждые 100 мс). Вторая переменная является счетчиком до 10 и гарантирует, что флаг F1s устанавливается каждые 1 с. 

Основной цикл показан ниже:

                     

Операция очень проста и зависит только от флагов: F4ms и F100ms. Большую часть времени процессор вращается в бесконечном цикле Do Loop, ожидая установки одного из флагов. Каждые 4 мс вызывается процедура, поддерживающая отображение и измерение температуры, а каждые 100 мс считываются состояния клавиш. В базовой версии программы простое управление с клавиатуры достаточно для непосредственного чтения состояния входных контактов. Нажатие S1 вызывает считывание второго датчика, тогда как нажатие S2 вызывает считывание первого датчика. 

Процедура отображения и измерения температуры показана ниже:
                     

                                   

Действие состоит из 5 шагов в зависимости от состояния вспомогательной переменной Mux. Она принимает значения от 0 до 4 и циклически изменяется при следующем вызове процедуры. Отрицательное значение переменной Minus копируется в управляющий выход (Port D.3). Он отвечает за отображение отрицательных температур и, следовательно, на порте D.3 микроконтроллера появляется низкий уровень, когда измеренная температура отрицательна. Затем, благодаря циклу for, переменная Wysw, содержащая отображаемое значение, делится на три отдельные цифры. Затем они преобразуются в коды светодиодного дисплея с помощью команды Lookup (с использованием таблицы преобразования). После выхода из цикла for получается массив W (n) с закодированными значениями, где n = 1 ... 3 индексирует последующие символы дисплея. 

Остальная часть процедуры зависит от переменной Mux. При значении от 0 до 2 последовательные цифры подсвечиваются выключением предыдущего анода, отображением значения следующего символа на Portb и включением соответствующего анода. Исключением здесь является символ W (2), где дополнительная операция (А & B11011111) обеспечивает добавление десятичной точки после второго символа. Для значения Mux = 3 вызывается процедура измерения температуры, а состояние Mux = 4 - это фаза ожидания спокойного завершения измерения температуры. 

Процедура измерения температуры показана ниже: 

                      

Эта процедура вызывается примерно каждые 20 мс, однако измерение выполняется каждые 1 с благодаря проверке состояния флага F1s. Существует типичное 1-Wire обслуживание для случая только одного объекта на шине. Все команды 1-Wire вызываются параметром Kanal, который определяет, с какой шины будет считываться температура (pind.0 или pind.1). После сброса отправляется инструкция об обходе проверки ПЗУ и отправляется заказ на считывание регистра DS18B20 . Затем два байта температуры считываются в переменную T (целое число), определяется температурный знак и выполняются простые вычисления. В результате переменная T принимает форму температуры в градусах, умноженных на 10 (например, от 13 до 1,3 градусов). В самом конце посылается команда для преобразования температуры, чтобы получить ее текущее значение в следующем чтении. 

Система может быть преобразована в термостат без особых усилий. Здесь мы отказываемся от двухканального измерения температуры и отрицательных температур за счет исключения управления выхода. К управляющему выходу (Portd.3) вы можете подключить оптотриак и триак, управляющий любым приемником переменного тока, или вы можете подключить МОП-транзистор, управляющий приемником постоянного тока. В основном цикле вам нужно будет внести изменения, показанные ниже:

                                      

Такой код требует, чтобы Tu, H и L были объявлены как Integer, а Ust как Bit, так и Autoret как Byte в начале программы. Кроме того, переменная Tu должна иметь начальное значение, поскольку оно является значением заданной температуры. В процедуре отображения и измерения удалите линейку, отвечающую за сигнализацию отрицательных температур, поскольку portd.3 теперь служит выходом управления. Представленное решение не является идеальным, оно не ограничено установленными значениями и не может сохранить настройки в памяти EEPROM, но во многих ситуациях оно будет отличным. Схема может успешно работать в качестве газонного термостата, если значение Tu по умолчанию установлено на 40 градусов.

                                                            Фьюзы

 Фьюзы микроконтроллера должны быть настроены на работу с внутренним 8-МГц RC-генератором, который на практике отключит только аппаратный делитель (бит CKDIV). Настройки fusebit приведены ниже:

                          

 

Материал взят с сайта http://mirley.net

 


                             

[ Скачать файлы (14.4 Kb) ]
 
Просмотров: 1994 | Добавил: viktorovich57 | 08.12.2019
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
авторизация