ЭЛЕКТРОНИКА Радиоудлинитель датчика температуры 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 за тестирование прошивок и схемы подключения!
Если есть вопросы/проблемы, или вы нашли баг, пишите в ЛС или ниже в теме.
 

Вложения

Изменено:

maksland

★★★✩✩✩✩
13 Янв 2019
493
116
Omsk
Вот и я говорю, что попадется отбраковка где 99% рабочее и 1% портит всю бочку меда
 

alexangarsk

✩✩✩✩✩✩✩
29 Окт 2022
17
1
@alexangarsk,
@maksland,
При тактировании AVR от встроенной RC-цепочки возможна калибровка частоты.
Не просто возможна а есть даже устройство которое само это за вас будет делать.......

Камрады, ну так подскажет кто нить как записать в OSCCAL нужное мне значение ?
У меня тинек которые не работают в данной схеме 30 штук хочется попробовать прежде чем их выкидывать.....
 

maksland

★★★✩✩✩✩
13 Янв 2019
493
116
Omsk
с алишки все ?
я пока у местных не купил не заработало, хотя и прошиваются и читаются и вроде бы работают но не так как надо
тиньки еще с производства не сняли ? клепают их все кому не лень
хоть с микрочипа заказывай
 

alexangarsk

✩✩✩✩✩✩✩
29 Окт 2022
17
1
Да с алиэкспресса, покупал лет 8-10 назад.
У меня в городе барыга который радиодеталями торгует за тини13 220 рублей хочет, в соседнем городе в 50 км вроде бы есть магазин chipdip у них она за 150 рублей так это ещё что купишь будет работать не будет...
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
ver 3.5.5
  • Исправление прошивки приёмника.
  • Исправление записи данных в еепром.
  • Исправление отправки температуры после запуска.
  • Добавлена возможность установить коррекцию частоты.
  • Добавлена возможность выбрать разрешение датчика температуры.
  • Мелкие исправления.
 
Изменено:
  • Лойс +1
Реакции: hsh777

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Хочу попробовать собрать этот радио-удлинитель. Но с ATtiny ни разу не сталкивался. Даже не знаю чем и в какой программе прошивать. Пользуюсь ESP8266Flasher и Arduino IDE, для своих проектов. Подскажите в какой последовательности прошивать и чем? Имеется такая плата для ATtiny даже не знаю для чего она, подскажите.
 

Вложения

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@S_Sergey_G, У Алекса была статья на эту тему. Если вкратце то нужен ISP программатор или любая плата ардуино, прошивать можно из под Ардуино ИДЕ.
 
  • Лойс +1
Реакции: S_Sergey_G

wws63

✩✩✩✩✩✩✩
22 Окт 2022
2
1
Добрый день! Вопрос к автору, собрал эмулятор , сделал все настройки, передатчки отправляет команду (мигает однократно светодиод), почти одновременно мигает также однократно светодиод. У меня собраны часики с теромметром где опрос датчика температуры идет постоянно, но почему то однократной отправки данных не хватает для переваривания. Можно ли как то подправить программку передатчика, чтобы данные отправлялись постоянно , а не через секунды и минуты?
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@wws63, Я честно говоря не особо понял в чем проблема... Опишите по подробнее что именно не так работает.
Если у вас часы постоянно без какой-либо задержки мучают шину 1wire, то тут без вариантов, у нас или приём данных по радио или работа с шиной.
Интервалы передачи задаются в массиве transceivTime, 1ед. - 8сек. Минимально 2ед.
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Доброго дня!
Подскажите, пожалуйста светодиод на приемнике загорается при каждомм приеме данных с передатчика или только при несовпадении предыдущей температуры?
Я пытаюсь внедрить данный девайс в проект (https://www.thingiverse.com/thing:3924947), но пока с переменным успехом, - сразу не пошло....
Тогда я исключил радиоканал и соединил ПМ и ПД между собой без радиомодулей, так вот - светодиод на ПМ не всегда загорается, когда приходят импульсы с ПД - так должно быть или...?
Интервалы между приходами импульсов есть очень короткие - секунды и длинные -около минуты но светодиод на ПМ загорается не всегда... Так должно быть? Я не имею достаточной квалификации, чтобы полносттью разобраться в скетче, поэтому обращаюсь к Вам.
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@serhiy58, Светодиод на приёмнике включаться должен всегда, если передача адресована ему.
Само устройство считывает температуру из приёмника? Она верная или считывается код ошибки? Насколько часто опрашивается шина 1wire?
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Сейчас устройство, которое читает темп. - А328 с дисплеем. Там стандартная библ., с дилеями, так что опрос около 1р. в сек. Читает с ПМ. ПМ и ПД без радиомодулей работают по проводам напрямую. Темп. правильная. Но светодиод приемника не всегда загорается когда передатчик передает, что и насторожило. Я сначала грешил на радиоканал, потому его исключил. Но и без него стабильности нет...
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
Значит момент чтения шины попадает на приём данных по радиоканалу, единовременно возможна только работа с шиной или радио. Для этого и сделаны две посылки подряд(с интервалом 8сек) для дублирования передачи на случай чтения шины или помех.
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
В корне неверный алгоритм
Это тестовый стенд, - читсо для проверки эмулятора, взят из примеров библы... Тем более что датчик опрашивается тинькой, а не моей приблудой...

Я так думаю, что моя проблема - радиоканал.
Может кто подскажет скетч для проверки радиомодулей?
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,184
928

@Sergo_ST, ага, а в другом месте говорил, что даже без радиоканала не передаётся.
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Мня смущает нестабильная реакция приемникана: импульсы идут (видно на осцилографе), а светодиод не всегда загорается...
Хочу вначалле добиться стабильной работы самих ПМ иПД, а потом займусь радиоканалом. Поначалу сигнал прорывался на раастоянии 2-3метров, поэтому радиоканал был исключен...
 

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@serhiy58, Я так и не пойму что вас беспокоит... Я уже выше писал, что если передача пакета попадёт на момент опрос шины, то этот пакет будет пропущен, это нормально, для этого есть дублирование передачи.
Если температура передаётся на приемник, а конечное устройство может считать её - значит всё как надо.
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Сменил алгоритм опроса приемника: загрузил скетч с delay, - стало стабильно срабатывать(загорается светодиод ПМ) периодичность: 1:8:1:63:72(с) ...
Так что нужно мучить радиоканал...
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Спасибо за ответы! Мне это помогло.
Не подсакжете где есть о тесте радиомодулей? Нужен скетч с подсчетом ошибок...
Я когда-то эксперементировал с устройствами из статьи на котрую Вы вначале посылались, остановился на передатчике с кварцем, - работает уже два года, но там нет полной эмуляции шины и приемник не всеми устройсвами опрашивается, в моем случае с матричными часами не пошло...

Неплохо выходит с JDY-40, но там UART, а я не потянул сам сємулировать шину...
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
Интервалы передачи задаются в массиве transceivTime, 1ед. - 8сек
Подскажите, пожалуйста как нужно изменить строку:
const uint16_t transceivTime[] PROGMEM = {CONVERT_TIME(1), CONVERT_TIME(5), CONVERT_TIME(10), CONVERT_TIME(30)};
чтобы интервал между передачами составлял минимальное время...(для теста) ... или я не туда полез?
 
Изменено:

Sergo_ST

★★★★★★✩
15 Мар 2020
889
797
@serhiy58, Температурный дрейф осциллятора не настолько большой, чтоб выйти за рамки таймингов, при учёте того что при комнатной температуре его частота близка к заявленной.

По массиву я же выше уже писал, указываете время в тиках, минимум должно быть 2 тика, иначе не будет обновляться температура.
C++:
const uint16_t transceivTime[] PROGMEM = {2, 4, 8, 16};
Для тестов проще на ресет жать, при запуске передатчика отправляются две посылки, с адресом датчика температуры и самой температурой.
 

serhiy58

✩✩✩✩✩✩✩
20 Май 2019
17
8
@Sergo_ST, Спасибо большое!
У меня таки проблема с радиоканалом: собрал стенд и оказалось, что из 5 приемников RХ470C ни один не слышит передатчик, хотя пишут китаёси что это улучшенная, более стабильная версия WL101-341, а вот со стареньким WL101-341 заработало. Причем и приемники(RХ470C) и передатчики из одной партии... Теперь начну "прикручивать" к своим часикам, получтся - отпишусь. Еще раз спасибо.

...не пошло, - пишет датчик не подключен, - видимо что-то с алгоритмом опроса в часах, а с обычной А328 и А168 работает норм.
 
Изменено: