Ich habe bei meinem Arduino-Projekt folgendes Problem: Auf meinen Arduino UNO habe ich ein GPS-Shield mit SD-Slot draufgesteckt, im Programm werden nun die GPS Daten ausgelesen und auf die SD-Card geschrieben. Sobald ich jedoch ein Wifi-Shield draufpacke, kann nicht mehr auf die SD-Card zugegriffen werden. Das Problem liegt meiner Meinung nach am Pin 10 welcher sowohl vom SD-Slot als auch vom Wifi-Shield als SS genutzt wird. Hardware: - Arduino UNO - LinkSprite GPS-Shield und SD-Slot - LinkSprite Copperhead Wifi Shield V2.0 1. Jumper auf dem Wifi-Shield: f_ss auf W_SS oder f_ss auf D7 (gesetzt) 2. Jumper auch auf dem Wifi-Shield: INTX auf D2 oder INTX auf D8 (gesetzt) Pin-Belegung: 0 -> RX 1 -> TX 2 -> GPS 3 -> GPS 4 -> 5 -> Temperatur-Sensor 6 -> GPS 7 -> Wifi (Jumper) 8 -> Wifi (Jumper) 9 -> Wifi 10 -> SD und Wifi (1. Jumper hat keine Wirkung) 11 -> Wifi 12 -> Wifi 13 -> Wifi Programm: SoftwareSerial GPS = SoftwareSerial(2, 3); void setup() { Serial.begin(9600); // connect to the serial terminal pinMode(6, OUTPUT); // enable GPS GPS.begin(9600); // connect to the GPS at the desired rate pinMode(10, OUTPUT); // enable SD SD.begin(10); // connect to SD }
Samuel schrieb: > Das Problem liegt meiner Meinung nach am Pin > 10 welcher sowohl vom SD-Slot als auch vom Wifi-Shield als SS genutzt > wird. Als SS (Slave select)? Oder als CS bzw. E (Chip select bzw. Enable)? Eine SPI-Schnittstelle ist Bus-tauglich. SS braucht man eigentlich nur bei Multimasterbetrieb. SD-Card und WLAN-Module laufen aber als SPI-Slaves. Wenn jeder seine separate Enable-Leitung erhält, dann sollten diese gleichzeitig am SPI-Bus hängen können. Dass beide Shields dieselbe Leitung für Enable nutzen, hmmm, dazu sage ich lieber nichts... ;-) ...
Tja Failduino mit den Shields ist eben scheisse ;) Deine gepostete Pinbelegung ist nicht brauchbar, verlinke mal ie Module. Wenns wirklich nur die Enables des SPI sind: Durchtrenne vom WLAN Shield die Leiterbahn vom Enable und leg die aufn anderen Pin. Jetzt noch die Library umschreiben, wennse keine defines für sowas hat. Merke: Arduino ist für kleine spielereien gut, wenns ernst wird dann Hardware selber entwerfen ;)
Hab da was gefunden: void setup() { pinMode(4, OUTPUT); // PIN 4 fuer Kommunikation mit SD-Karte pinMode(10, OUTPUT); // PIN 10 fuert Kommunikation mit Ethernet } void loop() { digitalWrite(10, HIGH); // deaktiviere Ethernet digitalWrite(4, LOW); // aktiviere SD-Card digitalWrite(4, HIGH); // deaktiviere SD-Karte digitalWrite(10, LOW); // aktiviere Ethernet } hier noch die links zu den shields: http://www.play-zone.ch/de/elektronik-kit-zubehoer/avr-arduino-freeduino/arduino-shields/linksprite-gps-shield-und-sd-leser.html http://www.play-zone.ch/de/elektronik-kit-zubehoer/avr-arduino-freeduino/arduino-shields/linksprite-copperhead-wifi-shield-v2-0.html
Sehr geil im "Datenblatt" zum GPS Shield is nichmal nen Schaltplan -> kompletter Müll! Beim WLAN ist der SS auf PIn10, warscheinlich auch beim GPS Modul für die SD Karte. Also wirds darauf hinauslaufen wie ich es bereits gesagt habe: Leiterbahn trennen, umklemmen und Lib anpassen. Mit dem Code kann ich jetz nix weiter anfangen ;)
Stimmt genau, wenn ich nur das GPS Shield verwende, kann ich mit SD.begin(10) also Pin10 auf die SD Karte zugreifen. Was ich aber nicht ganz begreife, die beiden Shields sind von der selben Firma und jetzt soll ich da irgendwelche Leiterbahnen trennen und neu verbinden. Da muss es bestimmt eine andere Lösung geben.
Wenns keine Jumper gibt um das Enable Signal von SD Karte oder WLAN Modul aufn anderen Pin zu legen -> NEIN!
Nun, Jumper hat es jeweils zwei auf jedem Shield. GPS Shield mit SD Slot: 1. Jumper MTX -> NC RX -> D3 (gesetzt) MRX -> NC 2. Jumper MRX -> NC TX -> D2 (gesetzt) MTX -> NC WIFI Shield: 1. Jumper (hier könnte die Lösung sein) f_ss -> W_SS (könnte PIN10 damit gemeint sein?) f_ss -> D7 (gesetzt) 2. Jumper INT0 -> D8 (gesetzt) INT0 -> D2 (wird bereits vom GPS verwendet) Ethernet & SD-Karte in einem Sketch: Der Arduino kommuniziert per SPI-Bus(external link) über die ICSP-Header mit dem W5100-Ethernetchip und der SD-Karte. Also über die Pins 11, 12 und 13 digital beim Standard-Arduino bzw. 50, 51 und 53 beim Mega. Wird in einem Programm sowohl der Ethernet-Chip als auch die SD-Karte genutzt, muß dies entsprechend berücksichtigt werden. Der Ethernetchip wird über D10, die SD-Karte über den Pin D4 angesteuert. Es gilt also: digitalWrite(10, LOW); // Ethernet aktiviert digitalWrite(10, HIGH); // Ethernet aus digitalWrite(4, LOW); // SD-Karte an digitalWrite(4, HIGH); // SD-Karte aus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.