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
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.
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?
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.
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 ...)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.