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


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

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

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

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

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


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

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

Термометр на DS18B20 ATmega8

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

Напряжение питания конструкции - 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 КиБ, 8 409 hits)

  Программа термометра в Algorithm Builder (7,1 КиБ, 5 999 hits)


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

  Термометр 2 - HEX файл (2,4 КиБ, 5 008 hits)

  Термометр 2 в AlgorithmBuilder (11,1 КиБ, 4 932 hits)


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


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


(17 голосов, оценка: 4,76 из 5)

Загрузка...


Схема, программа очень простого термометра на микроконтроллере ATmega8 с использование датчика температуры DS18B20
Published by: Мир микроконтроллеров
Date Published: 05/07/2015



Комментарии

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

    • Добрый вечер. По ссылкам внизу статьи можно скачать и Hex файл, и исходник

  1. Здраствуйте. Собрал термометр, прошил ATmega8 , фьюзы по умолчанию. На индикаторах меняются символы очень быстро, ничего не понятно, отключаю датчике температуры DS18B20 светятся черточки на трех индикаторах. Прошивка первая из сайта. Помогите разобраться, где ошибка?

    • Сергей, рад бы помочь, но, к сожалению, не могу. Эти статьи написаны предыдущим админом данного сайта. Сначала он некоторое время отвечал на комментарии к своим статьям, а потом куда то пропал

  2. Кстати, а вот меня всегда интересовал вопрос - почему именно этот датчик температуры DS18B20 вызывает такой интерес? Почему не датчики LM35 и DHT11, которые часто фигурируют в моих статьях про Arduino? Что в датчике DS18B20 такого особенного?

      • Да, к сожалению у нас на сайте нет статьи про подключение датчика DHT11 к микроконтроллерам AVR. Но вот статей про подключение данного датчика к плате Arduino у нас на сайте достаточно много. Может быть, если вы посмотрите код библиотеки Arduino, которая работает с датчиком DHT11, у вас после этого появятся идеи как его подключить к ATmega8?

        • Возможно. Но у Ардуино многое запрятано в готовые библиотеки, не думаю, что получится. Мне ещё интересно, почему во многих статьях про подключение одного датчика (в том смысле, что никаких других типов датчиков и устройств не подключается) речь идёт о прерываниях? Нельзя без прерываний подключить тот же DS18B20?

          • И ещё теоретический вопрос: я могу вместо функции, передающей байт датчику, написать "#define WRITE1 DDRC|=0xFF; PORTB=~(0xFF); _delay_(60); DDRC~(0xFF);"? Ну и для случая передачи "0" написать подобную ей и просто в строчку записать 8 таких дефайнов, типа: WRITE0; WRITE0; WRITE1; WRITE1; WRITE0; WRITE0; WRITE1; WRITE1; (число 0xCC наоборот, младшим битом вперёд). Получится передача числа по одному биту, как требуется для DS18B20. Такую же замену я бы хотел сделать и вместо функции чтения бита от датчика с учётом всех временных значений, конечно. Или такое здесь не проходит?

            • На этот ваш вопрос, к сожалению, не могу подсказать ничего конкретного

          • Так я вам и предлагаю посмотреть код самих этих библиотек. У них же открытый исходный код. Вот статья про подключение DS18B20 к Arduino на нашем сайте - как видите, в ней не используется никаких прерываний. Честно говоря, не видел примеров чтобы датчики температуры подключались с помощью прерываний. А вот датчики Холла и инфракрасные датчики (в тахометрах, к примеру) обычно подключаются как раз через прерывания.

            • Здравствуйте! Разобрался с DS18B20! Хотел как обычно сам освоить, и с помощью вашего сайта удалось-таки, правда, отрицательные температуры мне не нужны и их там нет))) Спасибо! Если кому-то нужно на СИ с комментариями, могу поделиться, только забыл, как вы предлагали выкладывать здесь такой материал?

            • Вспомнил, как добавить программу) Вот ссылка на Яндекс.Диск: https://disk.yandex.ru/d/wJC0DBvIzxy-3Q

              От админа: спасибо, Влад, за ценный совет другим посетителям нашего сайта.

    • На Али их куча. От чипа до герметичного варианта с разной длиной провода.

  3. здравствуйте. скажите в каких диапазонах измеряет данный термометр. спасибо

  4. Уважаемый админ в статье есть неточности вы пишете " Все установки микроконтроллера заводские, FUSE-биты трогать не надо." С такими установками термометр показывает одни нули я прошил такими
    AVRDUDE -U lfuse:w:0xE2:m -U hfuse:w:0xD9:m и все заработало
    За схему и идею спасибо.

  5. Здравствуйте Админ! В этот термометр можно добавить функцию сигнализатора при достижении заданной температуры(по аналогии будильника в часах)?

    • Здравствуйте Андрей!
      Добавить можно, только у меня нет на это времени.
      С уважением, Admin.

  6. Термометр показывает 00,0 . Микроконтроллер и датчик температуры менял, схему перепроверил.

  7. У меня тоже всё по нулям. в схеме ошибок нет и датчик тот. в чём ещё подвох???

    • Здравствуйте Василий!
      Была раньше проблема в схеме - неправильно подсоединены транзисторные ключи, сейчас схема правильная. Почему у Вас показывает нули, возможно есть одна причина.
      Высылаю Вам на почтовый ящик измененный НЕХ файл, отпишитесь пожалуйста о результатах.

      С уважением, Admin.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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