Ремонтируем ENC28J60 Ethernet Shield for Arduino Nano 3.0 RJ45 Webserver Module
- Войдите на сайт для отправки комментариев
Пнд, 15/07/2013 - 05:43
Сут такова.
NANO+ENC28J60 Ethernet Shield, залил скетч, Ethernet кабель воткнул, зеленая лампа горит, оранжевая пару раз мигнет и затухает, связи с устройством по Ethernet нет. Заведомо исправное устройство с аналогичным скетчем по этому же кабелю работает.
Какие действия для ремонта ENC28J60 Ethernet Shield можно предпринять?
Жду Вашей помощи и советов.
а оно вообще куда нибуть откликается? в ком порт например?
а оно вообще куда нибуть откликается? в ком порт например?
запускал пример с библиотеки, где в сериал выводится TP который определяется программно шилдом. Выводит 0.0.0.0 . Нано исправна, пробовал на 2-х разных нано.
тоесть другой шильд с этим скечем работает нормально? а этот шильд не работает?
там в общем то и ремонтировать особо нечего... разве что проверить что везде все пропаяно нормально... особенно если под рукой есть точно такой же шильд. может ноги где слиплись.
тоесть другой шильд с этим скечем работает нормально? а этот шильд не работает?
там в общем то и ремонтировать особо нечего... разве что проверить что везде все пропаяно нормально... особенно если под рукой есть точно такой же шильд. может ноги где слиплись.
принес на работу, воткнул здесь, все работает. Что за ерунда? Возможна ли проблема в питании? Просто дома кабель USB немного барахлит, но скетч то прошился..... В общем вечером еще раз дома проверю.
принес на работу, воткнул здесь, все работает. Что за ерунда? Возможна ли проблема в питании? Просто дома кабель USB немного барахлит, но скетч то прошился..... В общем вечером еще раз дома проверю.
я думаю что дома у вас просто все не по феншую.. а вот на работе больше свободной энергии :)
принес на работу, воткнул здесь, все работает. Что за ерунда? Возможна ли проблема в питании? Просто дома кабель USB немного барахлит, но скетч то прошился..... В общем вечером еще раз дома проверю.
я думаю что дома у вас просто все не по феншую.. а вот на работе больше свободной энергии :)
Поменял USB кабель, взял другой Ethernet кабель, воткнул в другой LAN порт в роутере, результат нулевой. На роутере горит оранжевый диод, на шилде зеленый. Роутер NETGEAR JWC2000. Но другие МК то работают без проблем.
я тут допил чай и посмотрел на чаинки :)
Чаинки показывают что у вас дома уже есть дуина подключеная в вашу домашнюю сеть... и у ней видимо мак адрес по умолчанию из примера... в следствии чего сеть вашу вторую дуину с таким же мак адресом просто отвергает... дайте ей другой мак адрес и все будет работать..
я тут допил чай и посмотрел на чаинки :)
Чаинки показывают что у вас дома уже есть дуина подключеная в вашу домашнюю сеть... и у ней видимо мак адрес по умолчанию из примера... в следствии чего сеть вашу вторую дуину с таким же мак адресом просто отвергает... дайте ей другой мак адрес и все будет работать..
Хм мысль. Попробую. Для MAC адреса есть какие то ограничения в плане велечины чисел в HEX-е?
вам хватит поменять на единичку
0xDE 0xAD 0xBE 0xEF 0xFE 0xEE
следующим будем последняя цифра 0xEF, потом 0xF0 ну и так далее
вам хватит поменять на единичку
0xDE 0xAD 0xBE 0xEF 0xFE 0xEE
следующим будем последняя цифра 0xEF, потом 0xF0 ну и так далее
не помогло.
А есть разница в библиотеках для Ethernet Shield Uno W5100 и Ethernet Shield Nano enc28j60 ? Может я не ту библиотеку использую?
есть разница!
Есть ссылка на рабочую библиотеку по версию ардуино > 1.0 ?
у меня W5100. так что с последней версией библиотеки для enc28j60 не помогу....
на вскидку это вот вроде бы.
https://github.com/gregor-samsa/ethercard
пробуйте, я сегодня уже 6 часов из жизни потерял с библиотеками, разбирательствами почему они с ДУЕ не работают и ругаются через строчку... пока внес все правки в библиотеки хотелось кого нибуть придушить потихому...
у меня W5100. так что с последней версией библиотеки для enc28j60 не помогу....
на вскидку это вот вроде бы.
https://github.com/gregor-samsa/ethercard
пробуйте, я сегодня уже 6 часов из жизни потерял с библиотеками, разбирательствами почему они с ДУЕ не работают и ругаются через строчку... пока внес все правки в библиотеки хотелось кого нибуть придушить потихому...
Смотрел похожую библиотеку. Придется весь скетч переписывать под нее.
Но нашел библиотеку адаптированную, выглядит как под W5100, вот только собака не работает (( Может гляните как пар спустите?
https://drive.google.com/?usp=chrome_app#folders/0B82cnzweCbn1Q29ER3JtUHlyNHM
Нашел источник этой библиотеки https://github.com/turicas/Ethernet_ENC28J60 , компелируется, но в браузере 0 реакции :(
В общем роясь в инете пол дня и перелопачивая библиотеки нашел наиболее красивый способ.
http://arduino.shopium.ua/pages/etherShield-simple-wrapper/
Библиотеки обе переделал под версию 1.01 и больше (заменил WProgram и WConstant). Пример сктча запустил - все работает.
#include "etherShield.h" #include "ETHER_28J60.h" static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, // so unless you have more than one of these boards // connected, you should be fine with this value. static uint8_t ip[4] = {192, 168, 0, 55}; // the IP address for your board. Check your home hub // to find an IP address not in use and pick that // this or 10.0.0.15 are likely formats for an address // that will work. static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; // Создали обьект e класса ETHER_28J60 void setup() { e.setup(mac, ip, port); // Запустили } void loop() { if (e.serviceRequest()) // Если есть запрос клиента { e.print("<H1>Analog Values</H1><br/><table border=\"1\">"); // Создаём текст ответа - табличку e.print("<tr><th>Input</th><th>Value</th></tr>"); // со значениями аналоговых входов for (int i = 0; i < 6; i++) { e.print("<tr><td>"); e.print(i); e.print("</td><td>"); e.print(analogRead(i)); e.print("</td></tr>"); } e.print("</table>"); e.respond(); // отправляем табличку клиенту } delay(100); }Куда можно залить обе библиотеки для будущих покалений нубов?
поздравляю... как обычно в общем глюки жили в библиотеке :)
а вот добавить на сайте библиотеко-помойку наверно было бы хорошей идеей... хотя можно завести такую помойку где нибуть и тут просто пришпилить ссылку..
В общем роясь в инете пол дня и перелопачивая библиотеки нашел наиболее красивый способ.
http://arduino.shopium.ua/pages/etherShield-simple-wrapper/
Библиотеки обе переделал под версию 1.01 и больше (заменил WProgram и WConstant). Пример сктча запустил - все работает.
#include "etherShield.h" #include "ETHER_28J60.h" static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, // so unless you have more than one of these boards // connected, you should be fine with this value. static uint8_t ip[4] = {192, 168, 0, 55}; // the IP address for your board. Check your home hub // to find an IP address not in use and pick that // this or 10.0.0.15 are likely formats for an address // that will work. static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; // Создали обьект e класса ETHER_28J60 void setup() { e.setup(mac, ip, port); // Запустили } void loop() { if (e.serviceRequest()) // Если есть запрос клиента { e.print("<H1>Analog Values</H1><br/><table border=\"1\">"); // Создаём текст ответа - табличку e.print("<tr><th>Input</th><th>Value</th></tr>"); // со значениями аналоговых входов for (int i = 0; i < 6; i++) { e.print("<tr><td>"); e.print(i); e.print("</td><td>"); e.print(analogRead(i)); e.print("</td></tr>"); } e.print("</table>"); e.respond(); // отправляем табличку клиенту } delay(100); }Куда можно залить обе библиотеки для будущих покалений нубов?
поздравляю... как обычно в общем глюки жили в библиотеке :)
а вот добавить на сайте библиотеко-помойку наверно было бы хорошей идеей... хотя можно завести такую помойку где нибуть и тут просто пришпилить ссылку..
К сожалению работает только при отправке небольших кусков в WEB. Я уже пожалел что купил этот можуль а не W5100. Но раз есть этот, значит надо с ним и работать научиться. Вы бы могли мне объяснить принцип работы стандартной библиотеки ethernetshield.h под мой модуль?
Возмите библиотеку ethercard и прекратите мучиться :)
Я как то поражаюсь упертости некоторых. зачем мучиться и пытатся заставить работать библиотеку которую автор пилил для каких то только автору понятных целей... если можно взять другую и попробовать с ней.
Возмите библиотеку ethercard и прекратите мучиться :)
Я как то поражаюсь упертости некоторых. зачем мучиться и пытатся заставить работать библиотеку которую автор пилил для каких то только автору понятных целей... если можно взять другую и попробовать с ней.
качаю. бужут вопросу, буду писАть.
Спасибо!
И вот первая же ошибка, ошибка компиляции:In file included from getStaticIP.ino:4:
вот эту версию попробуйте..
https://github.com/jcw/ethercard
вот эту версию попробуйте..
https://github.com/jcw/ethercard
Эта версия работает. НО, библиотека отличается от стандартной Ethernet. Есть пример скетча, так называемый web-термометр. Если не сложно, разжуйте плз строки коментами, что делает та или иная строка, я что то вообще не догоняю.
#include <OneWire.h> #include <EtherCard.h> // настройки Ethernet #define BUF_SIZE 512 byte mac[] = { 0x00, 0x04, 0xA3, 0x21, 0xCA, 0x38 }; // MAC-адрес byte fixed = false; // =false: пробовать получить адрес по DHCP, // в случае неудачи использовать статический; // =true: сразу использовать статический uint8_t ip[] = { 169, 254, 8, 200 }; // Статический IP-адрес uint8_t subnet[] = { 255, 255, 0, 0 }; // Маска подсети uint8_t gateway[] = { 192, 168, 1, 20 }; // Адрес шлюза uint8_t dns[] = { 192, 168, 1, 20 }; // Адрес DNS-сервера (необязателен) byte Ethernet::buffer[BUF_SIZE]; static BufferFiller bfill; // used as cursor while filling the buffer // настройки OneWire #define DS18B20PIN 9 OneWire ds(DS18B20PIN); // команды DS18B20 void setConversionTime(byte conf) { ds.reset(); ds.skip(); // skip ROM ds.write(0x4E); // write scratchpad ds.write(0); // Th ds.write(0); // Tl ds.write(conf); // configuration } void startConversionAll() { ds.reset(); ds.skip(); // skip ROM ds.write(0x44,0); // start conversion delay(10); } void setup(void) { Serial.begin(57600); delay(2000); /* Проверяем, что контроллер Ethernet доступен для работы */ Serial.println("Initialising the Ethernet controller"); if (ether.begin(sizeof Ethernet::buffer, mac, 10) == 0) { Serial.println( "Ethernet controller NOT initialised"); while (true); } // Пытаемся получить адрес динамически Serial.println("Attempting to get an IP address using DHCP"); if (ether.dhcpSetup()) { ether.printIp("Got an IP address using DHCP: ", ether.myip); } else { // Если DHCP не доступен, используем статический ip-адрес ether.staticSetup(ip, gateway, dns); ether.printIp("DHCP FAILED, using fixed address: ", ether.myip); fixed = true; } } char okHeader[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n" ; char authorLink[] PROGMEM = "</pre><hr>Read about me <a href=\"http://mk90.blogspot.com\" target=\"_blank\">here</a>" ; static void homePage (BufferFiller& buf) { buf.emit_p(PSTR("$F\r\n" "<title>Arduino web-thermometr</title>" "<h2>DS18B20 Network:</h2>" "<pre>"), okHeader); byte counter = 0; byte addr[8]; byte data[12]; setConversionTime(0x7F); // установить 9-битное разрешение startConversionAll(); // запустить конвертацию температуры delay(100); // на конвертацию 9-битного значения требуется 93,75 мс // ищем устройства и выводим результаты ds.reset_search(); delay(250); while (ds.search(addr)) { buf.emit_p(PSTR("$D: "),++counter); if ( OneWire::crc8(addr, 7) != addr[7]) { buf.emit_p(PSTR("- address CRC is not valid!\n")); continue; } else if (addr[0] != 0x28) { buf.emit_p(PSTR("- is not a DS18B20 family device!\n")); continue; } ds.reset(); ds.select(addr); ds.write(0xBE); // читать scratchpad for (byte k=0; k<9; k++) { // нам потребуется 9 байт data[k] = ds.read(); } if ( OneWire::crc8( data, 8) != data[8]) { buf.emit_p(PSTR("- value CRC is not valid!\n")); continue; } buf.emit_p(PSTR(" $D.$D °C\n"), *(int *)data/16, (int) (abs(*(int *)data % 16) * 0.625)); } buf.emit_p(PSTR("\nTotal: $D devices."), counter); buf.emit_p(authorLink); } void loop(void) { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) { bfill = ether.tcpOffset(); char* data = (char *) Ethernet::buffer + pos; Serial.println(data); // распечатываем запрос для отладки if (strncmp("GET / ", data, 6) == 0) homePage(bfill); else bfill.emit_p(PSTR( "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n" "\r\n" "<h1>401 Unauthorized</h1>")); // отправить ответ клиенту ether.httpServerReply(bfill.position()); } }Интерес вызывают строки, начиная с 69.