Программирование МК AVR. Урок 20. Подключаем датчик температуры DS18B20. Часть 1

Поделиться
HTML-код
  • Опубликовано: 27 июл 2024
  • Программирование на СИ в среде Atmel Studio.
    Подключаем датчик температуры DS18B20. Для этого изучаем работу с шиной 1-wire, которая используется для подключения данного датчика.
    Измеряем температуру, считывая показания с датчика. Используем проект с часами на микросхеме DS1307 и LCD 16x2, выполненного на контроллере HD 44780.
    Наряду с показателями текущего времени, даты и дня недели выводим на данный дисплей показания температуры.
    В 1 части занятия изучаем работу шины, работу датчика и начинаем писать код реализации данной задачи.
    Приобрести программатор USBASP USBISP 2.0 можно здесь (продавец надёжный) ali.pub/1eigwp
    Дисплей LCD 16x2 можно приобрести тут ali.pub/1dphww
    Датчик температуры DS18B20 на плате ali.pub/1dpvz1
    Навигация по видео:
    00:00 Интро
    00:39 Датчик DS18B20
    06:56 Регистры датчика
    09:27 Функция конвертирования температуры
    14:18 Схема урока
    17:20 Определение датчика на шине
    Также рекомендуется посмотреть данные видео:
    Урок 12. LCD индикатор 16x2. Часть 1 • Программирование МК AV...
    Урок 12. LCD индикатор 16x2. Часть 2 • Программирование МК AV...
    Урок 12. LCD индикатор 16x2. Часть 3 • Программирование МК AV...
    Урок 12. LCD индикатор 16x2. Часть 4 • Программирование МК AV...
    Урок 12. LCD индикатор 16x2. Часть 5 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 1 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 2 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 3 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 4 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 5 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 6 • Программирование МК AV...
    Урок 16. Интерфейс TWI (I2C). Часть 7 • Программирование МК AV...
    Урок 17. Часы реального времени DS1307. Часть 1 • Программирование МК AV...
    Урок 17. Часы реального времени DS1307. Часть 2 • Программирование МК AV...
    Текстовая версия данной части урока здесь narodstream.ru/avr-urok-20-pod...
    Группа в контакте club116656325
    Группа в Одноклассниках ok.ru/group/52987126153436
    Группа в Facebook / 236905359999556
    Мой сайт "Программирование МК" narodstream.ru
    Форум narodstream.ru/forum
    Вы можете помочь проекту:
    ЮMoney
    yoomoney.ru/to/41001176473465
    Webmoney
    Z341906933112
    Карта Сбербанка (МИР)
    2202201799288929
    Можно в USDT
    1) Сеть:TRC20
    Адрес: TBBPFk5Widf1CYvF7Xk5ssKXeiPJHwtMgS
    2) Сеть: BSC BNB Smart Chain (BEP20) (комиссия намного меньше)
    Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17
    3) Сеть: Huobi ECO Chain (HECO) (комиссия еще меньше)
    Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17

Комментарии • 34

  • @user-eu4jk3mf9o
    @user-eu4jk3mf9o 8 лет назад +9

    Рад что есть такие люди как Вы! Спасибо за труды!

    • @narodstream552
      @narodstream552  8 лет назад +5

      И Вам спасибо за то, что мои труды цените и смотрите мои уроки! Значит не зря стараюсь.

  • @alexeykulikov6706
    @alexeykulikov6706 3 года назад +1

    Добрый день. Спасибо за уроки)

  • @Polina_Relin12
    @Polina_Relin12 10 месяцев назад

    Огромное спасибо за вашу работу !!!!!!!!!!!!!!!!!!!

  • @ustoKZ
    @ustoKZ 7 лет назад +1

    Поскольку аппаратной реализации нет(открытый коллектор и пр.), предлагаю шину 1wire питать не от шины питания, а от вывода микроконтроллера через ограничительный резистор(номинал , а измерять другой ножкой. Плюс минус одна ножка- редко что то решает, но гарантировано не попадет в землю единичка с микроконтроллера. И управление уровнем становится элементарным.
    Большое спасибо вам за Ваши курсы.

  • @DrargonsM
    @DrargonsM 8 лет назад +2

    и снова интересный урок)))))

  • @user-xn4rf3wb6o
    @user-xn4rf3wb6o 8 лет назад +1

    Спасибо за урок

    • @narodstream552
      @narodstream552  8 лет назад

      +Дима Дубина
      Я рад, что Вам нравятся мои труды!

  • @user-dt9yi8vf4s
    @user-dt9yi8vf4s 2 года назад

    Огромное спасибо. Правда два раза уснул =)

  • @cpaeko9085
    @cpaeko9085 7 месяцев назад +1

    Собрал конструкцию с этим датчиком. Код не отсюда. Работой этого датчика впечатлен. Рекомендую. Одно не понятно, возможно что то не так сделал - сотые доли градуса как то странно скачут.... Перескакивают через значения. Например, температура растет... 24,15гр.С, а затем 25.0гр.С. Почему нет с 24,16 по 24.99гр.С? Измерял на холоде до - 20гр.С и до 100гр.С - все нормально.
    Кто собирал, посоветуйте... Или это так и работает?

  • @MrGoblinh
    @MrGoblinh 7 лет назад +1

    У меня у одного Atmel Studio 7 не определяет регистр SREG?

  • @user-ji7lv2ep1m
    @user-ji7lv2ep1m 5 лет назад +1

    уважаемый narod stream
    а можно ли вместо DS18B20 .подключить lm 75 или lm335(они дешевле почти в три раза DS18B20) и как это сделать и нужно ли прошивку переделывать ?

    • @narodstream552
      @narodstream552  5 лет назад

      Конечно нужно всё переделывать, протоколы и шины даже совсем другие. Почитайте техническую документацию на данные датчики - и всё станет ясно.

  • @user-qd8jp6gd4p
    @user-qd8jp6gd4p 4 года назад

    Здравствуйте скажите пожалуйста вы можете создать урок по программированию радиодатчика на DS18B20 на радиомодулях RF с Ализкспресс

  • @ivanrusev2270
    @ivanrusev2270 2 года назад

    А почему в протеусе не видно отрицательную температуру.И как её вывести?

  • @user-nd9yp1ul3x
    @user-nd9yp1ul3x 7 лет назад +1

    Уроки отличного качества, только не бросайте это дело! У меня вопрос, я пробовал перенести этот проект на Таньку 2313А, но датчик DS18B20 никак не отвечает. Где искать ошибку в инициализации датчика или в настройках регистров контроллера? И как реализовать показания отрицательной температуры? Так же использовал для индикации 7-ми сегментный индикатор. Да и еще музыка из старой заставки лучше ruclips.net/video/Kw2aI7Hx4h8/видео.html

    • @narodstream552
      @narodstream552  7 лет назад +1

      Спасибо за добрый комментарий! Музыка мне тоже больше нравилась, но должна быть короткой, не больше 5 секунд. Прошлую было до такой длины тяжело сократить, поэтому пока так. В тех.документации есть всё насчет знака. Знаковый бит находится в определённых регистрах регистра данных, вот и используйте его. Я просто не пробовал. Эксперементируйте. Возможно там по принципу знаковых целых величин. Где-то в датчиках MEMS в уроках по STM мы с этим делом игрались, я точно не помню.

  • @Inok83
    @Inok83 7 лет назад +2

    спасибо за познавательные уроки. Вопрос - если на шине много датчиков их опрос будет зависеть только от их последовательного месторасположения? нужно опросить около 50 датчиков и их показания 1 или 0 должны оставаться в тойже последовательности в которой они подключены к шине.

    • @narodstream552
      @narodstream552  7 лет назад

      Я не поробовал подключать более одного датчика

    • @ustoKZ
      @ustoKZ 7 лет назад +1

      "оставаться в той же последовательности, в которой они подключены к шине." Думаю, это очень неправильное предположение. Почитайте описание протокола 1wire. Каждое устройство (датчик) имеет свой адрес (2 в степени 48 для одного семейства датчиков) и набор команд для обмена.
      Контроллер формирует сброс, получает отклик от "датчика" (так будем называть подчиненный модуль), указывает адрес датчика для работы с ним. До следующего сброса (длинный ноль от микроконтроллера) все команды от микроконтроллера будут восприниматься только указанным датчиком.
      Адреса ваших датчиков можно узнать, подключая их по одному на шину и воспользоваться командой "прочитать адрес" или специальным более сложным алгоритмом определения всех адресов на шине.
      Это вкратце, чтобы Вы определились, нужно это Вам или нет.

    • @narodstream552
      @narodstream552  7 лет назад

      Usto Yershovets Спасибо! Я уже думал об этом. У меня пока такой датчик только один, если появится несколько, я попробую их подключить. Мы в уроке пользовались упрощенным механизмом без использования ROM. Если использовать уникальные адреса и опрашивать, то в принципе можно реализовать наличие нескольких датчиков на шине. Просто получится всё это очень медленно, где-то секунда будет уходить на опрос каждого, а то и больше, но если никуда не спешить и измерять просто температуру в нескольких местах, то это нормально. Но вряд ли это потребуется где-то, кроме научных опытов. Как правильно раздельный контроллер на каждый датчик и по беспроводным технологиям передача на центральный контроллер.

    • @Inok83
      @Inok83 7 лет назад

      Usto Yershovets
      Предполагается такая схема. 50 датчиков их имена 1-50. при срабатывании например 5 датчика он и должен быть на 5-м месте в сети. я так понимаю что при опросе датчиков по их уникальному имени мы не сможем определить их расположение в сети. допустим при выходе из строя 7-го датчика просто заменить его другим и он определился как 7-й в последовательности. Не хочется в датчик устанавливать МК с заранее прописанным именем-местом. может быть путаница при сборке сети и при замене датчиков. Можете подсказать как реализовать привязку датчика к его месту в сети.

    • @ustoKZ
      @ustoKZ 7 лет назад

      Очень туманная постановка задачи. Имена с 1 по 50 - это бирка на датчике или имя переменной в программе или уникальный номер устройства для протокола 1wire(он там 64-битный) или номер окна, на котором он замыкается ? Для одного бита на именованый датчик - не слишком сложно. Может сдвиговый регистр? И не совсем понятно выражение "на 5-м месте в сети".
      Охранная с разнесенными датчиками?

  • @user-rp2qt7np2z
    @user-rp2qt7np2z 7 лет назад

    Подскажите пожалуйста, как выводить текущее значение температуры с датчика не на lcd дисплей, а на семисегментный индикатор.

    • @narodstream552
      @narodstream552  7 лет назад

      Да в принципе разницы нет, просто вместо lcd.c использовать библиотеку из урока по 4-разрядному индикатору.

    • @user-rp2qt7np2z
      @user-rp2qt7np2z 7 лет назад

      Можно еще один вопрос? Вывод значения температуры на атмега8 выполнятеся нормально, а на аттини2313 выводится значение 55. Как ни крутил не понимаю в чем ошибка. Если есть возможность посмотрите пожалуйста проект. Заранее спасибо.
      Ссылка на гугл диск: drive.google.com/open?id=0B494-Gaikan8OTF2RkJDb0djZG8

  • @andrewvladimirovich2746
    @andrewvladimirovich2746 8 лет назад +1

    а можно заставить термометр (термостат) определять математическую разность между большей и меньшей температуры

    • @narodstream552
      @narodstream552  8 лет назад

      +Andrew Markelov
      Ну конечно можно. Использовать две переменных и сохранять туда температуры. А затем вычитать друг из друга.