Hallo euch alle, ich habe ein Problem mit meinem Touchscreen an meinen Arduino UNO. Ich muss bei mehrfach verschatelten Anweißungen das Display neu "initaliesieren", wodurch das Display kurz weiß wird, was nerft. Ohne "Neuinitialiesirung" wird das Display weiß, wenn ich was zeichnen möchte. Ich habe den Sketch mit Problem angehängt und die beiden Stellen mit dem selben Porblem mit Kommentaren mit Problembeschreibung markiert im loop Bereich.
Ah ja, ich verwende folgendes Display: http://www.ebay.de/itm/182351447657?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT Den Controller des Displays muss ich noch nachgucken.
du könntes die Display Hintergrundbeleuchtung aus dem Quelltext extra ansteuern, also aus der LIB entnehmen, wird ja nur ein Port sein der es on/off schaltet. Mir ist deine Beschreibung unklar, wieso neu initialisieren, musste ich nie, wenn ich was lösche überschreibe ich gesetzte Pixel mit black, als Text oder Block.
:
Bearbeitet durch User
Das kommt mir auch kommisch vor. Es ist so als wenn der Microcontroller vergisst, wie er das Display richtig anzusteuern hat. Ich werde mal, wenn ich genügend Zeit finde, das auf Video aufzunehmen.
Joachim B. schrieb: > du könntes die Display Hintergrundbeleuchtung aus dem Quelltext extra > ansteuern, also aus der LIB entnehmen, wird ja nur ein Port sein der es > on/off schaltet. Glaubst du, daß dafür ein ganzer Port benötigt wird? Ich glaube, ein Pin, also ein Bit reicht.
So hier könnt ihr das Problem in Videoform sehen: Nur "tft.begin(identifier);" im setup(): https://www.youtube.com/watch?v=sM_etlgVOiM&feature=youtu.be mit wiederholten "tft.begin(identifier);" in den verschachtelten if-Abfragen neben dem schon in der setup-Methode vorkommenden "tft.begin(identifier);" : https://www.youtube.com/watch?v=a9-MRCoRIaY&feature=youtu.be
ich machte das anders ich merkte mir den alten Text überschrieb den mit Textfarbe black schaltete die Textfarbe um und schreibe den neuen Text in der gewünschten Farbe
1 | #define TS_1_SWITCH p.x >= 80 && p.x <160 && p.y > 48 && p.y < 112
|
2 | |
3 | if(!ts.bufferEmpty()) |
4 | { p = ts.getPoint(); // Retrieve a point |
5 | p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); |
6 | |
7 | if( TS_1_SWITCH ) |
8 | { MScreen(SCREEN_CLR, M1); tft.setTextColor(ILI9341_BLACK); tft.setTextSize(MED_TEXT); |
9 | if(tft1_col==ILI9341_GREEN) // int. |
10 | { tft.setCursor((239 - (MED_TEXT * 4 * 6)), (MED_TEXT * 2 * 8)+(MITTELOFFSET/2)+Y1_OFFSET); tft.print(F("int.")); tft1_col=ILI9341_RED; |
11 | DAC_PORT |= (1<<DAC1_EXT1); Serial.println(F("Umschaltung 1 auf extern")); tft.setTextColor(tft1_col); tft.setTextSize(MED_TEXT); |
12 | tft.setCursor((239 - (MED_TEXT * 4 * 6)), (MED_TEXT * 2 * 8)+(MITTELOFFSET/2)+Y1_OFFSET); tft.print(F("ext.")); MScreen(SCREEN_PRT, M1); |
13 | } // if(tft1_col==ILI9341_GREEN) |
14 | else // ext. |
15 | { tft.setCursor((239 - (MED_TEXT * 4 * 6)), (MED_TEXT * 2 * 8)+(MITTELOFFSET/2)+Y1_OFFSET); tft.print(F("ext.")); tft1_col=ILI9341_GREEN; |
16 | DAC_PORT &= ~(1<<DAC1_EXT1); Serial.println(F("Umschaltung 1 auf intern")); tft.setTextColor(tft1_col); tft.setTextSize(MED_TEXT); |
17 | tft.setCursor((239 - (MED_TEXT * 4 * 6)), (MED_TEXT * 2 * 8)+(MITTELOFFSET/2)+Y1_OFFSET); tft.print(F("int.")); MScreen(SCREEN_PRT, M1); |
18 | }
|
19 | } // if( TS_1_SWITCH ) |
20 | |
21 | delay(20); |
22 | while( !ts.bufferEmpty() ) |
23 | p = ts.getPoint(); // Retrieve a point |
24 | |
25 | } // if(!ts.bufferEmpty()) |
wozu soviel Aufwand bei dir mit Init?
:
Bearbeitet durch User
Die meisten Int-Variablen werden noch wiederverwendet, aber ich mache erst einmal die ganze Interface, da derzeitig nur das Display angekommen ist und der Rest noch im Versand ist.
Hab ein bisschen mit dem Code von Joachim gespielt, aber keine besserung. Sogar bei folgenden Testcode gibt es das selbe Problem und das ist nicht viel: #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 #define YP A1 #define XM A2 #define YM 7 #define XP 6 #define MINPRESSURE 10 #define MAXPRESSURE 1000 #include <stdint.h> #include <Adafruit_GFX.h> #include "TouchScreen.h" #include <MCUFRIEND_kbv.h> MCUFRIEND_kbv tft; #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define YELLOW 0xFFE0 #define WHITE 0xFFFF TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); uint16_t displayId; void setup() { tft.reset(); displayId = tft.readID(); tft.begin(displayId); tft.fillScreen(BLACK); tft.setRotation(1); tft.drawRect(0,0,400,240,WHITE); } void loop() { TSPoint p = ts.getPoint(); if (p.z > 10 && p.z < 1000) { tft.setTextSize(6); tft.setTextColor(WHITE); tft.setCursor(10,10); tft.print("TEST"); } } Ich habe auch mal den Microcontroller gegen einen neuen Unbenutzten getauscht (vieleicht ist ja im RAM-Bereich was hin), aber mit dem neuen Controller ist es das selbe. Und die mitgelieferten Beispiele laufen einwandfrei. Also Hardwareseitig kann man einen Fehler fast ausschließen.
David schrieb: ....... Und die mitgelieferten Beispiele laufen > einwandfrei. Also Hardwareseitig kann man einen Fehler fast > ausschließen. arrrrrr..... was läuft? das was du hier eben schriebst? igendwie fehlt delay(20); while( !ts.bufferEmpty() ) p = ts.getPoint(); // Retrieve a point am Ende du bekommst ja mehr Events also wenn eine Aktion ausgelöst wurde: if (p.z > 10 && p.z < 1000) { tft.setTextSize(6); sollte am Ende Buffer leeren und eine kleine Wartezeit sein Wenn auch dein Mini Code nicht läuft weiss ich nicht mehr weiter, bei mir läuft es mit mehr Code und ohne Zeitbegrenzung. Wenn du es nicht genauer beschreibst "was wann wie" kann dir keiner mehr helfen!
Du hast so wie es scheint eine andere touchscreen-libary als ich. Meine kennt so wie es aussieht kein bufferEmpty() z.B. (zumindest mekert er bei mir herum). Ach ja, der Testcode basiert auf eine beim touchscreen mitgelieferten Demo, die mal anhänge. Das Problem kann man auch so beschreiben:Display kann nach z.b. if-abfragen nur genutzt werden, wenn tft.begin(); vor dem nutzen des Displays vorkommt. Quasi als wenn man wenn man mit der seriellen Schnittstelle (bei seriellen schnittstelle ist keinerlei Probleme, die wird nur für sinbildliche Metapher zum Erklären des Problems genutzt) etwas senden möchte müsste man nicht nur direkt zu begin des Programmes Serial.begin(9600); ausführen sondern auch nach if-Abfragen zum Beispiel. Wenn du möchtest, kann ich dir meine zum touchscreen mitgelieferte touchscreen-libary hier posten. wahrscheinlich ist die anders als deine.
So ich habe jetzt eine andere mitgelieferte Demo "ausgeschlachtet" und damit funktioniert es bischer recht gut. Ich lade den Code mal hoch falls jemand anders in Zukunft Probleme hat (Ist aber kaum kommentiert und beinhaltet einiges an Testcode). Und ich habe in den Code der bei meinen Touchscreen enthaltenen Touchscreen-Libary geguckt in die hat KEINE Funktion bufferEmpty(). Also ist dieser Code nur für diejenigen geeignet, deren mitgelieferte Libary kein bufferEmpty() hat. Ich werde mich hier wieder melden wenn es doch noch Probleme geben sollte. Aber vielen Danke euch allen für eure Hilfe.
Gibt es eigentlich auch irgendwo einen Schaltplan zu dem namelosen Teil?
Auf Anfrage sendet der Händler den Schaltplan, Demos und die Libaries. Ich hänge mal den mitgelieferten Schaltplan an so wie der mir von Händler zugeschickt wurde.
Danke, sowas ist immer interessant. Sind da wirklich 74HC245 drauf als Pegelwandler bestückt? Die mit 3,3V zu versorgen und 5V Pegel anzulegen wäre gewagt. Und zwar sowohl für den Arduino, als auch für das Shield. Aber erstmal müssten die 3,3V überhaupt stabil sein, wie der AMS117-3.3 das ohne Kondensator zuverlässig machen soll ist schon erstaunlich. Oder was auch immer da wirklich verbaut ist in dem SOT-89 Gehäuse. Die Beschaltung vom SD-Sockel ist quasi nicht vorhanden, funktionieren damit wirklich irgendwelche Karten? LCD_DB3 auf MOSI und LCD_DB5 auf MISO macht bestimmt Freude in der Software. Erst habe ich ja gedacht die Dinger sehen günstig aus, jetzt halte ich die für billigen Ramsch.
Was erwartet man für 9€ inklusive Versand. Aber für erste Versuche gut genug (wenn was schief läuft und das Ding hinüber ist, waren nur 9€).
David schrieb: > Was erwartet man für 9€ inklusive Versand. Grundsätzliche Funktion ohne das man Gefahr läuft das was abfackelt ist sicher kein Luxus.
Mich faszieniert, das die nicht einfach 3,3V vom Ardiuno-Board selber genohmmen haben.
David schrieb: > Mich faszieniert, das die nicht einfach 3,3V vom Ardiuno-Board selber > genohmmen haben. Dafür reicht der Strom nicht den der 3,3V Regler auf dem Arduino liefern kann. Die SD Karte alleine könnte schon zu viel sein, in Kombination mit dem TFT sicher, da sowohl die Logik-Versorgung als auch die Hintergrund-Beleuchtung aus den 3,3V gespeist werden. Würde mich auch nicht wundern, wenn das TFT "abstürzt" wenn man im Betrieb eine SD-Karte einlegt.
:
Bearbeitet durch User
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.