Go Down

Topic: Mehrere Shields aufeinanderstapeln (Stacking) / Pinverschwendung bei Shields (Read 2 times) previous topic - next topic

eldiablo86

Mein Equipment
-   Arduino Uno R3
-   Motor Shield http://www.ladyada.net/make/mshield/
-   Ethernet-Shield von SainSmart (soll mittels LAN2WLAN Extender zu einem Wifi-Shield umfunktioniert werden)
-   US Sensor SRF04
-   Mobiler Roboter auf runder Grundplatte aus Sperrholz
    o   2x 12V DC Getriebemotor von Pollin

Ich habe vor kurzem angefangen,  mich mit dem Arduino zu beschäftigen und habe jetzt als ersten Meilenstein einen einfachen mobilen Roboter gebaut, dessen zwei 12V DC Motoren von einem MotorShield angetrieben und vom UNO R3 gesteuert werden. Als einzigen zusätzlichen Sensor habe ich zur Hindernisserkennung einen Ultraschall-Sensor SRF04 angeschlossen.
Leider belegt das MotorShield sehr viele Pins, wie man aus http://www.robgray.com/temp/Arduino-shield-pins-used.png entnehmen kann. Wieso braucht das MotorShield so viele Pins?  :smiley-roll: Nur die 5 Analog-Pins und Pin 2 sind frei - doch diese werden von mir für teilweise für andere Zwecke gebraucht:
Pin A0 wird von einem Poti belegt, mit dem ich die Maximalgeschwindigkeit regele,
Pin A1 mit einem Poti, das als Trimmer fungiert, damit der Roboter ohne Odometrie halbwegs geradeaus fährt und
A2 und A3 für die Kommunikation mit dem SRF04.
Bleiben noch Pin A4 und Pin 2, die das MotorShield gnädigerweise nicht belegt.

Das stört mich sehr, weil ich nun keine Pins mehr für mehr Sensoren etc. habe. Insbesondere weil ich auch noch ein Wifi-Shield bzw. Ethernet-Shield draufstecken wollte, um den Roboter mit dem PC zu verbinden, sozusagen als nächste Ausbaustufe. Leider habe ich schon in einigen Forumseinträgen gesehen, dass es anscheinend nicht so einfach wird, weil die Shields sich  zu allem Überfluss bei der Pinbelegung in die Quere kommen.

Meine Frage ist nun: Wie bekomme ich zusätzlich zum Motor Shield noch ein Ethernet-Shield aufgesteckt zum Laufen und noch eine ausreichend große Zahl freier Ports für weitere Sensoren und Steueraufgaben? Mehrere Arduinos miteinander zu verbinden, die jeweils ein Shield tragen, halte ich für keine sehr elegante Lösung… Gibt's da nicht einen besseren Weg?

Das führt mich zu einer weiteren sehr wichtigen Frage: Wieso werden nicht alle Shields über I2C angesteuert, dann wären nur zwei Pins belegt und man könnte so viele draufstecken wie man wollte (wenn man von anderen begrenzenden Faktoren absieht und sich auf die Zahl der Pins beschränkt)?! Ich vermute mal, weil man dann jedem Shield einen eigenen MC draufpacken müsste, der es wieder teurer macht?

sth77

Du wunderst dich also eigentlich nur über die belegten Pins des Motorshields. Wenn du aber ein Shield kaufst, dass 4 DC-Motoren separat in ihren Geschwindigkeiten regeln kann, du allerdings nur 2 Motoren hast, so sollte dir jetzt auffallen, dass du beim Einkauf eine schlechte Wahl getroffen hast. ;) Macht nichts, den passenden Motortreiber für zwei Motoren kann man sich auch selbst bauen.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

pylon

Du könntest auch die Pins am Motorshield, die Du nicht benötigst, abzwicken und dann anderweitig verwenden. Auch ein umpatchen könntest Du so machen. Da das Motorshield vom Design her schon das oberste sein muss, entsteht Dir nicht mal ein grosser Nachteil.

Udo Klein

Check out my experiments http://blog.blinkenlight.net

kduin

Schau dir mal das Go-Between Shield an.

Das kannst du unter dein Motor-Shield stecken und somit nur die Pins nutzen, die du wirklich brauchst.
Außerdem kannst du damit Pins auf andere verlegen.

volvodani

Also hier vielleicht noch ein Shield das dein Pin Problem beseitigt
http://macetech.com/store/index.php?main_page=product_info&cPath=4&products_id=23
oder du nutzt den PCF8574 I2C Port Expander. Damit hast du dann über I2C dann weitere I/Os zum nutzten.
Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

eldiablo86

Vielen Dank für die vielen Antworten!  :)

Ich habe mich jetzt entschieden den PortExtender auf jeden Fall schon mal zu besorgen, das ist eine gute Idee!
Und mal schaun ob ich das Go-Between Shield nehme oder einfach unbenutzte Pins wegbiege/abknipse, damit alles zusammenpasst.

Aber ganz nebenbei; ich bleib bei meinem Standpunkt: Wenn einfach alle Shields nur I2C benutzen würden, dann könnte man potentiell dutzende davon aufeinanderstapeln ohne sich über Pinbelegungsprobleme Gedanken machen zu müssen, stattdessen hätte man immernoch fast alle Pins frei.

uwefed


...
Aber ganz nebenbei; ich bleib bei meinem Standpunkt: Wenn einfach alle Shields nur I2C benutzen würden, dann könnte man potentiell dutzende davon aufeinanderstapeln ohne sich über Pinbelegungsprobleme Gedanken machen zu müssen, stattdessen hätte man immernoch fast alle Pins frei.

Jetzt übertreibst Du ein bißchen. I2C ist zwar schön aber nicht die Lösung aller Probleme. Andere Schnittstellen oder DIrektansteuerung haben auch ihre berechtigung.
Grüße Uwe

BerndJM

Quote
Wenn einfach alle Shields nur I2C benutzen würden, dann könnte man

Dann wäre aber jeder Benutzer eines x-beliebigen shields gezwungen sich die I²C-Kommunikation drauf zu schaffen und müßte die Library einbinden.
Das würde doch irgendwie dem "Einfachkeitsprinzip" von Arduino widersprechen ...

Grüßle Bernd
Theoretisch gibt es keinen Unterschied zwischen Theorie und Praxis ...

circuit99


Vielen Dank für die vielen Antworten!  :)


Aber ganz nebenbei; ich bleib bei meinem Standpunkt: Wenn einfach alle Shields nur I2C benutzen würden, dann könnte man potentiell dutzende davon aufeinanderstapeln ohne sich über Pinbelegungsprobleme Gedanken machen zu müssen, stattdessen hätte man immernoch fast alle Pins frei.


Welche Protokolle un damit welche Pins verwendet werden hängt doch von den IC ab, die auf dem Shield verbaut sind. Und für jede aufgaben gibt es nur ein paar IC die man zur Auswahl hat. Und wenn dabei keiner den I2C Bus unterstützt muss man halt ein anderes Protokoll verwenden. Wenn dir die Pinbelegungen nicht gefallen, dann erstell dir doch deine eigene Platine.

Go Up