Dmitry Polyakov Опубликовано 30 июля, 2012 Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0 Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ. В посте должно быть: исходник, ссылка на источник, описание, пример применения. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alexander_I Опубликовано 31 июля, 2012 (изменено) Прошивка позволяет использовать ERD-2.0 в качестве конвертора ethernet-RS485 (можно RS232 полудуплексом, без контроля, только TX и RX). Для работы устройства в этой роли требуется простенькая "дочерняя плата" с приемопередатчиком RS485 (RS232). Дочерняя плата подключается к разъемам J6 и J7, используя ноги TXD(31), RXD(30) и (для RS485) SDA(27) микроконтроллера ATmega328 (нумерация ног приведена для корпуса 32TQFP), а также землю и входное питание устройства. Приемопередатчик выбран ST485EBDR, дешёвый и с защитой от статики. Можно взять любой другой пятивольтовый. Питание на дочерней плате на всякий случай гладится стабилизатором с низким падением напряжения (IL2931AZ-5.0). При питании самого устройства пятью вольтами такая схема может выглядеть несколько по-идиотски (если не вовсе неправильной), но в наших условиях эксплуатации решение является оправданным (у нас напряжение питания чуть выше и менее стабильно, чем хотелось бы). Можно попробовать использовать трёхвольтовый приемопередатчик RS485 с соответствующим стабилизатором, тогда логика схематики станет на место, но цена "дочерней платы" вырастет, скорее всего, в разы. А в нашем случае вроде всё работает пока без нареканий. Из не очень приятных особенностей следует отметить, что стандартные скорости обмена получаются с погрешностями, т.к. используется внутренний тактовый генератор на частоте 8МГц. (Таблица с погрешностями для стандартных baudrate при тактовой 8МГц есть в даташите микроконтроллера). До 38400 погрешности получаются в пределах нормы для нормальной работы, и, кроме того, есть возможность программно менять параметр OSCCAL для корректировки тактовой частоты контроллера. В качестве основы взят (брезгливо и с омерзением) проект ethersex (http://www.ethersex.de/) и доработан до необходимого функционала. Выкладываю архив как есть, со всей кучей файлов, не очищая (ethersex2.zip). При проблемах с компиляцией можно использовать готовую прошивку: файлы ethersex.hex или ethersex.bin, которые также есть в отдельном файле ethersex.zip. Ещё при необходимости можно исправлять дефолтный MAC-адрес устройства прямо в .bin файле прошивки, здесь он находится по адресу с 0x98 по 0x9d (байты AC DE 48 96 00 00). Собирается с помощью avr-gcc под линуксом. В текущей конфигурации занимает более 99% флеша atmega328. Если сделать "make clean; make", то, вероятно, уже не поместится: видимо, размер прошивки зависит от последовательности сборки. Мне случайно удалось скомпилировать так, что уместилось - сначала выключил что-то (не помню) в меню конфигурации (make menuconfig), собрал (make), затем обратно включил это что-то, и снова собрал (make). Для уменьшения размера прошивки всегда можно просто совсем отключить что-то ненужное в конфигурации. При прошивке биты конфигурации (fuse bits) микроконтроллера ATmega328 следует установить следующим образом: Extended Fuse Byte: 0xFF (11111111). (заводская настройка) Fuse High Byte: 0xD9 (11011001). (заводская настройка) Fuse Low Byte: 0xE2 (11100010). (относительно заводской настройки выключен CKDIV8) В текущей конфигурации устройство по умолчанию имеет сетевые настройки: IP 192.168.15.20, маску 255.255.255.0, шлюз 192.168.15.10, для авторизации имя admin, пароль admin. При включении питания моргает светодиодом и начинает работать (для проверки пингуем). Если при включении удерживать кнопку, то мигает светодиодом медленнее, и после отпускания кнопки сбрасывает всю конфигурацию в значение по умолчанию (в том числе ip и пароль). Для конфигурации прошитого устройства лезем на него телнетом на порт 2701. Там отвечает интерфейс ECMD. Без авторизации устройство будет отвечать "authentification required". Для входа потребуется строка вида "auth <имя> <пароль>", то есть "auth admin admin". Устройство должно ответить "authentification successful". После этого можно сказать "help" для просмотра краткого списка доступных команд. К сожалению, описания команд и их синтаксиса мы здесь не увидим, и они не документированы (ethersex очень мало документирован). Поэтому я приведу краткое описание того, с чем разобрался. fuse - показать биты конфигурации микроконтроллера. osccal [XX] - показать/установить байт калибровки встроенного тактового генератора. Для чтения: просто "osccal", для изменения: добавить шестнадцатиричное значение в виде "osccal 8E". osccal w - сохранить байт калибровки в EEPROM (впоследствии считывается и устанавливается при каждом старте). hostname - показать имя устройства. eer <ADDR> <LENGTH> - читать <LENGTH> байт из адреса <ADDR> после блока конфигурации в EEPROM. Адрес и длина в десятичном виде (например, "eer 752 10" читает 10 байт, начиная с 752-го после массива конфигурации). Максимальная длина 25 байт. eew <ADDR> <HEXBYTES> - сохранить данные в EEPROM после массива конфигурации. Адрес в десятичном виде, данные в шестнадцатиричном, например: "eew 752 1122335588AAFFFF00" пишет девять байт. reset - осуществить перезагрузку микроконтроллера. wdreset - Go into endless loop to trigger a watchdog timeout. Перезагрузка посредством watchdog. pam <USER> <PASSWORD> - установить имя пользователя и пароль (в текущей конфигурации длина имени и пароля до 16 символов). io - работа с портами ввода-вывода. Порты нумеруются от 0 до 2 (соответствие портам контроллера: 0 - PB, 1 - PC, 2 - PD). Далее чуть подробнее, но для понимания потребуется осознание даташита на микроконтроллер в части портов ввода-вывода: io set ddr <PORTNUM> <HEXVALUE> [MASK] - Set the DDR of port PORTNUM to VALUE (possibly using the provided MASK). io get ddr <PORTNUM> - Display the current value of the DDR PORTNUM. io set port <NUM> <HEXVALUE> [MASK] - Set the PORT NUM to VALUE (possibly using the provided MASK). io get port <NUM> - Display the current value of the PORT NUM. io get pin <PORTNUM> - Display the current value of the PIN-register of the port PORTNUM. io get mask <PORTNUM> - Display the mask of the port PORTNUM. Пример чтения из порта D, c отпущенной кнопкой: io get pin 2 port 2: 0x1b с нажатой кнопкой: io get pin 2 port 2: 0x0b Чтение из порта B, без подачи напряжения на вход контроля и с подачей: io get pin 0 port 0: 0xcf io get pin 0 port 0: 0x4f adc get [CHANNEL] - получить значение из канала CHANNEL АЦП. Если номер канала не указан, выдает весь набор. adc vget [CHANNEL] - получить значение АЦП в вольтах из канала CHANNEL, или весь набор. adc vref [VOLTAGE] - получить/установить значение опорного напряжения АЦП, в милливольтах. mac [xx:xx:xx:xx:xx:xx] - получить/установить MAC-адрес устройства. 1w list - получить список присоединенных устройств OneWire. 1w get <DEVICE> - получить значение от OneWire устройства с идентификатором DEVICE. 1w convert <DEVICE> - инициировать АЦП преобразование OneWire устройства с идентификатором DEVICE или всех. 1w name set <ID> <DEVICE> <NAME> 1w name clear ID 1w name list 1w name save - команды для назначения имён устройствам OneWire и сохранения их в EEPROM. В текущей конфигурации ID в диапазоне от 0 до 3. ipstats - вывод статистики порта ethernet. ip [iP] - получить/установить значение IP-адреса устройства. netmask [MASK] - получить/установить значение сетевой маски. gw [iP] - получить/установить значение сетевого шлюза устройства. yport stats - вывод статистики асинхронного порта. yport baud [bAUDRATE] - получить/установить скорость обмена асинхронного порта. yport mode [MODE] - получить/установить режим обмена асинхронного порта. MODE в виде "8N1" означает длину символа 8 бит, без четности, один стоп. Длина символа может быть от 5 до 8, четность может быть "N", "E" или "O" (без четности, четность, нечетность), число стоповых бит - 1 или 2. help - вывод списка поддерживаемых команд. version - вывод какой-то версии софта. eeprom reinit - инициализация конфигурации значениями по умолчанию (то же, что и запуск с нажатой кнопкой). Теперь о работе устройства в режиме удаленного COM-порта. Под Windows используется бесплатная программа HW Virtual Serial Port 3.1.2 (www.hw-group.com). Для связи с устройством на вкладке "Virtual Serial Port" следует указывать IP-адрес устройства и порт 7970. На вкладке "Settings" нужно выключить "NVT enabled". В среде Unix-систем можно попробовать socat (socat PTY,link=/dev/YPort TCP:192.168.15.20:7970) или что-нибудь подобное (я пока не пробовал, планирую пользоваться сырым телнетом). Размер буфера 192 байта, если это где-то важно. Ещё, при попытке общаться дуплексом данные могут теряться. Но, собственно, RS485 - полудуплескный интерфейс. Применяем эту конструкцию для удаленного доступа к счетчикам электрической энергии. ethersex.zip ethersex2.zip Изменено 31 июля, 2012 пользователем shura-i Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dmitry Polyakov Опубликовано 31 июля, 2012 Интересное решение. Я думаю, отдел разработок, презентует для shura-i устройство ERD-3.0, у которой на борту есть и преобразователь RS485 и в два раза более производительный контроллер и возможность поменять кварцевый резонатор. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alexander_I Опубликовано 31 июля, 2012 Спасибо, не откажусь, пригодится. Да, на ERD-3.0 этот софт тоже можно применить, заодно значительно увеличить функционал (стОит заглянуть в "make menuconfig", чтобы оценить, что ещё можно попытаться прикрутить). Для этого в проекте нужно сменить тип микроконтроллера, указать правильную тактовую частоту и правильное назначение портов ввода-вывода. Однако, ERD-2.0 вместе с дополнительной платкой всё-таки самое дешевое решение поставленной задачи (конвертор) из тех, что я вижу. Конечно, не самое лучшее. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roosya Опубликовано 28 октября, 2012 а какую-то ардуино-подобную прошивку никто не пытался прикрутить ? по-моему железо позволяет Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dmitry Polyakov Опубликовано 20 марта, 2013 (изменено) Наконец то один из наших активистов получил долгожданную награду за свои труды, а именно пользователю shura-i вручили плату ERD-3.2. Изменено 20 марта, 2013 пользователем Dmitry Polyakov фото Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
reddylab Опубликовано 20 ноября, 2014 Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0 Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ. В посте должно быть: исходник, ссылка на источник, описание, пример применения. Есть-ли возможность получить оригинальный исходник SNR-ERD-2.3 для модификаций? Или в интересах компании это невозможно? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Victor Pestov Опубликовано 20 ноября, 2014 Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0 Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ. В посте должно быть: исходник, ссылка на источник, описание, пример применения. Есть-ли возможность получить оригинальный исходник SNR-ERD-2.3 для модификаций? Или в интересах компании это невозможно? Добрый день! Невозможно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alexander_I Опубликовано 6 января Надо же, через 12 лет мне потребовалась прошивка этого преобразователя, уже для другой цели. И вот, ethersex уже лет пять практически не поддерживается, и теперь у меня его ни сконфигурировать не получается, ни собрать. Хотел взять отсюда свой же скомпилированный бинарник, но вложения здесь видимо погибли, остались только фото. Печаль. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
jffulcrum Опубликовано 7 января Так поставьте в виртуалку какую-нибудь Ubuntu 18 LTS, без обновления, и соберите в ней. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alexander_I Опубликовано 9 января Такая была идея тоже, спасибо. Но добавил пару пакетов, видимо изменивших наименование, теперь собирается, работает. Сообщения об ошибках как-то не указывали на них, или я что-то не заметил при установке. Конвертер ethernet-rs232 поместился в atmega168. Но кое-что из проекта почему-то выпилили (совсем, никаких опций, не нашёл никаких следов в исходниках). Например, в ECMD нет конфигурации osccal, yport baud, yport mode. Но мне подойдёт, будет работать на фиксированной скорости. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...