Mehrere Shields auf einem Arduino Uno R3: Verständnisfrage

OP #7769766
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

#7769769
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.

#7769772
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.

#7770163
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

OP #7770305
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...

#7770327
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!

OP #7770330
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"...

#7770338
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.

#7770354
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.

#7770423
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.

#7770440
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.

#7770513
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.

#7770528
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

#7770790
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'.

(Firma: Gast) #7771792
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.

Beitrag #7865057 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren