Tosduino Uno R3 + Ethernet Shield

Scarhand
Offline
Зарегистрирован: 28.07.2013

Всем доброго времени суток! Недавно пиобрел себе 

Tosduino Uno R3 http://www.odduino.com/shop/78/desc/arduino-uno-tosduino

и Ethernet Shield (HanRun HR911105A 12/11) на базе WIZnet W5100 http://www.odduino.com/publ/shildy_shields/set_ethernet/arduino_ethernet_shield_w5100_set_dlja_arduiny/13-1-0-20 .

Попытки запустить тестовые скетчи (соединение с гуглом и т.д.) с библиотеки Ethernet не увенчались успехом. Сам шилд подключал к ADSL Wi-Fi роутеру DSL-2600U (провайдер Укртелеком) по витой паре, а к роутеру ноутбук через Wi-Fi. Вот к примеру скетч DHCP Address Printer





/*
  DHCP-based IP printer
 
 This sketch uses the DHCP extensions to the Ethernet library
 to get an IP address via DHCP and print the address obtained.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 12 April 2011
 modified 9 Apr 2012
 by Tom Igoe
 
 */

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // this check is only needed on the Leonardo:
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print("."); 
  }
  Serial.println();
}

void loop() {

}

в нем прога зависает вот на вот этой строчке if (Ethernet.begin(mac) == 0). Так точно происходит во всех примерах. Пробовал устанавливать настройки TCP протокола так как я это делаю на компе

ip 192. 168.1.3

маска 255.255.255.0

шлюз 192.168.1.1

предпочтительный DNS сервер 192.168.1.1.

При таких настройках комп нормально конектился с интернетом через витую пару, а при использовании этих настроек к шилду результат нулевой - зависает в том же месте. Нашел тему в которой обсуждается даная проблема http://forum.arduino.cc/index.php?topic=131171.0, но в силу слабого знания португальского языка (язык поределил гугл транслейт) и не очень понятных коментариев в теме, информацию осилить не смог. Может быть проблема с SPI интерсфейсом, потому что, примеры работы с SD картой тоже не работают. Пробовал делать как предлагают здесь http://arduino.ru/forum/programmirovanie/ethernet-shield-c-sd-kartoi-ne-pishet-na-kartu результат нулевой "initialization failed". Пробовал разные карты, форматировал в формате FAT, попробовал даже библиотеку SDfat, а результата никакого. Меня еще не много настораживает обозначение пинов на шилде, там 13,12,11 пины обозначены прямой линией а 10 пунктиром, а 4-й пин вообще никак не обозначенй. Может быть такое, что алгоритм выбора режима работы с картой или Ethernet контроллером как то изменены? Прошу прощения за мой слабоватый русский язык и грамматику:)

Scarhand
Offline
Зарегистрирован: 28.07.2013

Вот пропробовал еще такой пример





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

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 4 };
byte dnS[] = { 192, 168, 1, 1 };
byte gateway[] = { 192, 168, 1, 1 };

char serverName[] = "www.google.com";

EthernetClient client;

void setup() 
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip, dnS, gateway);
  //Ethernet.begin(mac);//, ip);
  
  Serial.print("My address:");
  Serial.println(Ethernet.localIP());

  delay(5000);
  Serial.println("connecting...");

  if (client.connect(serverName, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while(true);
  }
}

в Serial Monitore IDE пишет 

My address:0.0.0.0
connecting...

Ниже представлена информация с роутера

Таблица DHCP http://pixs.ru/showimage/DHCPstatus_9154813_8585862.png

LAN клиеты http://pixs.ru/showimage/LanClients_3612453_8585882.png

Таблица маршрутизации http://pixs.ru/showimage/talbMrshpn_1798203_8585891.png

Результат пинга http://pixs.ru/showimage/pingResult_7704240_8585956.png

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

вас ничего не смущает тут?

05 byte ip[] = { 192, 168, 1, 1 };
06 byte dnS[] = { 192, 168, 1, 1 };
07 byte gateway[] = { 192, 168, 1, 1 };

 

Scarhand
Offline
Зарегистрирован: 28.07.2013

я исправил на 192.168.1.4 пробовал и 192.168.1.177

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ну так попинайте свой роутер.. там может у вас ограничение по ИП по МАС адресам.. по количеству клиентов...

Scarhand
Offline
Зарегистрирован: 28.07.2013

Puhlyaviy пишет:

ну так попинайте свой роутер.. там может у вас ограничение по ИП по МАС адресам.. по количеству клиентов...

как определить доступные адреса? 

Scarhand
Offline
Зарегистрирован: 28.07.2013

мак фильтр в роутере отключен

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

настройки роутера постьте. :)