Ich arbeite an einem Projekt wo ich einen GPS Tracker mit einer Wetterstation verbinde. Genauer gesagt ich füge Wetterfunktionen wie Temp., Feuchtigkeit, Helligkeit und ein Webserver zum Projekt von Jeremy Blum's GPS Tracker hinzu (Tutorial 15 for Arduino: GPS Tracking – JeremyBlum.com).
Nun mein Problem ist, das ich es nicht hinkriege das Ethernet Modul und den GPS Tracker gleichzeitig zum laufen zu bringen. Ich habe das Gefühl sie "beissen" sich.
Für das GPS Modul verwende ich die TinyGPS Library, für das Ethernetmodul die Ethercard.h Library.
Das Ethernet Modul schliesse ich an die Pins 50-53 an (SO, SI,SCK,CS).
Das GPS Modul ist an den PINS 14-21 angeschlossen.
Nun sehrwarscheinlich der Hacken an der ganzen Sache. Das GPS Tracking wird auf eine SD Karte gespeichert, das SD-Modul ist an der ICSP Schnittstelle angeschlossen. Ist die ICSP Schnittstelle nicht mit den Pins 50-53 verbunden? läuft das Ethernet Modul nicht auch über diese Schnittstelle?
Es ist so wenn ich alles unabhängig voneinander Teste es einwandfrei läuft, doch wenn ich den Webserver und das GPS Tracking inkl das speichern auf die SD Karte möchte, ich keine verbindung zum Webserver kriege.
Konnte ich es einigermasen gut beschreiben das PRoblem? xD
Kann mir einer helfen? Was könnte das Problem sein?
WEnn gewünscht kann ich den Code oder Auschnitte davon posten.
Vielen Dank!
Edit:
Das Problem wird wohl an der Nutzung der SPI und ICSP Pins liegen!? Können die mehrfach benutzt werden?
Der ICSP scheint ja mit den SPI Pins 50-53 verbunden zu sein. Ich hab das SD-Modul auf den ICSP Sockel gesteckt und das Ethernet-Modul an den SPI Pins 50-53. Ist das die Kolision? Gibt es eine Lösung dafür?
Chip Select und Slave Select ist das selbe oder? Ist auf meinen zwei Devices verschieden angeschrieben.
Mein Ethernet Modul hat SS auf PIN 53 das SD Modul auf PIN 43, der Rest müsste ja identish verbunden sein da sie auf den ICSP Sockel und PIN 50-53 gesteckt werden.
Als SS kann jeder beliebige DigitalEingang verwendet werden oder?
Könnte es andere Gründe haben wieso der Webserver nicht aufgestartet wird? RAM Overflow? Ein Timing Problem? Sollten ja nicht beide SS gleichzeitig HIGH sein?
Ich hänge mal mein LOOP und Setup Sketch an, vielleicht kannst du oder sonst einer was erkennen.
Das merkwürdige ist, das mir der Sketch zurückmeldet der Ethernet Controller sein Connected
Vielen lieben Dank für die Hilfe!
void setup()
{
//Serial interfaces
Serial.begin(115200);
Serial3.begin(4800);
if (ether.begin(sizeof Ethernet::buffer, mymac, 53) == 0)
{
Serial.println(F("Failed to access Ethernet controller"));
ether.staticSetup(myip);
}
else
{
Serial.println(F("Ethernet controller is connected"));
}
// LCD und DHT Sensor initialisieren
lcd.begin(20,4);
dht.begin();
//Outputs deklarieren
pinMode(CS, OUTPUT); //Chip Select Pin for the SD Card
pinMode(LED, OUTPUT); //LED Indicator
pinMode(ledPin, OUTPUT);
//Connect to the SD Card
if(!SD.begin(CS))
{
Serial.println(F("Card Failure"));
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Serial.println();
Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum"));
Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail"));
Serial.println(F("--------------------------------------------------------------------------------------------------------------------------------------"));
}
void loop()
{
bool newdata = false;
unsigned long start = millis();
// Alle Sekunden Update printen (GPS)
while (millis() - start < 1000)
{
if (feedgps())
newdata = true;
}
gpsdump(gps);
//Die neusten Informationen auf die SD schreiben
dataString = SD_date_time + "," + SD_lat + "," + SD_lon;
if(SD_date_time != "invalid")
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
//CSV/TXT File öffnen
File dataFile = SD.open("LOG.csv", FILE_WRITE);
if (dataFile)
{
dataFile.println(dataString);
Serial.println(dataString);
dataFile.close();
}
else
{
Serial.println(F("\nLog File kann nicht geöffnet werden!"));
}
// LCD und ETHERNET
////////////////////
//Timer = Timer+1;
// if(Timer==1)
//{
ReadDHT11();
// Kursor auf Zeile 0 Spalte 0 setzen (0,0):
lcd.setCursor(0, 0);
lcd.print(F("Temp: "));
lcd.print(t);
lcd.print(F("C"));
// Kursor auf Zeile 1 Spalte 0 setzen (0,1):
lcd.setCursor(0,1);
lcd.print(F("Feuchtigkeit: "));
lcd.print(h);
lcd.print(F("%"));
// Helligkeit einlesen
int val;
val = analogRead(potPin);
percent = map(val,0,1023,0,100);
// Kursor auf dritte Zeile setzen
lcd.setCursor(0,2);
// Printausgabe der Helligkeit
lcd.print(F("Helligkeit: "));
lcd.print(100 - percent);
lcd.print(F("%"));
delay(200);
if(Animation==0)
{
lcd.print(F(" *"));
}
if(Animation==1)
{
lcd.print(F(" +"));
}
Animation = Animation + 1;
if(Animation==2)
{
Animation=0;
}
//if(Timer==1100)
//{
//Timer=0;
//}
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (pos) // überprüfe ob gültige TCP daten empfangen werden (request)
{
ReadDHT11();
ether.httpServerReply(homePage()); // sende webpage Daten
}
}
Als SS kann jeder beliebige DigitalEingang verwendet werden oder?
Ja, wenn du Ausgang meinst. ( Wird aber durch die Library dann so gesetzt )
Zusätzlich hat der Arduino selber einen SS Pin: (Beim 2560 ist das Pin 53) Wenn dies auf Input stünde, ist er ein SPI - Slave.
Als Output ( dann ist es wahlweise das CS-Signal für ein anderes Device, hier dein Ethernet Modul ) ist der Arduino der SPI Master.
Hallo
Habe ähnliches Problem
28j60 und SD card
Sobald beide am Bus ist Ethernet aus SD Card läuft aber.
Unterschied SD läuft mit 3.3V 28j60 mit 5V
Die CS sind richtig gesetz da ja einzeln gleich verdrahtet.
Nun hab ich ja auch das Ethernet Shield mit SD Card integriert. Da geht alles problemlos damit.
Das hat mich dann doch nicht in Ruhe gelassen und ich habe nach dem Schaltplan dieser Kombination gesucht.
Siehe da in diesem wird für die SD Card der SPI Bus über einen Spannungteiler mit 1k zu 2k2 für alle Signale die als Ausgang vom Arduino kommen geführt. 1k am Arduino 2k2 gegen Masse. Knotenpunkt wird mit SD Card verbunden.
So nun meine these:
Alle shield die mit 3.3V am SPI laufen ziehen die Pegel für die 5V shield soweit runter das diese nicht mehr richtig arbeiten können.
Es muss eine Pegelanpassung her für 3.3V Komponenten.
Warum kaperst du einen 2,5 Jahre alten Thread mit einem komplett anderen Problem ?
Lege bitte einen eigenen, neuen Thread mit deinem Problem an.
So weiß ja später keiner mehr, was zusammen gehört.