Forum: Mikrocontroller und Digitale Elektronik Arduino Mega und TFT-Shield: Startprobleme


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich verwende einen Arduino Mega mit einem parallel angesteuerten 
2.4-Zoll-TFT-Shield, der auch zum Arduino Uno kompatibel ist (nutzt nur 
die beiden parallelen Steckerleisten). Letzteres ist deshalb 
erwähnenswert, weil bei dem TFT-Shield die Anzahl der benutzten 
Anschlüsse so groß ist, dass u.a. (vermutlich) auch die Pins für RX/TX 
bzw. für die Programmierung mitbenutzt werden müssen.

Dies ist wiederum (vermutlich) die Ursache, dass zwar mein Programm 
unmittelbar nach jeder Neuprogrammierung korrekt startet, aber wenn ich 
das Ganze an nur einem USB-Netzteil oder über den Stromstecker betreiben 
will, ich mit erheblichen Startschwierigkeien zu kämpfen habe. 
Vermutlich verhindert der Bootlader durch "irgendwelches Bit-Gefummel", 
dass mein Display korrekt initialisiert wird, denn der Rest des 
Programmes läuft einwandfrei, nur die Dispalyausgabe kommt nicht (immer) 
zustande.

Oftmals kommt das System erst nach mehreren Resets oder 
Strom-Unterbrechnungen "in die Puschen", was für einen ernsthaften 
Einsatz natürlich indiskutabel ist.

Ein wenig konnte ich die Situation verbessern, indem ich die 
Setup-Routine erstmal mit einem delay(5000) beginne und danach in einer 
Schleife so lange die Initialisierung des Displaycontollers wiederhole, 
bis er auf eine Abfrage der Auflösung korrekt antwortet. Damit hat sich 
zwar die Ausbeute an korerekten Starts deutlich verbessert, aber bei 
geschätzt jedem 5. Neustart hakt es weiterhin.

Wie kann ich das Problem (mit der vorhandenen Hardware) zuverlässig 
lösen?  Danke für Tips.

Nachtrag: Vermutlich hinterlässt der Bootlader einige Pins in einem 
Zustand, die dann oftmals verhindern, dass das Display zuverlässig 
initialisiert werden kann. Wie kann ich da für eine geeignete 
Ausgangssituation sorgen?

: Bearbeitet durch User
von Arduinoquäler (Gast)


Lesenswert?

Frank E. schrieb:
> weil bei dem TFT-Shield die Anzahl der benutzten
> Anschlüsse so groß ist, dass u.a. (vermutlich) auch die Pins für RX/TX
> bzw. für die Programmierung mitbenutzt werden müssen.

Nein so blöd sind die Display-Macher nicht.

Frank E. schrieb:
> denn der Rest des Programmes läuft einwandfrei,

Woran erkennst du das?

Frank E. schrieb:
> Nachtrag: Vermutlich hinterlässt der Bootlader einige Pins in einem
> Zustand, die dann oftmals verhindern, dass das Display zuverlässig
> initialisiert werden kann.

Nein da alle erforderlichen Pins von der Software (die du
vermutlich verwendest) gezielt initialisiert werden.

Frank E. schrieb:
> bis er auf eine Abfrage der Auflösung korrekt antwortet.

Das kann ein Knackpunkt sein.
Wenn es diese Displays sind die ich vermute dann lassen sie
sich nicht eindeutig zum Lesen bringen obowhl die Funktionalität
vorgesehen war.

Frank E. schrieb:
> Wie kann ich das Problem (mit der vorhandenen Hardware) zuverlässig
> lösen?

Indem du klar dokumentierst was du hast, Schaltplan, Aufbau
und Code, dann kann dir vielleicht geholfen werden. Verbale
Technik-Beschreibung (Prosa) ist leider ungeeignet und motiviert
hier niemanden zu einer Diagnose.

von Cyborg (Gast)


Lesenswert?

Bei solchen Problemen muss man dafür sorgen, dass erst mal ein stabile
Betriebsspannung (auch beim TFT-Shield) anliegt BEVOR ein Reset
ausgelöst wird. Springt denn das System an, wenn man einen Reset
manuell auslöst?

Arduinoquäler schrieb:
> gezielt initialisiert werden.

Das erste was man hier wohl macht, ist nach dem Reset alle
Ports auf Input zu schalten und erst später (ca. 1-2s) die
relevanten Ports auf Ausgang wenn man da keinen Konflikt hat.
Ist dann natürlich ungünstig wenn da offene Eingänge ohne
Pullup/down-Widerstände sind.
Alternative wäre vielleicht den Reset und ich gehe einfach
theoretisch mal davon aus, dass auf dem TFT-Shield Board
einer vorhanden ist, man den als Masterreset für den
Steuercontroller nimmt.
(Vielleicht läuft da nur was nicht synchron?).

Arduinoquäler schrieb:
> Indem du klar dokumentierst was du hast, Schaltplan, Aufbau
> und Code, dann kann dir vielleicht geholfen werden. Verbale
> Technik-Beschreibung (Prosa) ist leider ungeeignet und motiviert
> hier niemanden zu einer Diagnose.

Wo ist das Geschreibsel hier denn verbal?
Wenn du dagegen meinst, Aussagen wie dem TO der Schnabel gewachsen ist,
gebe ich dir vollkommen recht. Unter verbal verstehe ich halt nur das 
Mündliche.

Ansonsten muss ich dem Ardunioquäler recht geben.
Genaueres findet man daher auch hier:

http://www.mikrocontroller.net/articles/Netiquette#Klare_Beschreibung_des_Problems

Macht doch Sinn, oder?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Arduinoquäler schrieb:
> Frank E. schrieb:
>> weil bei dem TFT-Shield die Anzahl der benutzten
>> Anschlüsse so groß ist, dass u.a. (vermutlich) auch die Pins für RX/TX
>> bzw. für die Programmierung mitbenutzt werden müssen.
> Nein so blöd sind die Display-Macher nicht.

Zumindest habe ich sowas gelesen und wenn ich in der Arduino-IDE den 
seriellen Monitor öffne, erscheint dort allerlei Zeichensalat, OHNE dass 
ich in meinem Code eine serielle Ausgabe hätte. Es handelt sich um 
diesen Shield: 
http://www.robotshop.com/en/2-4-tft-lcd-touch-shield-arduino.html (zwar 
nicht von diesem Händler un dvermutlich etwas älter, wird in UTFT mit 
dem Keyword "ITDB28" zum Leben erweckt)

> Frank E. schrieb:
>> denn der Rest des Programmes läuft einwandfrei,
> Woran erkennst du das?

Weil in meinem Programm z.B. PinChange-Interrupts korrekt wahrgenommen 
werden und die dadurch gesteuerten Relais genau so reagieren, wie sie 
sollen. Nur die Anzeige auf dem Display bleint halt oft aus.

> Frank E. schrieb:
>> Nachtrag: Vermutlich hinterlässt der Bootlader einige Pins in einem
>> Zustand, die dann oftmals verhindern, dass das Display zuverlässig
>> initialisiert werden kann.
>
> Nein da alle erforderlichen Pins von der Software (die du
> vermutlich verwendest) gezielt initialisiert werden.



> Frank E. schrieb:
>> bis er auf eine Abfrage der Auflösung korrekt antwortet.
>
> Das kann ein Knackpunkt sein.
> Wenn es diese Displays sind die ich vermute dann lassen sie
> sich nicht eindeutig zum Lesen bringen obowhl die Funktionalität
> vorgesehen war.

Doch, ich prüfe ja explizid auf die Rückgabe des richtigen Wertes - 
falls die Lib UTFT das nicht faked. Und es vergeht tatsächlich etwas 
Zeit (ca. 0,2s), bis nach der Initialisierung da was korrektes 
'rumkommt:

int xres=0;
  while(xres!=240)
  {
    xres=0;
    tft.InitLCD(PORTRAIT);
    delay(500);
    xres=tft.getDisplayXSize();
  }

> Frank E. schrieb:
>> Wie kann ich das Problem (mit der vorhandenen Hardware) zuverlässig
>> lösen?
> Indem du klar dokumentierst was du hast, Schaltplan, Aufbau
> und Code, dann kann dir vielleicht geholfen werden. Verbale
> Technik-Beschreibung (Prosa) ist leider ungeeignet und motiviert
> hier niemanden zu einer Diagnose.

Naja, es geht hier ja nicht um meterlangen Code, sondern lediglich um 
die Initialisierung, die manchmal klappt und manchmal nicht. Ich kann 
mir kaum vorstellen, dass ich der erste und einzige mit dem Problem bin. 
Schaltplan halte ich bei einem fertigen Shield für wenig hilfreich - 
könnte den ja ohnehin kaum ändern.

Die Beobachtung, dass der Start unmittelbar nach der Programmierung 
durch die IDE eigentlich immer klappt und im Gegensatz dazu bei 
Power-On-Starts ohne vorherige Programmierung nicht, sollte erfahrene 
Arduino-Kenner zu einem hilfreichen Tip veranlassen können.

von Arduinoquäler (Gast)


Lesenswert?

Frank E. schrieb:
> (zwar
> nicht von diesem Händler un dvermutlich etwas älter, wird in UTFT mit
> dem Keyword "ITDB28" zum Leben erweckt)

Arduinoquäler schrieb:
> Nein so blöd sind die Display-Macher nicht.

Wenn ich den Schaltplan mir ansehe, und er zu diesem Dieplay
passt dann muss ich meine Nicht-Blöd-Behauptung widerrufen.

Denn nach Schaltplan benutzt das Display für den Datenpfad den
kompletten Arduino Port Digital 0...7 wo auch die Rx/Tx-
Leitungen drauf liegen. Das ergibt eine Kollision zwischen
dem USB-Chip der Daten seriell zur Rx-Leitung vom Arduino gibt
und dem Arduino der auf dieser Leitung LCD Daten treiben will.

Weiss nicht was sich die Leute da gedacht haben ....
(vorbehaltlich richtiger Dokumentation ...)

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Auch wenn das Design blöd sein sollte, es bleibt die Tatsache, dass 
direkt nach einem Sketch-Upload das System wie gewollt startet und im 
Gegensatz dazu nach einem Power-Off/Power-On nicht (immer).

Rein Logisch gibt es also einen Unterschied im Systemzustand nach einem 
Upload und einem normalen Power-On. Worin besteht der Unterschied und 
wie kann man das simulieren/beheben?

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.