W5100 server is at 0.0.0.0

one_player
Offline
Зарегистрирован: 15.11.2016

Добрый день/вечер.

Столкнулся с такой проблемой.

Подключил w5100 китайца к uno. Залил скетч WebServer пример из библиотеки Ethernet, назначив MAC и ip из диапазона своей сети. После заливки скетча в монитор порта выпадает server is at 0.0.0.0 по ip заданному в скетче через браузер ничего не показывает. Ноооо если пингануть w5100 по этому ip то пингипроходят и весьма успешно. Если воспользоваться прогой ipscan то она находит шилд в сетке с тем маком что прописал в скетче и с тем ip. В мониторе порта если нажимать на ресет шилда иногда все таки выдает прописанный ip но попытавшись зайти на шилд получаю "Страница недоступна". 

Читал в интернетах что возможен хреновый контакт между шилдом и uno. Прозвонил все контакты мультиметром результат - Все ОК.

Потом нашел в инете что резистор который находится сразу за разъемом RJ-45 должен быть не 511й - 510 Ом, а 510й на 51 Ом. Под рукой оказался только 560йна 56 Ом. Перепаял т.к. разница думаю не существенная. Результат тот же с теми же показателями и симптомами.

Собственно вопрос.

Кто знает в чем лажа? И как это исправить? 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

one_player, хреновые контакты редко когда можно диагностировать тестером. Модуль должен работать и без тюнингов. Модуль критичен к питанию, если питание "не тянет", то возможны глюки самых разнообразных форм.

one_player
Offline
Зарегистрирован: 15.11.2016

Мой мультиметр выдает на ноге 5V - 4.9 на 3.3V - 3.3V при вкл. шилде.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

На шилде 5 вольт померяйте, 4.9, всё же хуже чем 5.1

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

one_player, по большому счёту ваше измерение мало о чём говорит. Это если бы нагрузкой была например лампочка -тогда да, измерение мультметром было бы точным. А на импульсных нагрузках тестер бессилен,  пиковая нагрузка  может длится к примеру миллисекунду, (цифра от балды), напряжение провалится и модуль глюканёт. Для тестера эта миллисекунда как слону комариный укус. Версию плохого питания проверяют обычно образцовым БП. Например взяв +5 вольт от компового БП, соединив достаточно толстым проводом. Если глюк повторится -стало быть дело не в питании, и можно отрабатывать другие версии.

uno
Offline
Зарегистрирован: 16.06.2016
server is at 0.0.0.0

неправильно там должен быть нормальный ип. конфликта ИП нет случайно. какой ип. код в студию

one_player
Offline
Зарегистрирован: 15.11.2016

uno пишет:

server is at 0.0.0.0

неправильно там должен быть нормальный ип. конфликта ИП нет случайно. какой ип. код в студию

Конфликт исключен т.к. после отключения кабеля ip перестает пинговаться

А код из примеров.

#include <SPI.h>
#include <Ethernet.h>


byte mac[] = {
  0x00, 0x16, 0x3E, 0x39, 0x8C, 0x9D
};
IPAddress ip(192, 168, 0, 160);

EthernetServer server(80);

void setup() {
  
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
         if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close"); 
          client.println("Refresh: 5");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

 

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Сам сейчас разбираюсь с этим шилдом. Много тонкостей и нюансов с ним. На ардуино.сс говорят, что ноли в качестве IP получаются в случае неправильной работы SPI. Либо глюки в плате, либо (скорее всего) конфликт с СД-картой. Обычно советуют ее отключать, добавив в сетап pinMode(4, OUTPUT); digitalWrite(4,HIGH);

one_player
Offline
Зарегистрирован: 15.11.2016

Отключал. И даже все ноги на шилде загинал кроме spi и с 10го по 13й. Результат тот же. Прикол в том что таких шилдов у меня 3шт. Вероятность того что все 3 на 3х разных uno нерабочие....? Ну не знаю 1-5%???
Завтра приходит от другого продавца lan шилд, подключим посмотрим. Если и они не взлетят то косячные 3 unы.
Хотя пробовала Подключить один из этих шилдов через nano. Результат тот же, но если честно то сомневаюсь что правильно подключил т.к. делал грубо говоря на "коленке".

Алексей Н
Offline
Зарегистрирован: 02.01.2016

В коде, который Вы привели (вроде как из примеров) не видно отключения СДкарты. У меня на меге взлетел с таким кодом в начале сетапа.
    Serial.begin(9600);
    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);
    pinMode(10, OUTPUT);
    digitalWrite(10, LOW);

Кстати, судя по отзывам, часто встречаются косяки пайки на W5100. Типа такого http://i681.photobucket.com/albums/vv178/grue2/Computers/pict10852.jpg Если все шилды от одного производителя, то запросто могут быть все косячные. Еще можно попробовать соединить не "бутербродом", а проводами, чтобы исключить вариант плохого контакта пинов.

one_player
Offline
Зарегистрирован: 15.11.2016

Пайку просматривал, соплей нет.
По поводу вашего куска кода, попробую.
Проводами не соединял но Линк на разъеме Лан норм световая индикация на шилде норм. Скетч который залил первым делом уже обкатан. И в нем никак sd не отключается и не задействуется.
Длину пинов шилда о которой пишут что она бывает разная проверял просто поставив шилд на ровную поверхность что бы видно было есть ли просвет.))
Проверить все компоненты на заведомо рабочей плате и шилде боюсь т.к. они в работе и спалить или глюкнуть систему не очень хочется. Поэтому заказал другой лан шилд, завтра все станет понятно.
Хотя блин ну очень странно то что пр пинге шилда по ip индикация на шилде реагирует и сетевой софт обнаруживает шилд в сети с его прописанным ip и mac_ом.

alexvs
Offline
Зарегистрирован: 22.07.2014

Есть подозрение что проблема такая же как описана тут http://forum.iobroker.net/viewtopic.php?t=1609

one_player
Offline
Зарегистрирован: 15.11.2016

alexvs пишет:

Есть подозрение что проблема такая же как описана тут http://forum.iobroker.net/viewtopic.php?t=1609

В первом сообщении я уже писал про замену резистора. И у меня тоже на замену нашелся только 560й.

one_player
Offline
Зарегистрирован: 15.11.2016

Проблему нашел. Оказалось что неработал шилд из-за того что на 12 пине висел другой шилд. 

Вопрос. Что за хрень почему при подключении чегото у чего тоже есть MISO шилд отказывается работать??? 

У меня сейчас голова взорвется.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

one_player, это вы значит задаёте вопросы, не считая важным упомянуть что у вас там трёхслойный бутерброд? Ай яйяй..

 

one_player
Offline
Зарегистрирован: 15.11.2016

Каюсь был неправ. 

Хотя не придал этому значения т.к. rc522 rfid reader с unoй работал отлично и при подключении лан шилда все "падало". Отключаем лан шил и все "взлетает". Методом тыка выяснил что при отключенном MISO rc522 начинает работать лан шилд.

И теперь киплю от вопроса Почему так происходит т.к. у меня есть уже рабочая точно такая же сборка.

Еще попутный вопрос. Какие пины нужны rc522 для только чтения метки?

Алексей Н
Offline
Зарегистрирован: 02.01.2016

Ну вроде так и не должно работать. Нельзя одовременно запускать несколько устройств по SPI. Решение точно такое же должно быть как и с СДкарточкой. Отключаете считыватель, подав на его пин SS "HIGH". SS пины должны отличаться для всех устройств.

Вот тема с примером в конце. http://forum.amperka.ru/threads/rfid-rc522-hanrun-ethernet-shield.3851/

Хотя, если есть абсолютно такой же комплект с абсолютно таким же кодом и без проблем работающий, то хз.

 

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

http://www.homeguard24.pl/arduino-ethernet-shield-rfid/

https://www.seeed.cc/Arduino-Attendance-Logger-p-327.html#!

one_player
Offline
Зарегистрирован: 15.11.2016

И так. Разобрался.
Весь косяк в том что:
1. Т.к. RC522 использует ISP так же как W5100 я указал в коде разные SS!!!. 
2. Но даже в таком случае если и программно дергать за ноги SS в зависимости от того что хотим использовать RC522 или W5100 в мониторе порта не покажет вам IP и не присвоит его. 
3. ТОЛЬКО если вы явно укажите скетче IP ардуинки то сможете пингануть ардуинку по этому IP но не зайти на нее. Но в мониторе порта вы все равно будете наблюдать что то на подобии 0.0.0.0 или 0.0.0.8 и т.д.
4. Для того что бы все взлетело необходимо MISO пин RC522 и 12й пин MISO ардуинки уно подключить через резистор 220 Ом.

P/S/ При связке UNO+RC522+SDcard также необходимо MISO пин SD и 12й пин MISO ардуинки уно подключить через резистор 220 Ом. При таком подключении все работает и без всяких программных дерганей  SS пинов  wink

Да и перепайка резистора 511го на 510й ничего не дает  lol