HBus

akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Ср сен 18, 2019 5:57 am

Пока что все, сделанное в рамках проекта, "покоится на двух китах":
1) все процессорные модули (за исключением WiFi шлюза) имеют форм-фактор Arduino Pro Mini, 18x33 mm
2) весь софт написан в среде Ардуино и использует библиотеки Ардуино

Из первого пункта следует, что в альтернативных модулях я не могу использовать камни в корпусах большого размера.

Атмега 644А в корпусе QFN-44 7х7 мм годится, а в корпусе QFP-44 12х12 мм - нет. По какой-то неведомой мне причине китайцы задешево продают только Атмеги в больших корпусах, а в маленьких корпусах цена сразу вырастает в 2-3 раза и становится сопоставимой с ценами Digi-Key, Маузера, и т.п. Вполне вероятно, что дешевые Атмеги - это китайские пиратские копии, которые пакуются только в корпуса из узкого номенклатурного ряда; соответственно, чип Atmega 644А в корпусе QFN-44 уже не пиратский, поэтому стоит намного дороже.

Из второго пункта следует, что желательно исползовать или процы нативного Ардуиновского ряда, т.е. Атмега и SAMD21, или хотя бы те, которые сам производитель удосужился портировать в Ардуино, что верно для ХМС1100. Что же касается STM32, то посмотрев на то, что имеется для Maple и "голубой пилюли", я ужаснулся и решил, что это лучше не трогать.

На SAMD21 вполне можно сделать модуль размера Arduino Pro Mini. Но XMC1100 мне нравится больше за счет широкого диапазона напряжений питания. Кроме того, UART в XMC1100 имеет встроенный механизм обнаружения коллизий на шине, что хорошо подходит для HBus:
14.3.3.4 Collision Detection
In some applications, such as data transfer over a single data line shared by several
sending devices (see Figure 14-30), several transmitters have the possibility to send on
the same data output line TXD. In order to avoid collisions of transmitters being active at
the same time or to allow a kind of arbitration, a collision detection has been
implemented.

The data value read at the TXD input at the DX1 stage and the transmitted data bit value
are compared after the sampling of each bit value. If enabled by PCR.CDEN = 1 and a
bit sent is not equal to the bit read back, a collision is detected and bit PSR.COL is set.
If enabled, bit PSR.COL = 1 disables the transmitter (the data output lines become 1)
and generates a protocol interrupt. The content of the transmit shift register is considered
as invalid, so the transmit buffer has to be programmed again.
Но генератор в XMC1100 - это сущий ад: встроенный RC-генератор очень неточный (4%), его надо калибровать, иначе даже UART правильно работать не будет, а генератора на кварце вообще не предусмотрено.
akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Ср окт 02, 2019 12:02 pm

Заказал платки формата Arduino Pro Mini на процессорах ATMega644A. ОЗУ и ПЗУ в этом чипе вдвое больше, чем в 328P, в обозримом будущем этого должно хватить на что угодно.

Перетряхнул код, перевел все что мог из ОЗУ в ПЗУ. Заодно вынес настройки в отдельный файл HBconfig.h. Расход ОЗУ в базовом скетче rev 1.2 снизился до 61%. Что еще приятнее, скетч HBus Power Meter на этой основе теперь использует 71% ОЗУ, что вполне удовлетворительно. Теперь появилась возможность этот скетч улучшить даже без перехода на ATMega644.

PS: 13.10.2019 - продолжаю фиксить баги, появившиеся всвязи со сделанными изменениями...

PPS: 23.10.2019 - выложил rev 1.4, расход ОЗУ снижен до 54%
akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Ср окт 23, 2019 11:31 am

Теперь базовый код HBus более-менее устоялся, можно переходить к реальным проектам. Однако есть проблема, состоящая в том, что, по мере увеличения кол-ва узлов в сети, становится все трудней уследить за конфигурацией сети. В том числе вести учет какая версия софта прошита в том или ином узле и какие топики он использует.

Поэтому приступил к разработке некого костыля в виде РС-шной программы (назвал ee HBProj), которая должна делать следующее:
  • Вести список проектов, где под "проектом" понимается сеть HBus со своим специфическим набором узлов
  • Для каждого проекта вести список имеющихся в сети узлов
  • Для каждого узла показывать ревизии железа и софта, а также топиков, использованных в узле.
  • Хранить копию конфигурационного файла узла (HBconfig.h), использованного при компиляции (что включает имена топиков), и еще - ссылку на папку, где хранится скетч.
  • Как вариант, там же можно хранить скомпилированный бинарник скетча.
Для каждого проекта буду заводить отдельную папку, где хранится нужная инфа. С базами данных дела иметь не хочу. Даже XML или JSON пока не собираюсь использовать. Наверное, ограничусь старыми добрыми ini-файлами.

В связи с этим провел некоторую "регрессию" кода, чтобы параметры узла можно было задавать не только, как и раньше, при конфигурировании узла, но и заранее, во время компиляции при помощи конфигурационного файла HBconfig.h. То есть, чтобы как можно больше настроек узла отдать во власть HBProj.
akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Сб янв 18, 2020 3:01 am

Обнаружилась серьезная проблема с WiFi шлюзом: использованные Ардуино библиотеки являются блокирующими, из-за этого ESP8266 может "замирать" на большой промежуток времени (до нескольких секунд) и, в принципе, может терять HBus трафик. До сих пор на практике этого не наблюдалось по причине малого трафика в тестовых HBus системах, а также большого UART буфера (256 байт) в ESP8266. Однако сам факт наличия этой проблемы доказан в тестах на другом оборудовании. Проблема неизбежно вылезет в системах с напряженным трафиком.

Решения могут быть такие:
  • Использовать неблокирующие библиотеки
  • Использовать другой WiFi модуль
Aven
Сообщения: 528
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 152 раза

Re: HBus

Сообщение Aven » Ср янв 22, 2020 12:43 am

используй ESP32, уж для шлюза совсем не дорого, а мощи вагон.
akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Ср янв 22, 2020 9:03 am

У них два недостатка:
  • те модули на ESP32, которые я попробовал, имели плохую чувствительность, намного хуже чем ESP-12
  • у ESP32 баг в библиотеке <setjmp.h>, поэтому он мне не подходит
К тому же никакая "моща" не спасает от блокирующих библиотек. Я лучше на MKR1000 перейду. Или сменю библиотеки. Или и то и другое. Не решил пока.
Aven
Сообщения: 528
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 152 раза

Re: HBus

Сообщение Aven » Ср янв 29, 2020 6:40 pm

1. Имеется ввиду WiFi часть? Вообще нет проблем с этим...
2. Для чего он нужен?

MKR1000 что-то только оригинал
Aven
Сообщения: 528
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 152 раза

Re: HBus

Сообщение Aven » Ср янв 29, 2020 9:45 pm

Кстати что думаешь о https://bus-77.org/ ?
akouz
Сообщения: 247
Зарегистрирован: Ср июл 09, 2014 3:48 pm
Благодарил (а): 6 раз
Поблагодарили: 40 раз

Re: HBus

Сообщение akouz » Чт янв 30, 2020 5:10 am

Aven писал(а):
Ср янв 29, 2020 9:45 pm
Кстати что думаешь о https://bus-77.org/ ?
Слишком высокая бодовая скорость, из-за этого нельзя использовать свободную топологию прокладки кабеля. Если бы они сделали не 125, а 19.2 kbps, то получился бы российский аналог бельгийского Velbus (CAN, длина кабеля до 1 км, свободная топология).

Удивляет, что они рекомендуют терминировать кабель с волновым сопротивлением 100 Ом резисторами по 120 Ом.
Aven
Сообщения: 528
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 152 раза

Re: HBus

Сообщение Aven » Чт янв 30, 2020 12:25 pm

Закрытая какая-то система...
Ответить