Ссылка на первую часть статьи. https://dzen.ru/a/Zs3wPmV8t1GB8T4h
Ссылка на третью часть статьи. https://dzen.ru/a/ZvfyitMJVHgGuMqA
Архив с прошивкой и схемой https://www.romram.ru/dzen/leech0002.rar
Изучаем документацию.
Во время медленно и тоскливо тянущегося ожидания плат, можно прикинуть логику работы будущего устройства. А чтобы что то делать с устройством, желательно изучить инструкцию от него. И вот тут ожидает сюрприз. Творчество разработчиков RadSens`а бежит впереди составления документации на RadSens. Но я их понимаю, никто не любит работать с документами.
В разных версиях документации есть два варианта карты I2C регистров. Это новая карта из последней редакции даташита.
Во-первых, надо знать, о том что регистры в которых хранятся значения интенсивности излучения и значение счётчика импульсов записаны в формате big-endian (от старшего к младшему), а вот значение в котором находится чувствительность счётчика записано в формате little-endian (от младшего к старшему). В документации это не указано, но в библиотеках для ардуино и подобного которые предлагают производители учтено. Ну и мы учтём при написании прошивки. Почему так произошло, разработчики в своём телеграм канале рассказали целую историю. И пообещали внести этот нюанс в документацию. Верим :)
В старом варианте карты регистров присутствует регистр 0x11 с помощью которого можно включать/выключать высокое напряжение подаваемое на счётчик. В новом варианте этот регистр пропущен, хотя на самом деле он есть, но управлять с его помощью ничем нельзя. Видимо оставлен для совместимости со старыми библиотеками. В документации об этом опять же ни слова.
И последнее (надеюсь), в новой редакции таблицы присутствует регистр 0x14 который позволяет отключить светодиод на плате RadSens`a. В старой редакции это регистр отсутствует.
После вдумчивого изучения этих таблиц становится понятно, что для собственно измерителя фона тут важна только одна строка с восьмибитными регистрами 0x06 - 0x08. Вот что про неё написано в документации:
И всё же постараемся вытащить не только эти данные но и вообще все доступные. Опять же по принципу, а вдруг пригодятся.
Modbus.
По итогу карта регистров modbus будет выглядеть как то так. Ячейки с жёлтым фоном относятся к RadSens`у, зелёным к плате переходнику.
Регистры доступные только для чтения.
Регистры RadSens "ID устройства" и "версия прошивки" умещаются в 8 бит. С ними всё просто, приводим их к виду к uint16_t и отдаём как обычные modbus регистры.
Дальше сложнее. 24 битное значение интенсивности излучения хранится в трёх восьмибитных регистрах 0x03,0x04,0x05. Чтобы отдать значение через modbus приводим его к виду из двух 16 битных регистров. 0x0002 старший регистр интенсивности излучения T<123 сек. 0x0003 младший регистр интенсивности излучения T<123 сек.
Следующие три регистра I2C 0x06,0x07,0x08 обрабатываем также и получаем, 0x0004 старший регистр интенсивности излучения T=500 сек., 0x0005 младший регистр интенсивности излучения T=500 сек.
Незабываем! Чтобы получить данные в микрорентгенах в час, необходимо считанные значения разделить на 10!
Небольшая ремарка по поводу старшего регистра интенсивности излучения. В младший регистр можно записать максимальное значение 65535, делим это значение на 10 и получаем, что младшего регистра достаточно чтобы отобразить уровень 6553 мкР/ч. Боюсь, что если уровень фона превысит эти цифры и понадобится старший регистр, то считывать показания будет уже некому. Поскольку эвакуация населения производится при гораздо более низких значениях. Другое дело если вы будете использовать эту конструкцию не как измеритель фона, а в качестве поисковой или ещё что то придумаете, то да старшие регистры могут пригодится.
Значение счётчика хранится в двух 8 битных регистрах 0x09,0x0A. Они укладываются в один 16 битный регистр modbus 0x0006.
В регистре modbus 0x000B лежит температура полученная от датчика ds18b20. Чтобы получить значение в градусах Цельсия, делим содержимое этого регистра на десять.
Регистры доступные для чтения и записи.
Установку I2C регистра 0x10 "Адрес устройства" сюда выносить не стал, поскольку если адрес случайно изменить, то это приведёт к печальным последствиям, а именно придётся разбирать всю конструкцию, чтобы добраться до RadSensa и с бубном и плясками изменить адрес на старый.
Регистры 0x0018 - 0x001A настройки параметров связи.
0x0019 позволяет отключить раздражающие светодиоды на плате переходнике.
0x001A в этом регистре задаётся период с которым плата переходник опрашивает RadSens и датчик температуры. Если вы используете конструкцию как и задумывалось для измерения фона, то не трогайте этот регистр. Если вы решили сделать что то типа поискового прибора то установите минимальное значение (2 секунды). Если вас почему то не устраивают встроенные алгоритмы RadSens и возникло желание воспользоваться сырыми данными из регистра 0x0006 то вот тут уже устанавливайте удобное для вас время накопления. Пару слов о внутренней кухне прошивки. Контроллер опрашивает RadSens с заданным интервалом и складывает полученные значения в массив. Интервал опроса RadSens и частота запросов modbus явления между собой абсолютно никак не связанные. Поэтому слать запросы к устройству по modbus чаше чем установленный интервал опроса конечно можно но смысла не имеет.
0x001B управление индикаторным диодом на RadSens. Будет работать на новых платах и не будет на старых.
0x001C отключение высокого напряжения. Будет работать на старых платах и не будет на новых.
0x001D записывает в RadSens значение чувствительности счётчика. Если RadSens используется со своим штатным счётчиком, то не трогайте этот регистр. Также он может понадобиться при калибровке RadSens`a.
Вот наверное и всё, что я могу на данный момент рассказать о прошивке. Сама прошивка, схема, карта регистров и файл конфигурации для программы "modbus poll" лежат в архиве по адресу https://romram.ru/dzen/leech0001.rar . Надеюсь, что кому нибудь эта конструкция пригодится и её повторят. Разумеется в первой версии прошивки не может не быть глюков и багов. Но она сейчас худо бедно работает. Честно :) Все замечания, комментарии, предложения можно высказать в комментариях под статьёй, либо в нашем телеграм чате etrivia.
По быстрому проверить работу устройства можно подключив его через переходник usb-rs485 к компьютеру и используя любой modbus терминал. Мне нравится программа "modbus poll". Вот так выглядит её работа с нашим устройством.
Этаже программа худо-бедно но умеет рисовать графики. Вот так выглядит радиационный фон на моём рабочем столе в течении часа.
Всё.
Красивые платы будут идти ещё минимум пару недель :( Вот как придут так и выйдет третья часть этой статьи.
Ссылка на первую часть. https://dzen.ru/a/Zs3wPmV8t1GB8T4h
Ссылка на третью часть статьи. https://dzen.ru/a/ZvfyitMJVHgGuMqA
Архив с прошивкой и схемой https://www.romram.ru/dzen/leech0002.rar
Содержимое статьи можно обсудить в комментариях и телеграм чате etrivia.