Werte Community,
ich habe ein Problem mit der SPI-Kommunikation.
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...
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
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?
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.
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...
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
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 , auch wenn ich am Ende es doch alleine mit viel Fleiß hinbekommen hatte ;D