Forum: Mikrocontroller und Digitale Elektronik Mehrere Shields stappeln


von Samuel (Gast)


Angehängte Dateien:

Lesenswert?

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
}

von Hannes L. (hannes)


Lesenswert?

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... 
;-)

...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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 ;)

von Samuel (Gast)


Lesenswert?

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

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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 ;)

von Samuel (Gast)


Lesenswert?

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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wenns keine Jumper gibt um das Enable Signal von SD Karte oder WLAN 
Modul aufn anderen Pin zu legen -> NEIN!

von Samuel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.