Найти тему
Электроника и жизнь

ATtiny13 + датчик температуры DS18B20. Выводим температуру на светодиодный индикатор

Оглавление

Здравствуйте, уважаемые читатели! В одной из прошлых статей я рассказывал, как выводить показания датчика температуры DS18B20 на 4-х символьный светодиодный индикатор с помощью Arduino UNO.

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

Измерение температуры в комнате с помощью ATtiny13 и датчика DS18B20 (минус для демонстрации)
Измерение температуры в комнате с помощью ATtiny13 и датчика DS18B20 (минус для демонстрации)

Среди примеров для микроконтроллера ATtiny13 есть скетч Blink_using_timer0.

Путь к скетчу Blink_using_timer0
Путь к скетчу Blink_using_timer0

Его идея в том, что мы отслеживаем переполнении нашего единственного таймера T0. И когда у нас срабатывает прерывание, соответствующее этому событию, выполняется некоторый программный код. В данном случае, переключаем уровень сигнала на пине, обозначенном PB2, с высокого на низкий и наоборот. Тем самым включая и отключая светодиод.

Скетч Blink_using_timer0
Скетч Blink_using_timer0

В начале скетча дано обоснование, почему мы используем число 37. По идее, при частоте работы микроконтроллера в 9,6 МГц, это нам должно дать задержку примерно в 1 с. Но на самом деле, далее мы убедимся, что это не совсем так и подберем нужное нам значение эмпирическим путем.

При timeCount == 37 срабатывание условия происходит примерно раз в 9 секунд
При timeCount == 37 срабатывание условия происходит примерно раз в 9 секунд

При частоте работы микроконтроллера 1,2 МГц, у меня получилось, значение timeCount == 4. Тогда нужное нам действие будет происходить раз в секунду.

А вот при timeCount == 4 срабатывание условия происходит примерно раз в секунду
А вот при timeCount == 4 срабатывание условия происходит примерно раз в секунду

Ссылка на сам код скетча, размещена в конце статьи. Сразу скажу, что не стал приводить код к общему Си-образному виду. Так что мои вставки кода, со стандартными для Arduino IDE функциями будут видны, на фоне строгого кода функций библиотеки OneWire. Упрощенный код библиотеки OneWire для работы с ATtiny13, я взял на одном из форумов и немного его видоизменил (https://forum.sources.ru/index.php?showtopic=381077).

Схема подключения ATtiny13, DS18B20, сдвигового регистра и светодиодного индикатора

Перейдем к схеме подключения. Важным моментом схемы является то, что для управления секциями светодиодного индикатора используются те же пины, что работают со сдвиговым регистром. Ведь после того, как мы записали битовое представление цифры, до записи следующей цифры, эти пины освобождаются. Забота поддерживать высокий или низкий уровень сигнала, тем самым зажигая нужные нам сегменты светодиодного индикатора, ложится на плечи сдвигового регистра. Который и будет это делать, пока мы обеспечиваем его питанием. И именно этой паузой, до передачи следующего числа мы в данной схеме и пользуемся, чтобы управлять секциями (разрядами) светодиодного индикатора. Т.к. скорость записи данных в память сдвигового регистра намного быстрее, чем пауза между этими событиями, то и получается, что в основном пины задействованы для управления секциями светодиодного индикатора, а в промежутке, отправляются данные на сдвиговый регистр. И только второй пин (PB3) ATtiny13, управляющий третьей секцией светодиодного индикатора (если считать справа налево), не используется дважды и только управляет секцией светодиодного индикатора.

-6

Еще одним отличием данной схемы от схем, которыми я делился в предыдущих статьях, является то, что 5 пин (PB0) мы используем для общения с датчиком температуры. Собственно он для общения с внешним миром и предназначен.

-7

Следовательно, 11 пин сдвигового регистра я подключаю вместо 5 пина, к 3 пину ATtiny13.

Вот так схема выглядит собранная на макетной плате.

Схема на макетной плате
Схема на макетной плате

Загружаем скетч в ATtiny13. Вынимаем ATtiny из программатора и устанавливаем на макетную плату. Подаем питание. Светодиодный индикатор показывает сначала 0 градусов, а затем температуру в комнате. С точностью до десятых градуса.

Измерение температуры и вывод на светодиодный индикатор
Измерение температуры и вывод на светодиодный индикатор

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

Здесь закомментировал часть кода, отвечающую за определение знака и искусственно д
Здесь закомментировал часть кода, отвечающую за определение знака и искусственно д

Добавляю данную корректировку в скетч. Загружаю. Кстати, обратите внимание, скетч занял всего 758 КБ памяти. Т.е. у нас почти четверть памяти ATtiny13 осталась свободна.

Код скетча занял всего 758 КБ памяти ATtiny13
Код скетча занял всего 758 КБ памяти ATtiny13

Устанавливаю ATtiny13 на макетную плату. И снова видим значение текущей температуры, только с горящим для демонстрации минусом.

Измерение температуры и вывод на светодиодный индикатор (минус для демонстрации)
Измерение температуры и вывод на светодиодный индикатор (минус для демонстрации)

Таким образом, возможностей малыша ATtiny13 достаточно, не только чтобы работать с датчиком температуры DS18B20, но и выводить получаемое значение температуры на 4-х символьный светодиодный индикатор.

Код скетча - https://yadi.sk/d/lQfgrmFycXhp5Q

Видео по материалам статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: