Главная » Микроконтроллеры
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

Универсальный двухканальный термометр на 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Поиск в Utsource В блокнот
U3 Линейный регулятор
L78L05
1 SOT89Поиск в Utsource В блокнот
T1-T3 Биполярный транзистор
BC857
3 Поиск в Utsource В блокнот
C1 Конденсатор100 нФ1 Поиск в Utsource В блокнот
C2, C3 Электролитический конденсатор10 мкФ2 Танталовый SMD 3216AПоиск в Utsource В блокнот
R1-R3 Резистор
3.3 кОм
3 SMD 0805Поиск в Utsource В блокнот
R4-R11 Резистор
330 Ом
8 SMD 0805Поиск в Utsource В блокнот
R12, R13 Резистор
4.7 кОм
2 SMD 0805Поиск в Utsource В блокнот
W1 Семисегментный индикаторAT5636BMR1 Поиск в Utsource В блокнот
S1, S2 Кнопка тактоваяБез фиксации2 Поиск в Utsource В блокнот
GP1 Вилка штыревая1 6 пиновПоиск в Utsource В блокнот
Добавить все

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

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

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

Теги:

Опубликована: Изменена: 18.01.2014 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (8) | Я собрал (0) | Подписаться

0
Aleksey #
Собрал все по статье, вроде бы работает без проблем, но почему то не отображает "-" на дисплее. Т.е. отличить минусовую от плюсовой нельзя. Эта функция вообще реализована? В чем может быть проблема?
Ответить
0
Роман #
Да, такая функция есть. Сегмент на индикаторе рабочий? Фьюз-биты стоят правильно? Такое поведение и с одним, и с другим датчиком?
Ответить
0
Алексей #
Сегмент рабочий, исправно показывает двухзначную температуру. Оба датчика не отображают знак "-". Фьюз биты по идее правильные, т.к. термометр работает, да и если бы фьюзы были неверные, думаю это не проявилось бы только в отсутствии минуса.
Ответить
0
Алексей #
А каким именно образом реализована индикация "-"? На первом сегменте дисплея или вообще отдельным светодиодом вообще?
Ответить
0
Алексей #
Ну что же, методом проб разобрался сам. Действительно для отрицательных температур надо цеплять светодиод на 7 ножку (на схеме OUT "-" LED на разъеме и +5 в).
7-я ножка это соответственно минус, а на плюс через резистор. Странно, почему это не указано в статье.
Ответить
0
dark8080 #
А нельзя сделать чтобы без кнопок, температура менялась сама каждые 2 - 3 секунды?
Ответить
0
Николай #
Собрал, работает, спасибо
Ответить
0
Дмитрий #
Как реализовано отображение данных:нажал кнопку 1-показывает с 1-го датчика, нажал кнопку 2-переключилось на 2-1 датчик?
И кто сможет реализовать перевод контроллера в сон в программе?
Подцепить на 4 ножку еще одну кнопку, по нажатию контроллер засыпает, по повторному нажатию просыпается?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
ELM327 OBD II — адаптер с поддержкой CAN Модуль измерения тока на ACS712 (30А)
вверх