Hallo zusammen,
habe ein Problem an dem ich mich schon den ganzen Tag aufhalte, habe mich schon durchs halbe Internet gegooglelt aber nichts hilft...
Und zwar versuche ich zur Zeit meine ersten Schritte mit einem Arduino als Webserver.
Dazu benutze ich das Ethernet-Shield W5100 von AZDelivery mit dem zugehörigen Arduino Uno des gleichen Herstellers.
Dann für den Anfang nutze ich den Beispielcode aus der Rubrik SD mit dem Namen CardInfo.
Leider zeigt der serielle Monitor seit heute morgen nur immer wieder, dass die Initialisierung fehlgeschlagen ist. Ich habe bereits mehrere (davon eine brandneue) MikroSD Karten getestet, außerdem habe ich das Ethernetshielt auch auf meinem Mega ausprobiert, keine Initialisierung der SD Karte möglich.
Eine ganz simple Webseite ohne SD Karte hat geklappt. Kann mir da irgendwer weiterhelfen?
Bin am verzweifeln...
Vielen Dank für eure Hilfe
Zeige doch einfach mal den Sketch, den du verwendest.
Poste den in Code-Tags, verwende dazu die Schaltfläche </> oben links im Editorfenster.
Oder setze [ code ] davor und [/ code ] dahinter, ohne die Leerzeichen.
/*
SD card test
This example shows how use the utility libraries on which the'
SD library is based in order to get info about your SD card.
Very useful for testing a card when you're not sure whether its working or not.
The circuit:
SD card attached to SPI bus as follows:
** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
** CS - depends on your SD card shield or module.
Pin 4 used here for consistency with other Arduino examples
created 28 Mar 2011
by Limor Fried
modified 9 Apr 2012
by Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>
// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;
// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 4;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.print("\nInitializing SD card...");
// we'll use the initialization code from the utility libraries
// since we're just testing if the card is working!
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("initialization failed. Things to check:");
Serial.println("* is a card inserted?");
Serial.println("* is your wiring correct?");
Serial.println("* did you change the chipSelect pin to match your shield or module?");
while (1);
} else {
Serial.println("Wiring is correct and a card is present.");
}
// print the type of card
Serial.println();
Serial.print("Card type: ");
switch (card.type()) {
case SD_CARD_TYPE_SD1:
Serial.println("SD1");
break;
case SD_CARD_TYPE_SD2:
Serial.println("SD2");
break;
case SD_CARD_TYPE_SDHC:
Serial.println("SDHC");
break;
default:
Serial.println("Unknown");
}
// Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
if (!volume.init(card)) {
Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
while (1);
}
Serial.print("Clusters: ");
Serial.println(volume.clusterCount());
Serial.print("Blocks x Cluster: ");
Serial.println(volume.blocksPerCluster());
Serial.print("Total Blocks: ");
Serial.println(volume.blocksPerCluster() * volume.clusterCount());
Serial.println();
// print the type and size of the first FAT-type volume
uint32_t volumesize;
Serial.print("Volume type is: FAT");
Serial.println(volume.fatType(), DEC);
volumesize = volume.blocksPerCluster(); // clusters are collections of blocks
volumesize *= volume.clusterCount(); // we'll have a lot of clusters
volumesize /= 2; // SD card blocks are always 512 bytes (2 blocks are 1KB)
Serial.print("Volume size (Kb): ");
Serial.println(volumesize);
Serial.print("Volume size (Mb): ");
volumesize /= 1024;
Serial.println(volumesize);
Serial.print("Volume size (Gb): ");
Serial.println((float)volumesize / 1024.0);
Serial.println("\nFiles found on the card (name, date and size in bytes): ");
root.openRoot(volume);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);
}
void loop(void) {
}
@Peter-CAD-HST ich habe chipselect angepasst auf arduino uno, wo es die 4 sein sollte
Da sehe ich nicht, dass du dem Ethernet Teil auf dem Shield sagst, dass es sich aus SPI der Kommunikation raushalten soll.
Auch schaltet der AVR SPI "Baustein" automatisch in den Slavemode, wenn der Hardware SS nicht auf OUTPUT, oder High ist.
Das steht geschrieben, im Datenblatt und der Arduino SPI Doku.
Tipp:
Dass willst du nicht, da dann deine SD-Karten Kommunikation versagt!
void setup()
{
pinMode(SS,OUTPUT); // verhindern dass der SlaveMode erzwungen werden kann
digitalWrite(SS,HIGH); // verhindern, dass der Ethernet Chip dazwischen quatscht
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Beim UNO entspricht SS dem Pin 10, welcher vom Ethernetshield als /CS genutzt wird.
SS - Slave Select
CS - Chip Select
Ich habe die beiden Beispielcodes CardInfo und Webserver auf dem W5100 Ethernet-Shield von AZDelivery getestet. Die Webserveranwendung funktioniert.
Nun habe ich ein zweites baugleiches Ethernetshield eines anderen Herstellers verwendet. Die Codes habe ich nicht verändert, auf dem einen funktioniert nun aber die SD Karte und dafür die Webserver-Anwendung nicht mehr. Ich bin echt am Ende mit meinem Latein...
Vielen Dank für eure Hilfe, vielleicht kriegen wir das ja noch hin
PS: das zweite Ethernet-Shield ist auch das W5100 von Paradisetronic...