Ethernet shild w5500 + mega 2560

Тема в разделе "Arduino & Shields", создана пользователем Inventor, 13 окт 2016.

  1. Inventor

    Inventor Нуб

    Коллеги, помогите разобраться имею Mega 2560 и шилд на чипе w5500 (Амперка) использую библиотеку Ethernet2 перемычки на шилде установлены. в скетче штатного примера установил pinMode(10, OUTPUT); digitalWrite(10, HIGH);
    установил произвольный но гарантированно уникальный MAC, далее Ethernet.begin(mac, ip);
    Компилится без ошибки.
    в мониторе порта вижу IP 0.0.0.0 и адрес 192.168.0.88 который статиком пытаюсь назначить не пингуется.
    Кто-нибдь уже сталкивался с таким поведением, можете прокомментировать?
     
  2. rkit

    rkit Гуру

    Он и не должен пинговаться. Ответы на пинг волшебным образом не придут, их надо запрограммировать.
     
  3. AlexVS

    AlexVS Гик

    Вообще то, для выбора устройства необходимо устанавливать низкий уровень на пине SS, т.е. digitalWrite(selectEthernet,LOW);
    Ну и библиотека заботиться об этом своими силами
    Код (C++):
    #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284P__)
      inline static void initSS()    { DDRB  |=  _BV(0); }; //4
      inline static void setSS()     { PORTB &= ~_BV(0); };
      inline static void resetSS()   { PORTB |=  _BV(0); };
    А мужики то и не знают......
     
  4. Vetrinus

    Vetrinus Гик

    Я не знаю, как обстоят дела с Ethernet2, но обычная библиотека Ethernet 100% содержит в себе реализацию ICMP протокола, и никакого ответа на пинг самому программировать не нужно.
     
  5. AlexVS

    AlexVS Гик

    То же самое и в Ethernet2.
     
    Последнее редактирование: 13 окт 2016
  6. Inventor

    Inventor Нуб

    Коллеги, спасибо за комментарий, но немного не по теме. Дык все-таки почему в ответе на LocalIP() после begin(mac, ip) возвращает 0.0.0.0 (в мониторе порта смотрю), кому-нибудь удалось запустить шилд с чипом w5500 (Амперка) с выведенными перемычками SCK, MOSI, MISO, SS в паре с Mega 2560? У меня есть смутные сомнения что шилд не совсем живой (но светодиод "ON" горит) или я что-то не учел в настройках?
     
  7. AlexVS

    AlexVS Гик

    Вполне возможно, что командой digitalWrite(10, HIGH) - вы выключили шилд.
    У меня используется в связке с Мегой модуль на W5500, но не от Амперки, проблем нет.
    Ну и на всякий случай запостите сюда свой скетч (только в теги оберните).
     
  8. Inventor

    Inventor Нуб

    Скетч простой проверочный...

    Код (Text):

    #include <SPI.h>
    #include <Ethernet2.h>

    // Enter a MAC address and IP address for your controller below.
    // The IP address will be dependent on your local network:
    byte mac[] = {
     0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 0, 88);

    void setup() {
     // Open serial communications and wait for port to open:
     Serial.begin(9600);
     
     // start the Ethernet connection and the server:
     Ethernet.begin(mac, ip);
     
     Serial.print("server is at ");
     Serial.println(Ethernet.localIP());
    }


    void loop() {
     
    }

     
     
  9. AlexVS

    AlexVS Гик

    Ну да, вроде все просто.
    Если DHCP у вас поднят может просто попробуете Ethernet.begin(mac) ?
     
  10. Inventor

    Inventor Нуб

    Прошу прощения послал версию где уже убрал установку пинов
    вот так было:
    Код (C++):

    #include <SPI.h>
    #include <Ethernet2.h>

    // Enter a MAC address and IP address for your controller below.
    // The IP address will be dependent on your local network:
    byte mac[] = {
      0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
    };
    IPAddress ip(192, 168, 0, 88);

    void setup() {
     
      pinMode(10, OUTPUT);
      digitalWrite(10, HIGH);
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
     
      // start the Ethernet connection and the server:
      Ethernet.begin(mac, ip);
     
      Serial.print("server is at ");
      Serial.println(Ethernet.localIP());
    }


    void loop() {
     
    }
     
     
  11. AlexVS

    AlexVS Гик

    На какой пин выведен ресет W5500? Может нужно принудительно ресет передернуть.
    Код (C++):
      digitalWrite(resEthernet,LOW);  //сброс ethernet контроллера
      delay(1000);
      digitalWrite(resEthernet,HIGH);  
     
  12. Inventor

    Inventor Нуб

    Пробовал в том же скетче begin(mac); шилд виснет на этом вызове, проверял в мониторе.
     
  13. AlexVS

    AlexVS Гик

    После того как убрали pinMode(10, OUTPUT); digitalWrite(10, HIGH); - не заработало?
     
  14. Inventor

    Inventor Нуб

    нет тот же ответ 0.0.0.0
     
  15. AlexVS

    AlexVS Гик

    Пачкорд живой?
     
  16. Inventor

    Inventor Нуб

    Да вроде живой взят с рабочего компа индикаторы на RJ45 моргают, патчкорд подключен к офисной локалке, есть DHCP. Может попробовать связать комп с шилдом через отдельный хаб. Хотя не вижу связи как этот факт может повлиять на установку статического IP на шилде, в локалке этот адрес свободен, проверил.
     
  17. AlexVS

    AlexVS Гик

    Если пробовал уже программный ресет, тогда извини, больше дельных мыслей нет. Кроме как попробовать в другой сети, например дома, или попробовать другой шилд.
     
  18. Vetrinus

    Vetrinus Гик

    Попробуйте Ethernet.maintain(); вместо begin.
    Этот метод получает адрес по DHCP.
    Еще могут быть варианты, не связанные с ардуино. Например, недовоткнули кабель.
     
  19. Inventor

    Inventor Нуб

    Вот и я к этой мысли уже склоняюсь, буду пробовать, была мысль что может кто-то с такой проблемой уже сталкивался, потому и на форум обратился. Спасибо за содействие.
     
  20. Inventor

    Inventor Нуб

    если получится подружить шилд с мегой напишу в чем проблема была.