Hallo zusammen, ich habe mir ein ESP32 "CYD" Modul (Cheap Yellow Display, z.B. bei ebay suchen nach "ESP32 TFT 2.8") zugelegt, und versuche, Teile meiner eigenen SW unter Nutzung der Arduino IDE zum spielen zu bringen. Das TFT kann ich ansteuern, den Touchcontroller jedoch (noch) nicht. (Die Demo-SW des Herstellers funktioniert, das Modul ist also in Ordnung.) Das TFT liegt an den Standard-Pins der HSPI Schnittstelle, der Touchcontroller jedoch an den Pins CLK:IO25,DIN:IO32M;DOIT:IO39...), die dann ebenfalls an die SPI Schnittstelle gemapped werden. Es ist also notwendig, "on the fly", das Mapping jeweils umzuschalten. (Die VSPI-Schnittstelle ist fest für die SD-Card vorgesehen). Nur mir gelingt das nicht. Wo ist mein Fehler? Mein Code (auszugsweise) void setup() { ...... //SPI-Schnittstelle fuer TFT initialisieren. HSPI-Pins!!! SPI.begin(TFT_SCK, TFT_MISO, TFT_MOSI, TFT_CS); SPI.beginTransaction(SPISettings(6000000, MSBFIRST, SPI_MODE0)); pinMode(TFT_CS, OUTPUT); .... Initialisierung des TFT .... } void loop() { ....... // Einlesen Touch SPI.end(); SPI.begin(TOUCH_SCK, TOUCH_MISO, TOUCH_MOSI, TOUCH_CS_PIN); SPI.beginTransaction(SPISettings(6000000, MSBFIRST, SPI_MODE0)); ... Ende Touch .... //Ausgabe auf TFT SPI.end(); SPI.begin(TFT_SCK, TFT_MISO, TFT_MOSI, TFT_CS); SPI.beginTransaction(SPISettings(6000000, MSBFIRST, SPI_MODE0)); ....... } Ein Umschalten auf die anderen Pins erfolgt bei mir nicht. SPI wird beim ersten Versich, Touch einzulesen, abgeschaltet und läßt sich auch nicht mehr aktivieren. Die SPI Signale habe mit dem Oszi kontrolliert. Wo liegt das Problem? In der Demo-Version funktioniert das alles, und nach meiner, sicherlich nicht vollständigen, Analyse des Sourcecodes der Demoversion wird _keine_ SW-SPI für das Auslesen des Touchcontrollers benutzt. (Ich möchte nicht die TFT-eSPI Library von Bodmer verwenden, da diese nicht mit meiner sonstigen SW zusammenspielt.) Pls help. Danke.
Ich schließe mich den mal an.. Mich würde generell mal interessieren wie man z.B. bei einem ESP32C3 die SPI Schnitstelle (GPSPI2) auf beliebige I/O´s mapped..
So, das Proeblem ist schon gelöst. Wenn mal ein unbeteiligter drüberschaut... Ein kleiner Fehler, eine Unsachtsamkeit meinerseits: falsche Pindefinition... Also problem gelöst. Danke dennoch fürs lesen.
Jan H. schrieb: > Ich schließe mich den mal an.. > > Mich würde generell mal interessieren wie man z.B. bei einem ESP32C3 die > SPI Schnitstelle (GPSPI2) auf beliebige I/O´s mapped.. Nun, wie erwähnt, bei mir funktioniert das jetzt. Ist wogl ein ESP32-WROOM-32. Ich kenne den C3 nicht, ich schaue mal nach... Aha, hat weniger GPIOs. Sollte sonst aber genauso funktionieren. Erstmaliger Aufruf der SPI-Schnittstelle: (Mein Beispiel) wichtig ist dabei, daß den Mode der einzelnen Ausgangspins (MOSI, SCK und CS) auf Output gestellt werden, aber nicht auf HIGH oder LOW festgelegt werden. pinMode(TOUCH_MOSI, OUTPUT); u.s.w. SPI.begin(TFT_SCK, TFT_MISO, TFT_MOSI, TFT_CS); SPI.beginTransaction(SPISettings(6000000, MSBFIRST, SPI_MODE0)); Soll nun die Schnittstelle "umgemapped" werden, muß die alte Schnittstelle zunächst gestoppt und dann neu mit den anderen Pins gestartet werden. SPI.endTransaction(); SPI.end(); SPI.begin(TOUCH_SCK, TOUCH_MISO, TOUCH_MOSI, TOUCH_CS_PIN); SPI.beginTransaction(SPISettings(6000000, MSBFIRST, SPI_MODE0)); Good Luck
Danke für die Mühe. Ich möchte es gerne ohne die vorgefertigten Routinen versuchen und verstehen was genau gemacht wird. Gruß Jan
Jan H. schrieb: > Danke für die Mühe. no prob. Gerngeschehen. > Ich möchte es gerne ohne die vorgefertigten Routinen versuchen und > verstehen was genau gemacht wird. Das ist auch meine Vorgehensweise. Alle meine Routinen, na gut, der größte Teil, stammt von mir selbst ohne Nutzung irgendwelcher Libraries. Für meine normalen Basteleien nutze ich Atmel Studio für die AVRs und den SAM8 auf der Arduino-DUE Platine. Ich verzichte bewußt auf die ASF-Geschichte und arbeite eigentlich nur mit Ansi-C. Von CPP habe ich keine Ahnung. Daß ich bei den ESPs auf die Arduino-IDE zurückgreifen muß, gefällt mir absolut nicht. Aber eine eigene ESP-IDE, z.B. Eclipse, habe ich noch nicht zum Spielen gebracht (unter Ubuntu-Linux in einer VM) Viele Grüße
Sehr gut, findet man leider eher weniger. Hast du zufällig Skype oder Discord? Dann kann man sich kurzfristig austauschen? Gruß Jan
Ja, gegen einen "Austausch" habe ich nichts einzuwenden. Aber mein "alter" Rechner von 2012 mit Win 7 kann kein Skype mehr. Und ich werde auch nicht updaten/upgraden. Sollte keine SW mehr auf dem Rechner funktionieren, werde ich einen neuen PC mit Linux aufbauen. (Ich mag weder Microsoft noch Gates). Die VMs sind zu langsam. Wenn Dur irgendwelche Fragen hast: PN. Oder bist Du aus der Nähe von PLZ 52525? Yogy
Dein Problem ist ja bereits gelöst. Nur als Hinweis, ein guter Startpunkt bezüglich des Displays (Board) findest du hier: https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/tree/main/Examples/Basics Ein schönes Testprojekt ist ebenfalls auf der Seite. https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/tree/main/Examples/Projects/VolosSlidersRGB
Bernd N. schrieb: > Dein Problem ist ja bereits gelöst. Nur als Hinweis, ein guter > Startpunkt bezüglich des Displays (Board) findest du hier: > https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/tree/main/Examples/Basics > > Ein schönes Testprojekt ist ebenfalls auf der Seite. > https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display/tree/main/Examples/Projects/VolosSlidersRGB Danke für den Link; habe ich sofort abgespeichert.
Nur der Vollständigkeit halber: Statt das aus Bequemlichkeitsgründen vordefinierte globale "SPI"-Objekt ständig umzukonfigurieren, kannst du auch mehrere eigene anlegen. SPIClass tft_spi(TFT_MOSI, TFT_MISO, TFT_SCLK); SPIClass touch_spi(TOUCH_MOSI ... Kann aber trotzdem gut sein, dass die nicht gleichzeitig verwendbar sind, wenn Pins, SPI-Hardware, DMA etc. geteilt sind. Muss deine Anwendung sicherstellen. Muss sie mit nur einem SPI-Objekt aber auch.
Εrnst B. schrieb: > Nur der Vollständigkeit halber: > > Statt das aus Bequemlichkeitsgründen vordefinierte globale "SPI"-Objekt > ständig umzukonfigurieren, kannst du auch mehrere eigene anlegen. > > SPIClass tft_spi(TFT_MOSI, TFT_MISO, TFT_SCLK); > SPIClass touch_spi(TOUCH_MOSI ... > > Kann aber trotzdem gut sein, dass die nicht gleichzeitig verwendbar > sind, wenn Pins, SPI-Hardware, DMA etc. geteilt sind. > Muss deine Anwendung sicherstellen. > Muss sie mit nur einem SPI-Objekt aber auch. Danke für den Hinweis. Leider habe ich von CPP und den Klassengeschichten keine Ahnung. Ich habe daher (dank Google und effektiv Github) zwei Objekte angelegt. Das funktionierte (keine Compilerfehler), solange alles in einer einzigen Datei zu finden war. Das Initialisieren im Hauptprogramm (.ino-File) und das Aufrufen aus einer der Funktion aus einem anderen eingebundenen File hat nicht funktioniert. Ich habe das versucht, die "neue Klasse" mit public zu versehen und entsprechend mit extern darauf zu referenzieren... FAIL. Wie gesagt, ich habe keine Ahnung von cpp. Vlt. versuche ich das nochmal.. Ach ja, das Modul teilt die HSPI-Schnittstelle zwischen TFT und TOUCH, die VSPI Schnittstelle ist für die SD-Card vorgesehen. Aber ich bin ja erst am Anfang.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.