[gelöst] SPI-Kommunikation mit Ethernet + SD + TFT

Werte Community,
ich habe ein Problem mit der SPI-Kommunikation. :confused:

Ich nutze folgende Ausstattung:

  • Arduino MEGA
  • Ethernet-Shield mit SD (China-Klone, W5100)
  • TFT - 2,2" Display mit SD (SD aber nur Optional/unbenutzt)

Das Problem:
Ich bekomme die Kommunikation mit den SPI-Teilnehmern nicht hin.

--> Meine Suche im Netz ist leider nicht von Erfolg gekrönt, bzw. alle möglichen Hilfestellungen fruchten einfach nicht... :drooling_face:

Benutzt werden die Standard-Libs. Für sich einzeln getestet funktionieren die Komponenten, sowie die Ansteuerung fürs TFT. Allerdings muckt die SD-Karte auf dem Shield, bzw. will nicht gelesen werden.

--> Die Ethernetfunktionalität ist aktiv und sendet/emfängt fröhlich Daten.

Daher meine Frage, ist es Hardware-Problem, oder eher Software?
--> Hab gelesen, dass die Möglichkeit besteht, dass evt. der SPI blockiert wird und somit die Kommunikation nicht mit anderen Teilnehmern klappen kann.

Hier der Auszug aus meinem Code (sonst zu viel):

So der gesamte Code bei Pastebin... --> https://pastebin.com/cJuHeZMx
--> Ist zu viel, wenn ich nur einen Auszug hier poste...

Es sind viele Infos und auch Beispiele zum Testen enthalten sowie diverse Funktionen schon im Betrieb, aber noch nicht alle getestet...

Vielen Dank schon mal, für die mögliche Hilfe...

PS: Bin für Hinweise, Links und alles weitere sehr Dankbar :wink:

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern. Wenn er zu lang ist, hänge ihn als .txt als Anhang an den Beitrag.

Hast Du für jedes Gerät ein eigenes CS - Pin und das auch den Libs bekannt gegeben?

Gruß Tommy

Schrittweise vorgehen!

mach einen minimalen Sketch, mit Ethernet z.B. den repeating webclient und gib die SD dazu.
dann sinds auch nur 42 Zeilen und wir können uns das ansehen. 1800 Zeilen sind schon wenig zu viel verlangt!

Und ich wette man findet was bezüglich "Mega Ethernet SD" welche der Pins man wie behandeln soll.

Hey, also zu allererst, ich wollte meinen Code hier posten, aber selbst nur der Anfang mit mehr als 9k Zeichen ist dann zu viel...

Ich versuche mal, mein Skript so zu verkürzen, dass es hier auch rein passt und nur die wesentlichen Dinge enthält.

Aber ich kann schon mal verraten, dass folgende CS/SS-Pins belegt sind:

  • Ethernet & SD auf Shield ist Pin 10 & 4
  • TFT ILI9341 Pin 29
    und sind den Libs entsprechend bekannt gegeben.

Morgen, laufe des Tages werde ich mehr Informationen geben und testen kann ich leider erst morgen Abend wieder...

Vielen Dank schon mal :slight_smile:

Guten Morgen :),
so, ich habe nun mal mein Skript auf die wesentlichen Punkte reduziert. Allerdings kann ich es erst heute Abend testen.

EDIT: Da trotz Eindampfen vom Code, immer noch mehr als 9k Zeichen sind, dann mache ich einen *.txt-Anhang.

test_kombi_uno_mega_3_IBN_old_forum.txt (13.8 KB)

ich rate dir dazu:

mach einen minimalen Sketch, mit Ethernet z.B. den repeating webclient und gib die SD dazu.
dann sinds auch nur 42 Zeilen und wir können uns das ansehen.

So, damit keiner denkt, dass ich das Thema sterben lasse, aber ich bin auch fleißig dran...

Leider habe ich kaum Zeit, um viel und effektiv permanent an dem Problem zu sitzen...

Was habe ich in der Zwischenzeit gemacht:

  • Ich habe in der W5100-Lib mal die Ansteuerung des CS/SS-Pins auskommentiert, um die Steuerung selber zu übernehmen. Hat so weit funktioniert, aber kein weiterer Erfolg.

  • nun habe ich jeweils ein kleines Modul für SD-Karte und Ethernet-Karte (W5500) und werde die separat nun einzeln und zusammen testen.

  • Nebenbei hab ich noch eine Backuplösung entwickelt, um diese dann zu verwenden...

Werde ich dann i-wann wieder melden, wenn ich mehr weiß oder so...

Bis dahin, erstmla Danke und schönes Wochenende :slight_smile:

Also ich verstehe Dein Problem nicht.

Du schreibst:

Ich nutze folgende Ausstattung:

  • Arduino MEGA
  • Ethernet-Shield mit SD (China-Klone, W5100)
  • TFT - 2,2" Display mit SD (SD aber nur Optional/unbenutzt)

Ich bekomme die Kommunikation mit den SPI-Teilnehmern nicht hin.

Benutzt werden die Standard-Libs. Für sich einzeln getestet funktionieren die Komponenten, sowie die Ansteuerung fürs TFT. Allerdings muckt die SD-Karte auf dem Shield, bzw. will nicht gelesen werden.

Du willst den SD-Slot auf dem W5100/SD-Shield nutzen? Die muckt immer?

Also ohne Display drauf, sollte das eigentlich uneingeschränkt mit Ethernet und SD gehen.

#include <U8g2lib.h>                          // Lib Display I2C Oled

#include <Adafruit_GFX.h>                     // Lib Grafik für Display
#include <Adafruit_ILI9341.h>                 // Lib Display SPI tft

Was macht die nicht benutzte Bibliothek da drin?

Du benutzt das Display? Overview | 2.2" TFT Display | Adafruit Learning System
Woher stammt das Ether-Shield?

Beschreib mal genauer was wann und in welcher Konstellation (nicht) geht.

So, nun habe ich des Rätselslösung gefunden.

Wie war die Ausgangslage:

  • Arduino MEGA (China-Clone)
  • Ethernetshield (W5100) mit SD-Card (China-Clone)
  • TFT ILI9341 2,2" Display mit SD (SD hier nicht genutzt, da auf Shield)
  • Standard-Libs: SD, Ethernet & Co., Adafruit_ILI9341 & weitere

Problemstellung: SPI-Kommunikation mit den Device SD, ETH, TFT
--> Es konnten die Devices nicht alle nacheinander angesprochen werden

Hinweis: Bei der Suche nach einer Lösung hatte ich den Hinweis gelesen, dass der SPI teilweise auf den China-Clone-Shields Ethernet & SD durch das Ethernet blockiert wird. Dort wurden dann auch teilweise wilde Korrekturen an den Leiterbahnen vorgenommen. Da ich schon sehr Lange an meinem Projekt sitze, habe ich solch eine Lösung nicht ins Auge genommen...

Wie habe ich das Problem gelöst:

  • Arduino MEGA (China-Clone)
  • Einzelmodul Ethernet W5500 & Einzelmodul microSD
  • TFT ILI9341 2,2" Display mit SD (SD hier nicht genutzt, da Einzelmodul)
  • Standard-Libs: SD, Ethernet & Co., Adafruit_ILI9341 & weitere

Dann habe ich die Komponenten einzeln mit den Beispielen getestet, um Fehler in der Verkabelung auszuschließen.
Anschließend hatte ich die Ethernet- & SD-Funktion zusammen getestet. Beides ging. Verkabelung erfolgte über ICSP-Header.

Am Ende hatte ich die TFT-Schnittstelle auf andere Pins umgelegt um eine Soft-SPI-Funktion mittels der TFT-Lib zu erzeugen. Ursprünglich war diese am Hardware-SPI es angeschlossen.

Somit wird die SD-Karte erkannt, die Ethernet-Kommunikation aufgebaut und das Display zeigt Text an.

Ich hoffe, ich kann somit dem einen oder anderen eine Hilfestellung geben.

Nochmal vielen Dank an die versuchte Hilfestellung und Helfer :wink: , auch wenn ich am Ende es doch alleine mit viel Fleiß hinbekommen hatte ;D

LG Stroemling