Jump to content
Калькуляторы

Ethernet remote device альтернативные прошивки выкладываем прошивки,которые подходять под железо ERD

Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0

Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ.

В посте должно быть: исходник, ссылка на источник, описание, пример применения.

Share this post


Link to post
Share on other sites

Прошивка позволяет использовать 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

post-104868-033174100 1343719441_thumb.jpg

post-104868-046170300 1343719443_thumb.jpg

post-104868-014859700 1343719445_thumb.jpg

post-104868-076752000 1343719447_thumb.jpg

post-104868-073320500 1343719454_thumb.jpg

post-104868-026064400 1343719459_thumb.jpg

Edited by shura-i

Share this post


Link to post
Share on other sites

Интересное решение. Я думаю, отдел разработок, презентует для shura-i устройство ERD-3.0, у которой на борту есть и преобразователь RS485 и в два раза более производительный контроллер и возможность поменять кварцевый резонатор.

Share this post


Link to post
Share on other sites

Спасибо, не откажусь, пригодится. Да, на ERD-3.0 этот софт тоже можно применить, заодно значительно увеличить функционал (стОит заглянуть в "make menuconfig", чтобы оценить, что ещё можно попытаться прикрутить). Для этого в проекте нужно сменить тип микроконтроллера, указать правильную тактовую частоту и правильное назначение портов ввода-вывода.

Однако, ERD-2.0 вместе с дополнительной платкой всё-таки самое дешевое решение поставленной задачи (конвертор) из тех, что я вижу. Конечно, не самое лучшее.

Share this post


Link to post
Share on other sites

а какую-то ардуино-подобную прошивку никто не пытался прикрутить ? по-моему железо позволяет

Share this post


Link to post
Share on other sites

Наконец то один из наших активистов получил долгожданную награду за свои труды, а именно пользователю shura-i вручили плату ERD-3.2.

DSC03040_2.jpg

Edited by Dmitry Polyakov
фото

Share this post


Link to post
Share on other sites

Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0

Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ.

В посте должно быть: исходник, ссылка на источник, описание, пример применения.

 

Есть-ли возможность получить оригинальный исходник SNR-ERD-2.3 для модификаций? Или в интересах компании это невозможно?

Share this post


Link to post
Share on other sites

Здесь выкладываем свои или доработанные чужие прошивки, которые подходят под железо ERD-2.0 или ERD-3.0

Автор обсуждаемой прошивки будет поощряться отделом разработок компании НАГ.

В посте должно быть: исходник, ссылка на источник, описание, пример применения.

 

Есть-ли возможность получить оригинальный исходник SNR-ERD-2.3 для модификаций? Или в интересах компании это невозможно?

Добрый день!

Невозможно.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this