Универсальный двухканальный термометр на AVR

Перед вами проект двухканального термометра. Он может измерять температуру в диапазоне от -50.0 до +99.9 градусов. Устройство было разработано для измерения температуры в доме и на улице, но ему также можно найти и множество других применений. При небольшом изменении программы устройство также можно использовать в качестве термостата. Термометр построен на популярном и очень широко распространенном датчике DS18B20 и микроконтроллере ATtiny2313, что значительно упростило разработку и позволило значительно уменьшить размеры. Термометр удалось сжать так, что почти все элементы расположены под трехразрядным дисплеем 15 мм. Практически все элементы SMD. Конечно, можно было бы применить TH компоненты, но в эпоху миниатюризации лучше сделать еще один шаг вперед по созданию системы с наименьшими размерами. Термометр может измерять температуру в двух местах, с помощью двух датчиков, подключенных на независимых шинах. Изменение отображаемой температуры осуществляется с помощью двух кнопок.

Проект был опубликован в журнале Электроника для всех, 08/2011 и выпускается в виде комплекта AVT2985

Принцип работы

Принципиальная схема:

Сердцем устройства является микроконтроллер U1 (ATTINY2313), который тактируется от внутреннего генератора 8MHz, без делителя частоты. Отсутствие кварца позволило уменьшить размеры устройства, а также освободило две ножки МК, к одной из них сейчас подключена кнопка S2. Микроконтроллер получает показания температуры с двух датчиков, преобразовывает данные в форму, пригодную для отображения на дисплее и обрабатывает нажатия кнопок S1 и S2. Конденсатор С1 (100nF), расположенный рядом с микроконтроллером — фильтрующий. Конденсаторы С2 (10 мкФ) и С3 (10 мкФ) необходимы для правильной работы U3 (78L05).Простота схемы обусловлена используемым датчиком температуры. Это 12-битный цифровой термометр, который может работать в диапазоне от -55 до +125 градусов. Время обработки (преобразования) температуры длится не дольше, чем 750 мс. Связь с микроконтроллером осуществляется по интерфейсу 1-Wire. В качестве индикатора температуры используется трехзначный светодиодный дисплей (AT5636BMR-В) с внутренними соединениями сегментов, адаптированный для динамической индикации. Резисторы R4-R11 ограничивают ток на светодиодном дисплее до 10-12 мА (на сегмент). Тем не менее, средний ток меньше из-за использования динамической индикации. Управление анодами осуществляется тремя популярными транзисторами Т1 — Т3 (BC857). Токи базы ограничены резисторами R1-R3 (3,3 кОм). Важным компонентом является разъем GP1, через который подключаются датчики и управляющий выход (в случае термостата). 

Изготовление

Устройство изготовлено на основе печатной платы. Плата односторонняя, и почти все элементы SMD. Исключением является дисплей, кнопки управления и разъемы. Сборка не сложная, но требует большого мастерства при пайке SMD. Недостатком платы является отсутствие разъема  для программирования, так что если придется вносить изменения в программу вам необходимо будет припаять провода программатора к плате напрямую. Но можно установить на плате миниатюрный разъем. 

Распиновка разъема

Выводы 1 и 2 этого разъема это питание и заземление. Вывод 3 предназначен для подключения индикации отрицательных температур (Катодом на разъем, анодом на +5В через резистор 200 — 300 Ом). Датчики подключаются через трехжильный провод. Первый датчик подключается к выводу 5, а второй датчик к выводу 6. Устройство питается от 7-12В через стабилизатор 78L05.

Программирование

Программа написана в известной среде программирования BASCOM AVR. Она занимает около 70% памяти микроконтроллера и может быть успешно скомпилирована в демо версии BASCOM’a. Программа не сложная. Далее представлены некоторые элементы кода

Обработчик прерывания Timer0:

 Przerwanie0: Timer0 = 131    Set F4ms    Incr Dziel(1)    If Dziel(1) = 25 Then      Dziel(1) = 0      Set F100ms      Incr Dziel(2)      If Dziel(2) = 10 Then        Dziel(2) = 0        Set F1s      End If    End If Return

Основной цикл:

 Do   If F4ms = 1 Then   Reset F4ms                                                'co 4ms   Wysw = T   Gosub Wyswietl_zmierz End If   If F100ms = 1 Then   Reset F100ms                                              'co 100ms   If Pind.2 = 0 Then Kanal = 1   If Pina.0 = 0 Then Kanal = 0 End If   Loop End

Процедура управления дисплеем:

 Wyswietl_zmierz:   Incr Mux   If Mux = 5 Then Mux = 0     Portd.3 = Not Minus     For I = 1 To 3     Wysw_pomoc = Wysw Mod 10     Ww = Wysw_pomoc     W(i) = Lookup(ww , Tabela)     Wysw = Wysw / 10   Next I   If W(3) = 40 Then W(3) = 255           'wygaszenie zera wiodącego     Select Case Mux     Case 0:       Portb = W(3)       Reset Portd.6     Case 1:      Set Portd.6      Portb = W(2) And &B11011111      Reset Portd.5     Case 2:      Set Portd.5      Portb = W(1)      Reset Portd.4     Case 3:      Set Portd.4      Portb = 255      Gosub Temp     'Case 4:     End Select Return   Tabela:     Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160

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

 Temp:  If F1s = 1 Then    Reset F1s    1wreset Pind , Kanal    1wwrite &HCC , 1 , Pind , Kanal    1wwrite &HBE , 1 , Pind , Kanal    T = 1wread(2 , Pind , Kanal):    Minus = T.15    T = Abs(t)    T = T * 10    T = T / 16    1wreset Pind , Kanal    1wwrite &HCC , 1 , Pind , Kanal    1wwrite &H44 , 1 , Pind , Kanal   End If Return  

Fusebits микроконтроллера должны быть установлены для работы с внутренним RC-генератором с частотой 8 МГц

Фотографии

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит ATtiny2313 1 SO20
U3 Линейный регулятор L78L05 1 SOT89
T1-T3 Биполярный транзистор BC857 3
C1 Конденсатор 100 нФ 1
C2, C3 Электролитический конденсатор 10 мкФ 2 Танталовый SMD 3216A
R1-R3 Резистор 3.3 кОм 3 SMD 0805
R4-R11 Резистор 330 Ом 8 SMD 0805
R12, R13 Резистор 4.7 кОм 2 SMD 0805
W1 Семисегментный индикатор AT5636BMR 1
S1, S2 Кнопка тактовая Без фиксации 2
GP1 Вилка штыревая 1 6 пинов