Термометр на ATmega8 и датчике DS18B20

Admin 07.05.2015

Доброго дня уважаемые друзья!
Приветствую Вас на сайте «Мир микроконтроллеров»


Термометр на ATmega8 и датчике температуры DS18B20

Схема термометра на ATmega8 и DS18B20
Микроконтроллер ATmega8
Цифровой термометр DS18B20
Семисегментный светодиодный индикатор
Алгоритм программы термометра
Программа цифрового термометра на DS18B20

Схема и программа очень простого цифрового термометра с использованием микроконтроллера ATmega8 и датчика температуры DS18B20. Термометр позволяет измерять температуру от 0 до 99 градусов с точностью до 0,5 градусов с разрешением 0,1 градуса

Термометр на ATmega8 и датчике DS18B20

Термометр по своим характеристикам очень прост, и его можно использовать только как термометр для измерения «комнатной» температуры. Использовать в этой конструкции микроконтроллер с памятью 8 килобайт конечно расточительно, можно применить микроконтроллер и попроще. Но дело в том, что эта конструкция — основа для дальнейшего развития проекта с использованием цифрового датчика температуры DS18B20. В следующей статье будет опубликована конструкция другого термометра — на двух датчиках DS18B20, что позволит измерять температуру не только в комнате, но и «за бортом». Естественно, будет добавлена возможность измерять и отрицательные температуру. В дальнейшем в конструкцию будет добавлена функция термостата, часы, возможность работы с различными нагрузками, что позволит уже собрать несложную конструкцию — основу «умного дома». Ну а сегодня первая статья из этой серии.


Схема термометра на ATmega8 и датчике температуры DS18B20

Давайте посмотрим на схему термометра:

Термометр на микроконтроллере AVR и датчике DS18B20

Как видите, схема очень проста, используется только необходимый минимум деталей.
В схеме, для индикации показаний, применен семисегментный трехразрядный светодиодный индикатор (описание и подключение семисегментных индикаторов к микроконтроллеру).

Напряжение питания конструкции — 5 вольт. Если вы примените микроконтроллер с низковольтным питанием (линейка микроконтроллеров ATmega), то можно и понизить питающее напряжение конструкции, но в этом случае, возможно придется уменьшить номинал гасящих сопротивлений в сегментах индикатора. Приблизительно номиналы сопротивлений можно брать:
— при питании 5 вольт — 200-300 Ом
— при питании 2,7 — 3 вольта — 100-150 Ом
(здесь вы можете ознакомиться с расчетом гасящих сопротивлений для семисегментных индикаторов)
(здесь вы можете ознакомиться с маркировкой микроконтроллеров)
Транзисторы — любые, маломощные, структуры NPN.
Датчик температуры — DS18B20 (ознакомиться с датчиком температуры DS18B20)
Семисегментный индикатор — любой трехразрядный с общим катодом. Если вы захотите применить другие, с общим анодом, тогда придется заменить транзисторы на PNP и внести изменения в программу (заменить массив двоичных кодов для вывода цифр на индикатор). Я применил индикатор красного цвета свечения, и заодно, для следующей схемы, приготовил такой-же, но голубого цвета свечения.


Детали термометра на микроконтроллере ATmega и DS18B20

Микроконтроллер ATmega8:
Микроконтроллер ATmega8
Распиновка микроконтроллера ATmega8:
Распиновка ATmega8


Трехразрядный семисегментный индикатор FYT-5631AUR-21:
FYT-5631AUR-21, 3-х разрядный светодиодный индикатор (ОК)Распиновка семисегментного индикатора:

Распиновка семисегментного индикатора


Датчик температуры DS18B20:
Внешний вид DS18B20Выводы DS18B20


Транзисторы BC547C:
Транзистор BC547CВыводы транзистора BC547C


Алгоритм работы программы термометра на ATmega и DS18B20

Все установки микроконтроллера заводские, FUSE-биты трогать не надо.

Для работы программы задействовано два таймера/счетчика микроконтроллера:
восьмиразрядный Т0
шестнадцатиразрядный Т1
С помощью восьмиразрядного таймера Т0 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/8 (период 2 миллисекунды) организован:
— расчет текущей температуры
— динамический вывод результатов измерения температуры датчиком DS18B20
С помощью шестнадцатиразрядного таймера Т1 настроенного на вызов прерывания по переполнению, с внутренней частотой СК/64 (период 4 секунды) организованно:
— подача команды датчику DS18B20 на измерение температуры
— считывание измеренной температуры с датчика
В принципе, можно задействовать и один восьмиразрядный таймер/счетчик, также настроенный на вызов прерывания по переполнению, с внутренней частотой СК/8, и всю работу схемы организовать в процессе обработки прерывания. Но дело в том, что смысла в этом нет — датчику DS18B20 необходимо чуть меньше 1 секунды (при 12-ти битном разрешении) для конвертирования (определения) температуры, т.е., чаще чем 1 раз в секунду мы не сможем обновлять данные температуры. Кроме того, столь частое обновление температуры приведет к нагреву датчика и, соответственно, к искажению реальных данных. Использование второго счетчика позволяет отдельно задавать промежутки времени измерения температуры.

Вот так выглядит основная часть программы в Algorithm Builder:

Программа термометра на ATmega8 и DS18B20

Где:

SP — настройка начального адреса стека 

Timer 0 — настройка таймера T0:

Настройка таймера Т0

Timer 1 — настройка таймера Т1:

Настройка таймера Т1

TIMSK — настройка прерываний от таймеров:

Настройка прерываний

Init_Display — подпрограмма настройки разрядов портов, участвующих в динамической индикации вывода данных на трехразрядный семисегментный индикатор

1 —> I  —  глобальное разрешение прерываний

— далее программа уходит в бесконечный цикл, и вся работа программы происходит при вызове прерываний от таймеров.

Если возникнут вопросы, если что-то изложено не понятно или есть вопросы по программе, пишите — отвечу.


  Программа термометра в HEX файле (2,4 KiB, 6 100 hits)

  Программа термометра в Algorithm Builder (7,1 KiB, 4 315 hits)


Второй вариант программы, без 4-х секундной задержки измерения температуры. Температура измеряется непрерывно (интервал менее 1 секунды)

  Термометр 2 - HEX файл (2,4 KiB, 2 950 hits)

  Термометр 2 в AlgorithmBuilder (11,1 KiB, 3 345 hits)


Скачать варианты программы с ЯндексДиска


Другие конструкции на микроконтроллерах
1. Простые электронные часы на микроконтроллере ATyni26, с использование микросхемы часов реального времени DS1307
2. Двухканальный термометр на микроконтроллере ATmega8 и датчиках температуры DS18B20
3. Двухканальный термостат, терморегулятор на ATmega8 и датчиках DS18B20
4. Двухканальный термометр, термостат, терморегулятор с возможностью работы по времени, одноканальный таймер реального времени на ATmega8 и датчиках DS18B20
6. Двухканальный термометр, часы на ATmega8, датчиках температуры DS18B20, RTC DS1307, LCD 1602


(16 голосов, оценка: 4,75 из 5)
Загрузка...
Схема, программа очень простого термометра на микроконтроллере ATmega8 с использование датчика температуры DS18B20
Published by: Мир микроконтроллеров
Date Published: 05/07/2015

Комментарии

Термометр на ATmega8 и датчике DS18B20 — 48 комментариев

    • Здравствуйте Хасан!
      1. Проблема в датчиках
      2. Проблема дисплеи
      3. Проблемы в МК
      С уважением, Admin.

  1. Здравствуйте Админ!Хочу собрать вашу схему, но так как имеется некое количество ATMega48 20AU нужна прошивка под этот МК,если конечно у вас найдётся свободное время.Заранее спасибо.

  2. Здравствуйте, все собрал, залил прошивку, но при включении появляются нули и все, не подскажете
    что делать?

    • Здравствуйте Антон!
      Попробуйте промоделировать на схеме без ключевых транзисторов.
      С уважением, Admin.

      • здравствуйте. в данной версии прошивки не подойдет датчик DS1820, DS18S20. после сборки показывает температуру по нулям.

        • Здравствуйте Антон!
          Вы правы, эти датчики не подойдут.
          DS1820 — 9 разрядный датчик, уже не выпускается.
          DS18S20 — 9 разрядный, пришел на замену DS1820.
          Заменить ими DS18B20, без изменения программного кода не получится.
          С уважением, Admin.

          • просто у меня нет возможности купить в ближайшее время ds18b20, а в наличии только ds18s20. вы можете помочь с изменением кода программы?

          • К сожалению, у меня нет возможности переделать программу под DS18S20.
            С уважением, Admin.

  3. Здравствуйте Админ! Повторил Вашу схему, залил Ваши прошивки. Схема работает, но почему-то..:
    1. Температура выдается несколько большая (подозрение есть на датчик конечно, но все же..) чем в реальности(например, в комнате 23 грд цельс, а на индикаторе 33-34 грд)?
    2. Не загораются некоторые сегменты (индикатор проверил, он исправен. Тип Е30361-l китайский).Все подключения по схеме между МК и индикаторов проверил. Ок! ?
    Ответьте пож-ста. С уважением Роман
    P.S. ..Да, еще желательно исходники посмотреть на С. Такое возможно?

    • Здравствуйте Роман!
      Программа скачана более двух тысяч раз, проблем не было.
      Возможна причина в микроконтроллере.
      На С программы нет, пишу в Algorithm Builder
      С уважением, Admin.

  4. здравствуйте .хочу задать вопрос некоторым образом связанный с вашими часами ,но мне нужно немного изменить конструкцию ваших часом для применения ее в дальнейших самоделках ,а как это сделать я не знаю .и так начну рассказ ,мне нужно чтобы был некий термометр бытового измерения температуры .представим его работу по необычному принципу вывода информации измерений ,когда температура от 0-16градусов цельсия на выводах контроллера atmega появляется логический код на трех шинах 000,от16-25 градусов 100,ну и выше от25-… появляется код 010,а когда температура уменьшается то процесс происходит в обратном порядке.вот как можно собрать измеритель температуры как у вас на схеме но , информация о температуре преобразовывалась вот втакой код как я написала выше.мне очень надо такую схему сделать иначе я себе всю голову сломала ее придумывая и так пока ничего не придумала кроме как на atmege схему собрать

    • Здравствуйте Инна!
      Постараюсь Вам помочь.
      Несколько вопросов:
      1. На индикатор будет выводится температура в нормальном виде или указанные коды?
      2. Если на индикатор выводится температура в нормальном виде, то на какой порт и на какие его выводы должен выводиться трехзначный код?
      С уважением, Admin.

  5. Скажите а как будет выглядеть программа на С. Я например не знаю как читать данные с датчика и потом выводить их на индикатор. Часть программы для индикатора у меня есть.

      • а вы сами знаете этот язык, или может кто то мне подскажет как написать, то есть какую команду дать на считывание с датчика, хранение в ячейки памяти атмеги а потом на вывод на индикатор. МОжет не вы может кто то другой подскажет.

  6. Admin, выручай не качаются программы для того, чтобы разобраться получше что и как

    • Здравствуйте Dmitriy!
      Выложил оба варианта программы на ЯндексДиске.
      Ссылка в конце статьи.
      С уважением, Admin.

  7. Что-то Админ совсем забросил эту тему. Я прошу дать вариант программы со сменой значений на дисплее 1 сек. Меня устроят те продостережения что даны в описании.

    • Здравствуйте Владислав!
      Хорошо, сделаю для Вас вариант с секундной задержкой, скоро выложу.
      С уважением, Admin.

      • Доброго дня Владислав!
        Для Вас выложен второй вариант программы с непрерывным измерением температуры (интервал менее 1 секунды)
        С уважением, Admin.

        • Я не увидел никакой разницы ни в работе, ни в НЕХ файлах — делал Compare, правда визуально.

          • Владислав, попробуйте в «железе», программа изменена для Вас.
            С уважением, Admin.

          • Так я и пробовал в железе. Как было 4 сек так и осталось.

          • Владислав!
            Я скачал файл, выложенный здесь, собрал схему, запрограммировал.
            Результат: конструкция работает и измеряет температура с интервалом менее 1 секунда.
            С уважением, Admin.

          • Предлагаю продолжить общение в личке.

          • Вадим, чудес не бывает. Если оба НЕХ-файла абсолютно одинаковы бит в бит, то и работают одинаково — 4 сек обмен. Укажите плз в каких адресах есть отличие между 4сек и 1сек?

          • Может разница в настройках МК — Fuses?

          • Здравствуйте Владислав!
            Заменил HEX-файл
            Скорее всего были происки «врагов»:)
            Спасибо за замеченную ошибку.
            С уважением, Admin.

          • Совсем другое дело! Работает прекрасно. Спасибо огромное.

      • Есть ошибки в схеме. Перепутаны выводы от МК к транзистору индикатора. Первая прошивка работает, вторая молчит.

        • Здравствуйте Юрий!
          Ошибки в схеме нет, просто второй вариант программы — программа для двух датчиков.
          Разберусь конкретно, перезалью программы.
          Спасибо.
          С уважением, Admin

          • Еще раз здравствуйте Юрий!
            Разобрался — не тот номер присвоил файлу на сервере для загрузки,
            поэтому загружалась программа для двухканального термометра.
            Ошибка исправлена.
            Еще раз спасибо.
            С уважением, Admin.

  8. Работает нормально, но обновление надо сделать чаще, а то слишком большая задержка. Быстрое изменение температуры очень неудобно наблюдать.

      • Здравствуйте Сергей!
        В течении 2-3 дней соберу и проверю работу конструкции, после этого отпишусь.
        С уважением, Admin.

          • Здравствуйте Сергей!
            Примите мои извинения за долгое ожидание.
            К сожалению до 15 октября у меня не будет возможности проверить работу программы.
            Перед выкладкой этой статьи на сайт, конструкция была собрана на макетной плате и работала без замечаний.
            С уважением, Admin.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *