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

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

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

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

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

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

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

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

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

Выводы 1 и 2 этого разъема это питание и заземление. Вывод 3 предназначен для подключения индикации отрицательных температур (Катодом на разъем, анодом на +5В через резистор 200 — 300 Ом). Датчики подключаются через 3-хжильный провод. Первый датчик подключается к выводу 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-битATtiny23131
SO20U3
Линейный регуляторL78L051
SOT89T1-T3
Биполярный транзисторBC8573
C1
Конденсатор100 нФ1
C2, C3
Электролитический конденсатор10 мкФ2
Танталовый SMD 3216AR1-R3
Резистор3.3 кОм3
SMD 0805R4-R11
Резистор330 Ом8
SMD 0805R12, R13
Резистор4.7 кОм2
SMD 0805W1
Семисегментный индикаторAT5636BMR1
S1, S2
Кнопка тактоваяБез фиксации2
GP1
Вилка штыревая1
6 пиновДобавить все

Скачать список элементов (PDF)

Оригинал статьи

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.