Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Универсальный двухканальный термометр на 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 Семисегментный индикаторAT5636BMR1 Поиск в магазине ОтронВ блокнот
S1, S2 Кнопка тактоваяБез фиксации2 Поиск в магазине ОтронВ блокнот
GP1 Вилка штыревая1 6 пиновПоиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (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

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
ELM327 OBD II — адаптер с поддержкой CAN Катушка Тесла
вверх