PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Power-On-Problem mit Arduino Mega, UTFT und ITEAD 2.4 Inch TFT-Shield



Frank E.
23.10.2016, 15:09
Ich verwende diesen Shield ( https://www.itead.cc/itead-2-4-tft-lcd-touch-shield-v1.html ) auf einem Mega. Wenn ich den Sketch direkt drauflade, funktioniert das TFT. Trenne ich aber die Betriebsspannung oder führe ich einen Reset aus, wird der TFT nicht initialisiert und bleibt weiß. Manchmal kommt er dann nach dem x-ten Reset, aber oft garnicht. Der Rest des Sketches läuft dabei übrigens ganz normal, ich merke das an den Reaktionen auf Tastereingaben und die angeschlossenen LEDs und Relais - nur die grafische Ausgabe fehlt.

Der TFT wird parallel betrieben und nutzt nur die beiden parallelen Stiftleisten, damit er auch zum UNO kompatibel ist. Das bedingt die Nutzung beinahe sämtlicher Pins, so auch D0...D7. Soweit ich weiß, sind aber D0 und D1 mit der Seriellen Schnittstelle verbunden ... vermutlich hat das Problem hier seine Ursache. Allerdings, wie bereits geschrieben, direkt nach einem Sketch-Upload funktioniert es ja immer.

Also befinden sich diese (oder andere) Pins nach einem Upload in einem anderen Zustand als nach einem Power-On oder einem Reset. Da müsste auch der Ansatz für eine Problemlösung stecken, aber irgendwie weiss ich da nicht weiter. Ich verwende die neueste Version der Lib "UTFT", das Display wird mit dem Code: "UTFT tft(ITDB28,A5,A4,A3,A2);" zum Leben erweckt.

Ich habe bereits die verschiedensten Versuche gemacht, das Problem zu lösen (nach langen Internet-Recherchen): Alle beteiligten Pins vor der Initialisierung auf Input zu setzen, die Hardware-Serial durch Einfügen von "#define HardwareSerial_h" ausser Gefecht zu setzen, wild an den Pins zu "Wackeln" ... half Alles Nichts. :(

Hat jemand einen Tip für mich? Danke.

i_make_it
23.10.2016, 18:26
Leider ist dein Sketch nicht zu sehen, somit kann man keine Ursache suchen.
Der Shield ist ja ein Serienprodukt, somit ist die Fehlerursache dort nur im Ausnamefall zu suchen.
Da der ja nach dem Upload funktioniert, scheidet er eigentlich aus.
Das selbe gilt für den Mega.
Bleibt also nur Dein Code als erster Verdächtiger.

Du kannst auch mal versuchen nach
"void setup() {"
ein
"delay(5000);"
zu setzen.

oder falls das nichts bringt ein

unsigned long prevmicros = 0;

void setup() {
do {
delay(10);
unsigned long curmicros = millis();
prevmicros = curmicros;
} while (curmicros - prevmicros <= 5000);

Fall sich das Ganze als Timingproblem beim Initialisieren nach einem Reset/Power on herausstellt, verschaft das der Initialisierung 5 Sekunden um fertig zu werden.

Falls das delay die Initialisierung auch anhält, fallen in Variante zwei ein Paar zyklen an in denen der Prozessor was machen kann.
Allerdings ist das keine schöne und saubere Lösung sondern nur um mal zu testen ob sich da was tut.
Die saubere Lösung ist, sich den Zustand der Pinkonfig anzusehen und darüber zu prüfen.

Frank E.
24.10.2016, 16:42
Da nicht alle Arduino-Sketche zwangsläufig Open Source sind, habe ich mal extra einen ganz minimalistischen gemacht: Und das Problem besteht fort:



#include <UTFT.h>

UTFT tft(ITDB28,A5,A4,A3,A2);


void setup()
{
tft.InitLCD(PORTRAIT);
}

void loop()
{
tft.clrScr();
tft.setColor(255,0,0);
tft.fillRect(10,10,230,310);
delay(950);
}


Ich werd' mal die gemachten Vorschläge dranstricken ...

BMS
24.10.2016, 17:17
i_make_it meinte wohl hier:

#include <UTFT.h>

UTFT tft(ITDB28,A5,A4,A3,A2);


void setup()
{
delay(5000); //---------------HIER
tft.InitLCD(PORTRAIT);
}

void loop()
{
tft.clrScr();
tft.setColor(255,0,0);
tft.fillRect(10,10,230,310);
delay(950);
}

Bin mal gespannt was du davon berichtest...

Wenn das nicht hilft, würde ich bei der Stromversorgung weiter suchen. Den Spannungsregler auf dem Arduino Mega bekommt man recht schnell an seine thermische Grenze.
Mit welcher Betriebsspannung wird der Arduino Mega betrieben, welche Verbraucher werden geschaltet, was wird über die 3,3V oder 5V noch alles mit versorgt, wie viel mA braucht das?

Grüße,
Bernhard

Frank E.
24.10.2016, 17:57
i_make_it meinte wohl hier:
Bin mal gespannt was du davon berichtest...


Das Delay im Setup war das Erste, was ich probiert hatte - bringt nix, trotzdem Danke.

An der Betriebsspannung kann es kaum liegen, denn ich habe das Power-On-Problem auch an dem USB-Port, an dem ich programmiere. Aber auch ein 2A-USB-Netzteil bringt keine Änderung. Sonst läuft derzeit Nichts mit, die Relais sind momentan ab.

Bitte endlich mal darauf eingehen: Nach einer Programmierung läuft es immer, nach abziehen/anstecken erst nach Reset.

BMS
24.10.2016, 20:02
Hallo,
auf der verlinkten Seite steht noch

The not so obvious thing needed when using the MEGA is to edit the library file UTFT\hardware\avr\HW_AVR_Defines - there is a line that must be un-commented.
Also könnte man mal die genannte Datei öffnen und nach MEGA durchsuchen, scheinbar gibt es da einen Spezialfall...
Ansonsten gehen mir im Moment erst mal die Ideen aus :-k
Grüße, Bernhard

Frank E.
24.10.2016, 21:31
Hallo,
auf der verlinkten Seite steht noch ...


Ja, hab ich schon zu Anfang gemacht, sonst geht garnix ...

Frank E.
06.11.2016, 12:50
Problem gelöst - anderen TFT genommen, fertig. Mit der gleichen Lib, nur anderer Initialisierung. Läuft auf Anhieb und auch nach jedem Neustart ... :)

Den hier: https://www.amazon.de/gp/product/B01C3RDFN6/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1