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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von michox (Gast)


Bewertung
0 lesenswert
nicht 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 
(Ebay-Artikel Nr. 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Floatender Reset Pin?!?

von Mein Senf (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hast du schon mal nach dem yield() Befehl (eingentlich Funktion) 
gegoogelt.?

von michox (Gast)


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

von michox (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Dein N Kanal MOSFET ist dazu ungeeignet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.