Forum: Mikrocontroller und Digitale Elektronik ESP8266 mit TFT touchscreen Bildschirm wird weiß


von michox (Gast)


Lesenswert?

Hallo meine lieben Freunde,
ich bin grade an meinem zweiten µC Controller Projekt und auch so gut 
wie fertig, jedoch bin ich auf ein kleines Problem gestoßen. Folgendes 
Projekt:

NodeMCU ESP8266 mit 2,4" TFT Bildschirm mit ILI9341 Controller 
(https://www.ebay.de/itm/282990458619). Funktion: Wecker. Per 
Touchscreen soll die Eingabe von Weckzeiten etc. Ermöglicht werden.
Jedoch passiert es manchmal (und inzwischen sehr häufig) dass nach 
einiger Benutztung des Touchscreens der Bildschirm plötzlich weiß wird, 
und der µC resettet werden muss. Hier mal meine Verkabelung des 
Bildschirms

    VCC  to 3.3V
    GND to GND
    CS to D8
    RESET to RST
    DC to D4
    SDI (MOSI) to D7
    SCK to D5
    LED to 3.3V
    SDD (MISO) to D6
    T_CLK to D5
    T_CS to D2
    T_DIN to D7
    T_DO to D6
    T_IRQ to D1

und der erstmal der wichtige Teil meines Codes:
1
#include <Wire.h>
2
#include <SPI.h>
3
#include "Adafruit_ILI9341esp.h"
4
#include "Adafruit_GFX.h"
5
#include "XPT2046.h"
6
7
#define TFT_DC 2
8
#define TFT_CS 15
9
10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
11
XPT2046 touch(/*cs=*/ 4, /*irq=*/ 5);
12
void setup(){
13
  SPI.setFrequency(ESP_SPI_FREQ);
14
  pinMode(2, OUTPUT); //hab gelesen dass das bei Whitescreens helfen soll tuts aber nicht...
15
  tft.begin();
16
  touch.begin(tft.width(), tft.height());  // Must be done before setting rotation
17
  tft.setRotation(1);
18
  tft.fillScreen(ILI9341_BLACK);
19
  touch.setCalibration(220, 256, 1776, 1795);
20
  tft.setTextColor(ILI9341_WHITE);
21
}
22
void loop()
23
{
24
  x = -1; y = -1;
25
  if (touch.isTouching()) {
26
    touch.getPosition(y, x);
27
    Serial.print(x); Serial.print(" "); Serial.println(y);
28
  }
29
  if (alarm() == true && mute == false) screen = 1;
30
  if (screen == 0) Mainscreen();
31
  else if (screen == 1) Alarmscreen();
32
}
Der Touch wird auch mit weißem Display noch erkannt. Hat jemand eine 
Idee woran das liegen könnte?

vielen lieben Dank im vorraus!

von Stefan F. (Gast)


Lesenswert?

Hängt der ganze ESP oder nur das Display? Du könntest mal in der loop 
jede Sekunde etwas seriell ausgeben, etwa so:
1
void loop()
2
{
3
    static unsinged long last_time;
4
    if (millis()-last_time>1000)
5
    {
6
        Serial.println("Tick");
7
        last_time=millis();
8
    }
9
    ... dein sonstiger code
10
}

Wenn der ESP nicht hängt, berappelt sich das Display wieder, wenn du es 
z.B. jede Minute innerhalb der loop() neu initialisierst?

von Nico W. (nico_w)


Lesenswert?

Floatender Reset Pin?!?

von Mein Senf (Gast)


Lesenswert?

Hast du schon mal nach dem yield() Befehl (eingentlich Funktion) 
gegoogelt.?

von michox (Gast)


Lesenswert?

Vielen Dank für die Anregungen. Am Ende lag es jedoch an einem 
Wackelkontackt des SCK pins...

von michox (Gast)


Angehängte Dateien:

Lesenswert?

Noch eine weitere Frage: Ich möchte noch die Helligkeit des Displays 
einstellen können. Das Display hat einen LED Pin. Da mir letztes mal der 
mosfet durchgebrannt ist (hab wieder den gleichen da ähnliche Anwendung
https://www.conrad.de/de/infineon-technologies-irf3708pbf-mosfet-1-n-kanal-87-w-to-220-162394.html), 
und ich keine Zeit mehr hätte einen neuen zu besorgen möchte ich noch 
fragen ob da irgendwelche Widerstände dazwischen sollten, und ob meine 
Schaltung richtig ist.

Achja ich sollte viellecht erwähnen, dass ich den TX Pin zu einem Output 
pin umgewandelt hab, und darüber das PWM senden will. Das sollte doch 
funktionieren oder?

von Stefan F. (Gast)


Lesenswert?

Es ist ziemlich irreführend, einen MOSFET zu verwenden und in den 
"Schaltplan" (oder was dieses Gefritzel darstellen soll) dann einen NPN 
einzuzeichnen.

Im ersten Beitrag hast du geschrieben, dass der LED Pin an 3,3V gehört. 
Also brauchst du einen P-Kanal MOSFET oder PNP Transistor.

Der PNP Transistor braucht einen Vorwiderstand vor der Basis, um den 
Steuerstrom festzulegen. Der P-Kanal Mosfet benötigt einen Widerstand, 
um den Ladestrom zu begrenzen (z.B. 100 Ohm) und einen zweiten 
Widerstand, der während der Initialisierungsphase für definierte 
Zustände (nämlich "auf geschaltet") sorgt.

Die Grundlagen zu Transistorschaltungen kannst du in der 
Artikelsammlung, eine Lehrbuch deiner Wahl oder auf der Webseite von 
Elektronik Kompendium nachlesen.

Die allerwichtigste Frage ist jedoch, wie denn nun dieser LED Pin 
funktioniert. Besorge das Datenblatt vom Display. Ich habe mir 
angewöhnt, keine Produkte ohne Datenblatt zu kaufen.

von michox (Gast)


Lesenswert?

Super vielen Dank schonmal für die Antwort. Da hat Fritzing wohl die 
falsche Grafik angezeigt...
Ein Datenblatt hab ich hier gefunden 
http://www.haoyuelectronics.com/Attachment/2.4-LCD-Module/2.4nch_240X320_9341.rar 
(rechtsklick, Seite speichern und normal entpacken) werde jedoch nicht 
wirklich schlau draus. Aber prinzipiell funktioniert das so... ich 
schalte den Pin an 5V (wird noch unterstützt laut reseller) Display 
leuchtet hell. an 3V leuchtet es mittel. Eine Kathode gibt es nicht (bzw 
nicht zugänglich jedenfalls finde ich pins K1-K4 nicht)


Normalerweise würde ich mir liebend gerne etwas über Transistortheorie 
durchlesen, allerdings fliege ich morgen für ein halbes Jahr nach 
Neuseeland und hatte gehofft das Projekt heute noch fertigstellen zu 
können... Gibt es auch eine Möglichkeit das ganze mit dem N-Kanal Mosfet 
von oben umzusetzen?

von Stefan F. (Gast)


Lesenswert?

Dein N Kanal MOSFET ist dazu ungeeignet.

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
Noch kein Account? Hier anmelden.