ЭЛЕКТРОНИКА Радиоудлинитель датчика температуры DS18B20

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
Прошивки для радиоудлинителей DS18B20 можно скачать здесь.

Внимание! Перед прошивкой передатчика, обязательно полностью отключите радио-модуль, иначе он может выйти из строя!
Так-же могут быть проблемы с ATTINY13A купленными в Китае!!!


WDS18B20.JPG
Фьюзы RX прошивки Low 0x7A High 0xFF.
Фьюзы TX прошивки Low 0x79 High 0xFB.

Перед прошивкой передатчика желательно считать из сигнатуры мк калибровочный байт для осциллятора 4.8МГц и прописать его в OSCCAL_SET прошивки передатчика!
После прошивки необходимо обязательно прописать адрес передатчика в приёмнике по инструкции ниже!

Поддерживаются любые совместимые с указанными в схеме радио-модули на 433МГц.

Что реализовано:
  • Полноценная шина 1wire с возможностью адресации(команды - Search ROM, Read ROM, Match ROM, Skip ROM).
  • Копирование памяти и адреса датчика(адрес хранится в EEPROM приемника).
  • Защита от помех(передача бит по высокому уровню + проверка сигнала раскачки).
  • Сверка адреса передатчика(адрес задается перемычками).
  • Прописывание адреса передатчика в приёмник.
  • Сверка контрольной суммы принятых данных.
  • Система ошибок(125 - передатчик давно не выходил на связь, -85 - нет сигнала от датчика температуры).
  • Возможность установки перемычками установки интервалов передачи и адресов.
  • Возможность перед компиляцией установить свой максимальный интервал передачи(по умолчанию 60мин).
  • Возможность перед компиляцией выбрать режим "SLOW_MODE", для более устойчивой передачи.
  • Дублирование передачи(отправка повторного пакета через 8 сек).
  • Запрос температуры(за 8 секунд до основной передачи).

Синхронизация адреса датчика температуры с приёмником:
  • Выключить передатчик и приёмник.
  • Отключить приёмник от шины 1wire.
  • Включить приёмник.
  • Включить передатчик.
  • Через 1,5сек светодиоды приёмника и передатчика должны загореться - адрес прописан.

Синхронизация адреса передатчика с приёмником:
  • Выключить передатчик и приёмник.
  • Отключить приёмник от шины 1wire.
  • Прижать пин PB3 приёмника к земле.
  • Включить приёмник(светодиод будет светиться постоянно).
  • Включить передатчик.
  • Через 1,5 - 3сек светодиод приёмника должен потухнуть - адрес прописан.
  • Выключить приёмник.
  • Убрать прижим к земле пина PB3.

Установка аналоговых перемычек(резисторы подключаются к GND):
  • GND - PB4(1мин), PB3(0xAA)
  • Резистор 60K - PB4(5мин), PB3(0xBB)
  • Резистор 170K - PB4(10мин), PB3(0xEE)
  • VCC - PB4(30мин), PB3(0xCC)
Что нового:

ver 3.5.2

  • Добавлена индивидуальная адресация(можно использовать несколько удлинителей в одном месте).
  • Добавлена возможность прописывать передатчик в память приёмника (для этого необходимо PB3 прижать к земле и включить питание).
  • Добавлен медленный режим для протокола радиопередачи
  • Повышена помехоустойчивость при раскачке.
  • Убраны интервалы дублирующей передачи 8сек(теперь передаётся за раз 3 пакета).
  • Теперь при старте передаётся температура вместе с адресом датчика.
  • Оптимизация.
ver 3.5.4
  • Добавлен выбор адреса и времени с помощью аналоговых перемычек для передатчика.
  • Удалён режим передачи 3-х пакетов за раз.
  • Оптимизация приёмника.
ver 3.5.5
  • Исправление прошивки приёмника.
  • Добавлена возможность установить коррекцию частоты.
  • Мелкие исправления.
ver RX 4.0.0
  • Новый алгоритм обработки шины 1wire(позволяет обрабатывать практически все варианты поведения шины).
ver RX 4.1.0
  • Переработан алгоритм ответа на сигнал сброса.
ver TX 4.1.2
  • Исправление отключения ацп.

За идею была взята статья с этого сайта.
Так-же огромное спасибо maksland за тестирование прошивок и схемы подключения!
Если есть вопросы/проблемы, или вы нашли баг, пишите в ЛС или ниже в теме.
 

Вложения

Изменено:

AndrewVass

✩✩✩✩✩✩✩
28 Май 2024
8
0
@Sergo_ST, Ну я на макетке вообще отключаю передатчик - и ток практически не меняется. При подключенном передатчике он даные передает нормально. Светодиод индикации передачи успешно моргает. Attiny13a пробовал две штуки и одну v - результат практически идентичен
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@AndrewVass, Попробуйте измерить голый мк, без датчика температуры и радиопередатчика, отставив только подтяжку ресет. Может не так измеряете?
 

AndrewVass

✩✩✩✩✩✩✩
28 Май 2024
8
0
@Sergo_ST, Я ставил на него прошивку моргания светодиодом отсюда http://we.easyelectronics.ru/AVR/avr-power-management-ili-kak-pravilno-spat.html и при вкл светодиоде потребление 5 мка, а во сне мой прибор показывает ноль - то есть менее 1 мка. Но сегодня померяю отключив датчик температуры. Что то мне подсказывает, что врядли это повлияет на результат) Сколько у вас потребление?
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@AndrewVass, Попробуйте в строку 128 прошивки передатчика добавить это:
C++:
ADCSRA = 0x00;
Я только прошивку писал, тестировал @maksland, и насколько я помню потребление было(и должно быть) околонулевое. Но тк в новых ревизиях прошивки был добавлен опрос ацп, возможно из-за того что он не был полностью выключен осталось включенным опорное напряжение...
 

AndrewVass

✩✩✩✩✩✩✩
28 Май 2024
8
0
@Sergo_ST, Огромное спасибо! Заработало. При отключенном передатчике в режиме сна 6-7 мка потребление на Attiny13A и почему то 20 мка на Attiny13v, хотя вроде как на ней должно быть меньше). При подключенном 20 мка (но я планирую использовать другой модуль передатчика без ноги EN и запитывать его непосредственно от PB0. Надеюсь, что будет меньше кушать)

@poty, Да. Прошу извинить. Когда горит - 700 мка примерно (тускло так горит)).
 

AndrewVass

✩✩✩✩✩✩✩
28 Май 2024
8
0
Не подскажите как доработать прошивку приемника для приема данных с нескольких датчиков? Если я верно понимаю, можно убрать проверку соответствия адреса датчика ранее сохраненному. Но как это реализовать - мне не хватает знаний...
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@AndrewVass, Не нужно ничего менять, просто используете во всех передатчиках один и тот же адрес.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
430
129
@AndrewVass,
По моему данная реализация не позволяет использовать один приемник для опроса нескольких датчиков.
По крайней мере я не увидел такой возможности в коде. Выдается всегда последнее принятое значение температуры, и понять от какого конкретно датчика оно пришло - невозможно. Небольшими изменениями кода это не исправить.
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@Bruzzer, Всё так, этого и не предполагалось тк это просто "удлинитель" датчика температуры. А вот вопрос для чего это нужно @AndrewVass остаётся открытым...
 

AndrewVass

✩✩✩✩✩✩✩
28 Май 2024
8
0
@Sergo_ST, Хочу решить задачку мониторинга температуры с нескольких автономных датчиков и записи получаемых данных. Пока что реализовал запись на sd карту с заданным интервалом с одного датчика. Можно конечно к каждому датчику прилепить свой приемник, но как то это не красиво) И да - просто этот код под такую задачку не переделать, это я уже понял)
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@AndrewVass, Если всё же необходимо знать с какого именно датчика пришли данные, то в данной реализации это невозможно. Для этого потребуется или новый контроллер с большим количеством памяти чтобы реализовать данную функцию, либо же, если проект в который требуется передавать эти данные с открытым исходным кодом, то проще перенести в него приём данных с радиоканала. У меня где-то была подобная реализация(кто-то ранее просил сделать), пишите в лс, попробую найти её...