Forum: Mikrocontroller und Digitale Elektronik Mehrere Shields auf einem Arduino Uno R3: Verständnisfrage


von Eric A. (cybered)


Lesenswert?

Hallo zusammen,
ich würde gerne 2 Shilds auf einem Arduino Uno R3 betrieben.
Einmal das Ethernetshield DFRobot DFR0850 und dann das LCDShield DFRobot 
LCD12864.

Laut den jeweiligen Beispielprogrammen werden folgende Pins genutzt:

Ethernet shield attached to pins 10, 11, 12, 13
Display SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8

Mir ist jetzt nicht ganz klar ob man überhaupt 2 Shields aufeinander 
stapeln kann, da ja zumindest 3 Anschlüsse (13, 11, 10) von beiden 
Shields verwendet werden?

Könntet ihr mir da bitte weiterhelfen?

Vielen Dank im Vorraus,
Eric

von Sebastian R. (sebastian_r569)


Lesenswert?

Eric A. schrieb:
> Mir ist jetzt nicht ganz klar ob man überhaupt 2 Shields aufeinander
> stapeln kann, da ja zumindest 3 Anschlüsse (13, 11, 10) von beiden
> Shields verwendet werden?

Eigentlich ist das möglich, da SPI mehr als einen Slave am Bus 
unterstützt.

11, 12 und 13 (MOSI, MISO, SCLK) dürfen also doppelt verwendet werden. 
Nur jedes Shield bzw. jeder SPI-Slave braucht mindestens seinen eigenen 
CS-Anschluss (Chip Select), damit der Arduino wählen kann, mit welchem 
Slave er spricht.

Da leider beide Shields D10 als Chip Select nutzen, ist ohne eine 
Modifikation der Hardware ein direkter paralleler Betrieb nicht möglich.

Du müsstest bei einem der Shields die Leiterbahn zu D10 auftrennen und 
zu einem anderen, freien Pin verdrahten.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Ethernet wird sinnvoller Weise Interrupts verwenden. Da das SPI nicht 
reentrant ist, braucht man also 2 SPI.
Beim ATmega328 kann man die UART als 2. SPI-Master benutzen. Die ist 
dann auch einen Zacken schneller, da mit Sendepuffer.
Oder einen ATmega328PB mit 2 SPI und 2 UARTS.

von Jens B. (dasjens)


Lesenswert?

Da solltest Du selbst drauf kommen.
Was ist CS? Kann das funktionieren bei 2 unterschiedlichen SPI 
Endpunkten?

von Karl B. (gustav)


Lesenswert?

Jens B. schrieb:
> Was ist CS
Kartoffelschip Selektor

https://www.derwesten.de/panorama/vermischtes/mcdonalds-getraenke-becher-rfid-chips-verpackung-mehrweg-id300580098.html

Da hättest Du von selbst drauf kommen können.

ciao
gustav

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Die SD Fassung auf dem Ethernet Shield verwendet Pin 4 als /CS

Es sind also min. 4 SPI Buspartner.
1 Master, 3 Slave.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Eric A. schrieb:
> Könntet ihr mir da bitte weiterhelfen?

Also ein Shield könnte man sich evtl. sparen wenn man einen
Aruino Uno mit integrierten Ethernet-Controller verwendet.

Den hier:

https://www.ebay.de/itm/186450148015

Hängt natürlich davon ab was damit gemacht werden soll.

Wenn man sich von dem Zwang löst alles einfach aufeinander
stecken zu müssen dann kann man den W5500 auch losgelöst
mit der gleichen "Lib" betreiben:

https://www.ebay.de/itm/334512372979

von Wastl (hartundweichware)


Lesenswert?

Wastl schrieb:
> Den hier:
>
> https://www.ebay.de/itm/186450148015

Gibt es bei Amaz. günstiger.

von Sebastian R. (sebastian_r569)


Lesenswert?

Wastl schrieb:
> Also ein Shield könnte man sich evtl. sparen wenn man einen
> Aruino Uno mit integrierten Ethernet-Controller verwendet.
>
> Den hier:
>
> https://www.ebay.de/itm/186450148015

Das Problem bleibt bestehen: D10 ist der Chip Select bei diesem Board.

von Falk B. (falk)


Lesenswert?

Sebastian R. schrieb:
> Das Problem bleibt bestehen: D10 ist der Chip Select bei diesem Board.

Ja und? Das ist in 5min geändert!

von Sebastian R. (sebastian_r569)


Lesenswert?

Falk B. schrieb:
> Ja und? Das ist in 5min geändert!

An der Stelle waren wir vor 13 Stunden schon.

von Falk B. (falk)


Lesenswert?

Sebastian R. schrieb:
> An der Stelle waren wir vor 13 Stunden schon.

Ja was gibt es dann noch zu reden? Man kann die beiden "Shields" 
vermutlich parallel benutzen. Es bleib die Frage, ob die Software da 
mitmacht, wenn zwei Komponenten auf das SPI zugreifen wollen. Kann sein, 
muss nicht. Probieren geht über studieren.

von Eric A. (cybered)


Lesenswert?

Danke für die vielen Antworten.
Ich werde mal schauen das ich den CS auf einen anderen freien Pin lege.
ggf. könnte man ja zeitlich dafür Sorgen dass nicht gleichzeitig auf 
Ethernet und das Display zugegriffen wird.
Vielleicht genügt da einfach ein Delay(1000) ;-)

Ich werde berichten...

von Peter D. (peda)


Lesenswert?

Eric A. schrieb:
> Vielleicht genügt da einfach ein Delay(1000) ;-)

Nö.
Wenn das Ethernet SPI und Interrupts benutzt, muß man dafür sorgen, daß 
dieser Interrupt immer gesperrt ist bei allen anderen Zugriffen auf 
das selbe SPI.

von Cyblord -. (cyblord)


Lesenswert?

Eric A. schrieb:
> Hallo zusammen,
> ich würde gerne 2 Shilds auf einem Arduino Uno R3 betrieben.
> Einmal das Ethernetshield DFRobot DFR0850 und dann das LCDShield DFRobot
> LCD12864.
>
> Laut den jeweiligen Beispielprogrammen werden folgende Pins genutzt:
>
> Ethernet shield attached to pins 10, 11, 12, 13
> Display SPI Com: SCK = 13, MOSI = 11, CS = 10, CD = 9, RST = 8
>
> Mir ist jetzt nicht ganz klar ob man überhaupt 2 Shields aufeinander
> stapeln kann, da ja zumindest 3 Anschlüsse (13, 11, 10) von beiden
> Shields verwendet werden?
>
> Könntet ihr mir da bitte weiterhelfen?
>
> Vielen Dank im Vorraus,
> Eric

"Elektronik ist kein Lego"

Schreib das jetzt 100 mal!

von Eric A. (cybered)


Lesenswert?

Cyblord -. schrieb:
>
> "Elektronik ist kein Lego"
>
> Schreib das jetzt 100 mal!

Naja, wenn man bedenkt das die Arduino Plattform genau dafür gedacht 
war, einen einfachen Einstieg in das Thema 
Mikrocontroller/Programmierung zu ermöglichen...

(Auszug aus dem Wiki-Artikel: "Die Entwicklungsumgebung basiert auf 
Processing und soll auch technisch weniger Versierten den Zugang zur 
Programmierung und zu Mikrocontrollern erleichtern")

ist es doch schon "ärgerlich" das man nicht mehrere Shields (mit 
unterschiedlicher Funktionalität) vom gleichen Hersteller miteinander 
kombinieren kann ohne sie modifizieren zu müssen.

Aber ja, "Selbst ist der Mann bzw. die Frau"...

von Frank O. (frank_o)


Lesenswert?

Peter D. schrieb:
> reentrant

Ich lerne hier noch Sachen, auf meine alten Tage.
Noch nie gehört. Musste ich erstmal nachlesen.

von Cyblord -. (cyblord)


Lesenswert?

Eric A. schrieb:
> Naja, wenn man bedenkt das die Arduino Plattform genau dafür gedacht
> war

Gedacht war. naja. Deshalb sollte man das Denken den Pferden überlassen 
(wegen der größeren Köpfe).

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Der W5500 hat zwar Puffer und Protokollschrunz schon intern. Trotzdem 
wäre es schön, wenn man alles per Interrupt im Hintergrund abhandeln 
könnte und nicht in der Mainloop pollen müßte. Daher sollte er getrennt 
auf ein 2. SPI geroutet werden können. Vorzugsweise auf eine UART mit 
Puffer, d.h. 16 Bit je Interrupt.

von Karl B. (gustav)


Lesenswert?

Frank O. schrieb:
> Peter D. schrieb:
>> reentrant
Gabs früher schon:
In simpelster Form: Monoflop SN74122 zum Bleistift.
Bevor Aktion durch- und zu Ende geführt wurde, kann Vorgang erneut 
gestartet werden.

ciao
gustav

von Wastl (hartundweichware)


Lesenswert?

Peter D. schrieb:
> wäre es schön, wenn man alles per Interrupt im Hintergrund abhandeln
> könnte und nicht in der Mainloop pollen müßte.

Das wäre nicht nur schön sondern das ist schön, und wie
auf diversen Bildern unschwer zu erkennen ist gibt es am
Anschlusstecker einen INT-Pin der genau für Interrupts
vorgesehen ist.

von Peter D. (peda)


Lesenswert?

Wastl schrieb:
> wie
> auf diversen Bildern unschwer zu erkennen ist gibt es am
> Anschlusstecker einen INT-Pin der genau für Interrupts
> vorgesehen ist.

Nur ist das erst 1/4 der Miete. Wenn das selbe SPI auch von anderen 
Shields oder der SD-Karte benutzt wird, wird das schnell recht 
kompliziert.
Man darf ja nicht nur den einzelnen Byte SPI-Zugriff atomar kapseln, 
sondern muß es für das komplette Paket von /CS=0 bis /CS=1 des 
jeweiligen Slaves.
Und der Ethernet-Interrupt rechnet nicht damit, daß ihm jemand 
dazwischen grätscht. Er will was gutes tun und gibt die Rechenzeit bis 
zum nächsten SPI-Byte frei und schwupps ist das SPI vom Main geklaut. Er 
muß also in seinem Interrupt hocken bleiben und das SPI-Ready pollen.

von Falk B. (falk)


Lesenswert?

Wastl schrieb:
>> wäre es schön, wenn man alles per Interrupt im Hintergrund abhandeln
>> könnte und nicht in der Mainloop pollen müßte.
>
> Das wäre nicht nur schön sondern das ist schön, und wie
> auf diversen Bildern unschwer zu erkennen ist gibt es am
> Anschlusstecker einen INT-Pin der genau für Interrupts
> vorgesehen ist.

Jain. Ich habe auch schon Software gesehen, die den Interrupt per 
Software abfragt.

von Wastl (hartundweichware)


Lesenswert?

Falk B. schrieb:
> Jain. Ich habe auch schon Software gesehen, die den Interrupt per
> Software abfragt.

Das mag durchaus sein, bei der Arduino "Lib" sogar wahrscheinlich.

Aber ich habe ja nur darauf hingewiesen dass schaltungstechnisch
der Interrupt-Machanismus vorhanden ist und damit genutzt werden
kann.

Also: wer will, der kann, es gibt keine Ausrede ...

von Falk B. (falk)


Lesenswert?

Peter D. schrieb:
> Nur ist das erst 1/4 der Miete. Wenn das selbe SPI auch von anderen
> Shields oder der SD-Karte benutzt wird, wird das schnell recht
> kompliziert.
> Man darf ja nicht nur den einzelnen Byte SPI-Zugriff atomar kapseln,
> sondern muß es für das komplette Paket von /CS=0 bis /CS=1 des
> jeweiligen Slaves.

Anstatt ewig und drei Tage zu schwadronieren KÖNNTE man ja mal die 
Software anschauen, oder?

Das ist das Board

https://www.dfrobot.com/product-2370.html

Das ist kompatibel mit dem Original Arduino-Shield

https://docs.arduino.cc/hardware/ethernet-shield-rev2/

Dessen Software liegt hier

https://github.com/arduino-libraries/Ethernet

Und wenn man sich das alles anschaut, sieht man, daß dort KEINERLEI 
Interrupts benutzt werden! Alles läuft über die Standardmethoden der 
SPI-Klasse. Damit gibt es keine Probleme bei der parallelen Nutzung von 
Ethernet, SD-Karte und LCD! Schoking!

Peter, du solltest im Bundestag arbeiten, dort suchen sie Leute wie 
dich, die viel über eingebildete Probleme reden und sich selten mit der 
Realität beschäftigen.

von Peter D. (peda)


Lesenswert?

Falk B. schrieb:
> Dessen Software liegt hier

Ich bin kein Arduino Experte und weiß daher nicht, wo zu jedem Shield 
die dazu passende Lib steht. Ich weiß nichtmal, ob es zu jedem IC nur 
eine Shieldvariante gibt oder mehrere.

Falk B. schrieb:
> Peter, du solltest im Bundestag arbeiten, dort suchen sie Leute wie
> dich, die viel über eingebildete Probleme reden

Entschuldige bitte, daß ich Probleme so betrachte, wie ich sie lösen 
würde. Natürlich muß niemand Interrupts benutzen.
Ich benutze sehr gerne Interrupts für Interfaces, dann können die im 
Hintergrund arbeiten, ohne die Mainloop lange blockieren zu müssen.

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

>Ich benutze sehr gerne Interrupts für Interfaces, dann können die im
>Hintergrund arbeiten, ohne die Ich benutze sehr gerne Interrupts für Interfaces, 
dann können die im Hintergrund arbeiten, ohne die Mainloop lange blockieren zu 
müssen. zu müssen.

Und was machen die 'im Hintergrund' außer die Mainloop  blockieren?

MfG Spess

von Peter D. (peda)


Lesenswert?

Spess53 .. schrieb:
> Und was machen die 'im Hintergrund' außer die Mainloop  blockieren?

Guter Hinweis, ich meinte natürlich das Gegenteil. Der Interrupt kann 
Pakete schnellst möglichst absenden, bzw. verliert keine Daten 
(Überlauf).
Nichts ist unangenehmer, als der Verlust der Synchronisation.

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Lesenswert?

Eric A. schrieb:
> Vielleicht genügt da einfach ein Delay(1000) ;-)

Grober Unfug. Zwei Geräte auf dem selben CE sind nicht zulässig, da gibt 
es nichts zu diskutieren.

Cyblord -. schrieb:
> "Elektronik ist kein Lego"
> Schreib das jetzt 100 mal!
https://www.ranzey.com/generators/bart/index.html

Peter D. schrieb:
> Wenn das Ethernet SPI und Interrupts benutzt, muß man dafür sorgen, daß
> dieser Interrupt immer gesperrt ist bei allen anderen Zugriffen auf
> das selbe SPI.

Wenn man in Arduino die Interrupts sperrt, laufen diverse Dinge nicht 
mehr.

Eric A. schrieb:
> Naja, wenn man bedenkt das die Arduino Plattform genau dafür gedacht
> war, einen einfachen Einstieg in das Thema
> Mikrocontroller/Programmierung zu ermöglichen...

.. ist die Umgebung trotzdem an elektrotechnische Grundlagen gebunden.

Peter D. schrieb:
> Der W5500 hat zwar Puffer und Protokollschrunz schon intern.

IP wird mit dem bisschen Speicher des Nano eh spaßig werden. Es kommen 
noch weitere Dinge wie SD-Karte dazu, ich sehe schwarz.

Falk B. schrieb:
> Dessen Software liegt hier
> https://github.com/arduino-libraries/Ethernet
> Und wenn man sich das alles anschaut, sieht man, daß dort KEINERLEI
> Interrupts benutzt werden!
>
> Peter, du solltest im Bundestag arbeiten, dort suchen sie Leute wie
> dich, die viel über eingebildete Probleme reden und sich selten mit der
> Realität beschäftigen.

+1 !

Peter D. schrieb:
> Ich bin kein Arduino Experte und weiß daher nicht,

Dann unterlasse doch einfach Deine klugen 'Ratschläge'.

von Peter D. (peda)


Lesenswert?

Manfred P. schrieb:
> Dann unterlasse doch einfach Deine klugen 'Ratschläge'.

Tut mir leid, ich wußte nicht, daß Libs unter Arduino als von Gott 
gegeben und unantastbar zu gelten haben. Ich habe jedenfalls keine 
Angst, Interrupts zu benutzen.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Peter D. schrieb:
> als von Gott gegeben
Nix Gott!
An der Stelle.
Auch du nicht.

Natürlich darfst du beleidigt sein, dich fühlen, wenn deine Interrupt 
Nebelkerzen nicht ankommen.

Peter D. schrieb:
> Ich bin kein Arduino Experte und weiß daher nicht, wo zu jedem Shield
> die dazu passende Lib steht. Ich weiß nichtmal, ob es zu jedem IC nur
> eine Shieldvariante gibt oder mehrere.
Hmmm...

Etwas nicht zu wissen, ist nicht schlimm.
Übrigens:
Das könntest du ändern.

von Manfred P. (pruckelfred)


Lesenswert?

Peter D. schrieb:
> Manfred P. schrieb:
>> Dann unterlasse doch einfach Deine klugen 'Ratschläge'.
> Tut mir leid, ich wußte nicht, ...

Schön sinnentstellend gequotet.

Manfred P. schrieb:
> Peter D. schrieb:
>> Ich bin kein Arduino Experte und weiß daher nicht,

Kein Experte, weiß daher nicht - also nochmal:
Dann unterlasse Deine klugen 'Ratschläge'.

Beitrag #7865057 wurde von einem Moderator gelöscht.
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.