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...