Ethernetshield funktioniert nur auf Arduino Board.

Guten Morgen zusammen, ich habe mich gestern mal hingesetzt und einen kleinen RGB Stripe Controller auf einem Lochbrett zusammen gelötet. Nebenbei habe ich ein Ethernetshield auf Header mit an den ATMega328 gepackt um ein Webserver drauf laufen zu lassen. Soweit so gut . Nur bekomme ich übers Netzwerk keine Verbindung zu der Konstruktion. Die Leds: Link, 100m, Fulld auf dem Ethernetshield sind an und wenn ich die definierte IP anpinge blinken auch die TX/RX LEDs, aber es kommt nur:

Antwort (localeIP): Zielhost nicht erreichbar.

Habe hier einen Cisco Switch rumstehen, auf dem habe ich mal ein Trace aufgesetzt und man sieht deutlich das Bytes hin und her geschubst werden. Wenn ich das selbe Shield und den selben ATMega328 auf ein Uno Board packe funktioniert alles einwandfrei. Habe dann an kalte Lötstellen gedacht und alle Verbindungen mal durchgemessen, aber die Verbindung zwischen Shield und Chip sind in Ordnung.

Hat jemand eine Idee voran es noch liegen könnte? Der Webserver ist einfach das Beispiel mit angepasster IP. Verbunden sind die Pins 10-13, GRD und 5V.

Verbunden sind die Pins 10-13, GRD und 5V.

Das ist der Fehler.

Meine Erinnerung sagt: Nur 10 (SS des Shields), reicht aus der Reihe. Pin 11 bis 13 wird nicht auf dem Ethernet Shield genutzt Pin 4 (SS der SD Karte) ist auch verbunden Das Ethernetboard bezieht seinen SPI über den ISP Stecker.

Der Grund: Das EhernetShield soll auf Mega2560 und dem Uno funktionieren Der Mega hat seinen SPI im Bereich Pin 53 usw, und halt auf dem ISP Stecker.

audacity363: ein Ethernetshield auf Header mit an den ATMega gepackt ... Verbunden sind die Pins 10-13

Das sind die SPI-Pins vom UNO, aber es sind NICHT die SPI-Pins vom MEGA.

Ahh okey das mit dem Mega macht Sinn. Da habe ich nicht drüber nachgedacht. Werde es gleich mal umlöten und mich dann nochmal melden, ob es gelappt hat oder nicht.

Habe es jetzt nach diesem Pinout: http://hifiduino.files.wordpress.com/2012/02/arduino_uno-001.jpg umgelegt.

Na ja jetzt leuchtet die einzelne LED, die quer Rechts über dem Crystel sitzt, nicht mehr. Diese ist aber an, wenn das Shield auf dem Arduino Board sitzt oder das Setup so liegt wie oben beschrieben. Finde leider keine Beschreibung dazu aber schätze jetzt mal, dass sie anzeigt ob ein Chip zum kommunizieren gefunden wurde.

Also Fazit es funktioniert nun auch nicht.

Habe auch noch ein zweites Pinout gefunden: http://freeduino.ru/arduino/images/Prog_Mega-ISP_scheme_icsp.gif aber auch damit funktioniert es nicht.

audacity363: Also Fazit es funktioniert nun auch nicht.

Du beachtest den hardwaremäßigen Cable-Select Pin weder bei der Hardwareverkabelung noch (vermutlich) bei der Software.

Nur wenn die Hardware funktionstüchtig verkabelt ist UND die Software die verkabelte Hardware korrekt ansteuert, kann ein SPI-Gerät (wie z.B. der W5100 Ethernet-Chip) funktionieren.

Für CS muss man glaube ich nicht den Hardware Pin nehmen. Den kann man frei in der Software vergeben.

Allgemein wird glaube ich CS meistens in Software geschaltet. Auch wenn man den HW Pin verwendet. Es bietet sich natürlich trotzdem an.

Serenifly: Für CS muss man glaube ich nicht den Hardware Pin nehmen. Den kann man frei in der Software vergeben.

Allgemein wird glaube ich CS meistens in Software geschaltet.

Ganz genau: Die Software entscheidet, ob es auf dem SPI-Bus funktioniert.

Und auch hier gilt dann wieder das GIGO-Prinzip wie beim Mülleimer: Garbage In ==> Garbage Out

Die beste Hardware kann nur dann funktionieren, wenn sie von der Controller-Software korrekt angesteuert wird.

Aber den verwendeten Arduino-Sketch, der nicht funktioniert, möchte der Threadstarter wohl nicht vorzeigen. Sonst hätte er den ja zusammen mit Schaltbild/Verkabelung gleich zu Anfang gepostet. Hat er aber nicht, keine Ahnung warum nicht.

Habe auch noch ein zweites Pinout gefunden

Die beiden beschreiben des isp des Uno.

Ich habe es aber so verstanden, dass du ein Ethernet Shield an einen “Standalone” atmega328 anschießen möchtest.

jurs:

Serenifly:
Aber den verwendeten Arduino-Sketch, der nicht funktioniert, möchte der Threadstarter wohl nicht vorzeigen. Sonst hätte er den ja zusammen mit Schaltbild/Verkabelung gleich zu Anfang gepostet. Hat er aber nicht, keine Ahnung warum nicht.

audacity363:
Der Webserver ist einfach das Beispiel mit angepasster IP.
Verbunden sind die Pins 10-13, GRD und 5V.

Vll. War das missverständlich aber hier nochmal alles ganz genau:
Sketch:

/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */

#include <SPI.h>
#include <Ethernet.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,178,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);

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


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(3, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
	  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("Hello World");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

Verkabelung ganz am Anfang:

Shield Bezeichnung Atmega328 Pin Arduino Bezeichnung
5V VCC 5V
GND GND GND
13 19 13
12 18 12
11 17 11
10 16 10

Neue Verkabelung:

ISCP Schnitstelle (Analoge Pins links, Digitale rechts):


| 1 | 2 | 3 |
| 4 | 5 | 6 |
‾‾‾‾‾‾
1 = Reset 2 = SCK 3 = MISO
4 = GND 5 = MOSI 6 = 5V

Shield Bezeichnung(ISP Stecker) Atmega328 Pin Arduino Bezeichnung
5V VCC 5V
GND GND GND
Reset 1 Reset
SCK 19 13
MISO 18 12
MOSI 17 11
10 16 10

combie:
Die beiden beschreiben des isp des Uno.

Ich habe es aber so verstanden, dass du ein Ethernet Shield an einen “Standalone” atmega328 anschießen möchtest.

Jo so ist es auch nur brauche ich ja das Pinout des ISP Steckers um zu wissen wo auf den sechs Pins SCK, MISO, usw liegen., um es auf das Shield zu übertragen so wie weiter oben empfohlen wurde.

audacity363:

combie: Die beiden beschreiben des isp des Uno.

Ich habe es aber so verstanden, dass du ein Ethernet Shield an einen "Standalone" atmega328 anschießen möchtest.

Jo so ist es auch nur brauche ich ja das Pinout des ISP Steckers um zu wissen wo auf den sechs Pins SCK, MISO, usw liegen., um es auf das Shield zu übertragen so wie weiter oben empfohlen wurde.

Dann vergiss alles, was ich oben geschrieben habe! Ich habe irgendwie gelesen, dass Du mit einem Arduino MEGA verkabeln möchtest, ohne ein Shield zu stecken. Aber das möchtest Du ja gar nicht. Mein Fehler. Ich hätte wohl mehr das Buzzword "Atmega328" im Text benötigt um zu erkennen, was Du tatsächlich vorhast. Da Du nur "ATMega" geschrieben hast, bin ich von einem MEGA2560 ausgegagen, der verkabelt werden soll und dabei Probleme macht.

jurs: Mein Fehler. Ich hätte wohl mehr das Buzzword "Atmega328" im Text benötigt um zu erkennen, was Du tatsächlich vorhast. Da Du nur "ATMega" geschrieben hast, bin ich von einem MEGA2560 ausgegagen, der verkabelt werden soll und dabei Probleme macht.

Jo sry das war dann mein Fehler. Wurde oben geändert.

Hast du trotzdem eine Idee woran es liegen könnte?

audacity363:
Hast du trotzdem eine Idee woran es liegen könnte?

Wenn das Shield an einem Atmega328 auf einem UNO funktioniert und an Deiner Schaltung nicht, dürfte es an Deiner Schaltung liegen.

Beschreibe mal:
Was für eine Stromversorgung hast Du für den Controller und das Shield?
Hast Du einen Schwingquarz am Controller und die Fuses wie beim UNO gesetzt?
Hast Du an jedem Pin mit Betriebsspannung einen 100 nF Kondensator gegen GND geschaltet?
Hast Du Reset vom Atmega328 mit dem Reset-Pin vom Shield verbunden?

jurs:

audacity363: Hast du trotzdem eine Idee woran es liegen könnte?

Beschreibe mal: 1.) Was für eine Stromversorgung hast Du für den Controller und das Shield? 2.) Hast Du einen Schwingquarz am Controller und die Fuses wie beim UNO gesetzt? 3.) Hast Du an jedem Pin mit Betriebsspannung einen 100 nF Kondensator gegen GND geschaltet? 4.) Hast Du Reset vom Atmega328 mit dem Reset-Pin vom Shield verbunden?

1.) Für die ganze Schaltung (mit RGB Stripe) 12 Volt 5 A. Richtung Arduino und Shield dann mit einem voltage regulator auf 5V gezogen.

2.) Jop 3.) Jop 4.) Jop

Der Atmega328 alleine funktioniert auch. Wenn ich direkt aus dem Sketch heraus den RGB Stripe anspreche funktioniert auch alles. Er hat nur Probleme Richtung Shield.

hi,

nur eine vermutung, aber laß mal reset weg.

gruß stefan

audacity363: Er hat nur Probleme Richtung Shield.

Wonach hast Du verkabelt?

Das von Dir oben gepostete Pinout des ICSP-Headers ist falsch, den ICSP-Header würde ich so lieber nicht verkabeln~~, sondern die Leitungen vom Atmega328 zu den numerisch gekennzeichneten Pins des Shields verlegen.~~

Oder erstmal ein korrektes Pinout des ICSP-Anschlusses besorgen.

hi,

wenn er so wie beschrieben:

Shield Bezeichnung Atmega328 Pin Arduino Bezeichnung
5V VCC 5V
GND GND GND
13 19 13
12 18 12
11 17 11
10 16 10

und den reset wegläßt, sollte es gehen.
ich hab’s zwar nicht mit einem ethernet-shield, sondern mit dem kleinen roten blauen platinchen von iteadstudio, das hier schon einige male beschrieben wurde, gemacht. aber da durfte reset nicht verbunden sein.

gruß stefan

@jurs + Eisebaer

Liebe Jungs und/oder Mädels…

Ich muss euch die unangenehme Nachricht überbringen, dass die Pins 13, 12 und 11 des Ethernet Shield NICHT zum W5100 gehen.

Begründung siehe weiter Oben.
Beweise finden sich in den frei verfügbaren Schaltplänen des Shields.

combie:
Ich muss euch die unangenehme Nachricht überbringen, dass die Pins 13, 12 und 11 des Ethernet Shield NICHT zum W5100 gehen.

Stimmt, Du hast Recht!

Seit Einführung der MEGA-Boards wurden die Ethernet-Shields so in der Konstruktion geändert, dass sie die SPI-Signale über den ICSP-Header zwischen Board und Shield übertragen werden. Ich habe in meinem obigen Posting daher mal Teile gestrichen.

Als Nachtrag hier dann noch das Pinout von ISP-Header, UNO-Board und Atmega328:

ISP-Header auf dem Arduino-Board in der Draufsicht:
-------------
| 2 | 4 | 6 |
| 1 | 3 | 5 |
-------------
Pin-1 ist speziell gekennzeichnet, z.B. mit '1' oder einem Punkt oder Dreieck

ISP       UNO   Mega328
1 MISO    12    18
2 VCC     5V	7 (20)
3 SCK     13    19
4 MOSI    11    17
5 Reset   Reset 1
6 GND     GND   8 (22)

Außerdem verbinden:
  SS      10    16

ISP-Header unter dem Ethernet-Shield in der Draufsicht von der Buchsenseite:
-------------
| 6 | 4 | 2 |  --> zu den Headern der digitalen Pins 0, 1, 2, 3, etc 
| 5 | 3 | 1 |
-------------

(Alle Angaben nach bestem Wissen, aber ohne Gewähr!)

hi,

und wenn's nicht geht, laß halt versuchsweise den reset weg. bei meinem pcb mit W5100 durfte der nicht verbunden sein.

gruß stefan