Arduino und China TFT shield

Hallo,

ich wollte mal ein neues Projekt anfangen und dachte mir ich lass mir die CPU Auslastung von meinem Server auf einem Arduino anzeigen.

und wollte dafür das hier benutzen: Anhang “SystemStats.ino”
https://bitbucket.org/mikedirl/comp_stats/src

hier ist dann schon das Problem das ich laut dieser Zeile den Chipsatz eingeben muss
UTFT myGLCD(HX8357B,A3,A2,A1,A0); //HX8357B Chipsatz
Die Pinbelegung ist richtig das habe ich nun schon raus gefunden.
Leider ist es an der Hardware nicht ablesbar was den das nun für ein Display ist das einzigste was drauf steht ist “3.5 Zoll TFT shield” kommt halt aus China.

ich hatte die Standard TFT Beispiele ausprobiert nur leider hat das Display kein Bild gezeigt.
nach langem suchen habe ich das Beispiel im Anhang gefunden: “_105_touch_graphicstest.ino”
oder “Adafruit_ILI9341_AS8.zip”
Dieses funktioniert endlich mal.

Leider ist es nun so das ich das Sketch was ich drauf machen will nicht so anpassen kann damit es funktioniert.
kann mir dabei jemand helfen?
und die touch Funktion kann in dem fall auch weg. das Display hat kein touch

SystemStats.ino (9.39 KB)

SystemStats.h (186 Bytes)

_105_touch_graphicstest.ino (9.7 KB)

Adafruit_ILI9341_AS8.zip (46.7 KB)

Hallo,

vielleicht findest Du in diesem thread was:

Die uTFT-Lib soll den ILI9341 irgendwie schon kennen.

Sonst kommt eben mehr Arbei auf Dich zu den Sketch z.B. auf die Adafruit-Lib umzubauen.

PS: ein Link zum Anbieter Deines Displays oder ein guten Bild würde auch viel hlfen, es gibt mittlerweise ein ziemliches Sammelsurium derartiger Displays.

Gruß aus Berlin
Michael

Hallo,

ich hatte auch massive Probleme mit einigen China TFT,s
Meist wird das genommen was an Chips gerade da ist :frowning:
Ich hatte im Web ein Verweis auf diesen Link gefunden :

So konnte ich wenigstens mit den Diagnosetool den Chipsatz
auslesen und mit der KBV Bibliothek auch einige TFT,s nutzen
die von keiner anderen Bibliothek unterstützt wurden.
Wenn Du dann den Chipsatz kennst - kannst Du ja weiter nach einen
passenden Treiber suchen oder mit etwas Glück unterstützt die
KBV Bibliothek Dein TFT.

Wenn Du eine Bibliothek hast die läuft, dann schreibe doch Deinen
Sketch auf die diese Bibliothek um (include ändern etc.).
Eventuell musst Du noch einige "Keywords" in Deinen Sketch auf diese Bibliothek
hin ändern.
Aber wenn Dein TFT erst einmal mit dieser Bibliothek was anzeigt, ist der
Rest nur noch "Schreibarbeit".
Ich musste auch einige Sketche aus dem Web die z.B. für OLED,s waren auf TFT umschreiben.

Zeige uns doch bitte ein Foto von Dein TFT (Rückseite gut erkennbar).

Hallo,

maik_s:
Zeige uns doch bitte ein Foto von Dein TFT (Rückseite gut erkennbar).

wenn sein Display mit dem Adafruit_ILI9341_AS8 Demo läuft, ist es erstmal ein ILI9341 im 8Bit-Parallelmode.
Das kann die uTFT prinzipiell, allerdings nicht freiwillig...

Hier hat sich da mal jemand durchgewühlt und es wohl eingerichtet bekommen, unter Rätselhaftes TFT ist auch ein Link zur modifizerten uTFT.

https://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Displays/utft/

Ob er das jetzt einbauen kann oder den Sketch komplett an eine andere Grafiklib anpasst, wird er entscheiden müssen.

Gruß aus Berlin
Michael

Ich habe auch Probleme mit so einem Teil gehabt: Klick
Am Ende die Lösung: eine modifizierte UTFT-Lib

hallo,
erst mal danke für die zahlreichen antworten.

@amithlon
den Link zu dem thread habe ich gestern kurz nach dem schreiben meines Beitrags auch gefunden.

darauf hin mit veränderter UTFT.h konnte ich dann diesen Zeile mit den passenden Displaytreiber eintragen und das Sketch konnte ohne Fehler kompiliert werden
UTFT myGLCD(ILI9341_S4P,A2,A1,A3,A4);
zur Auswahl stehen hier nun auch: “ILI9341_S5P”,“ILI9341_S4P”,“ILI9341_16”

leider geht das trotzdem noch nicht. es wird nichts angezeigt egal wie ich auch die Analog pins eingetragen werden.

mir ist auch aufgefallen das man das Display auch über die Digitalen Eingänge steuern kann.
leider ist mir da die Belegung nicht ganz klar (die Beschriftung auf der Rückseite)

Im Anhang sind dann noch die Bilder vom TFT von hinten und Nahaufnahme vom Chip

@DerLehmi
wie muss ich die den noch modifizieren damit es geht.

das habe ich dazu auch noch gefunden
http://www.rinkydinkelectronics.com/resource/UTFT/UTFT.pdf
“UTFT(Model, RS, WR, CS, RST[, ALE]);
The main class constructor when using 8bit or 16bit display modules.
UTFT(Model, SDA, SCL, CS, RST[, RS]);
The main class constructor when using serial display modules.”

UTFT.h (9.47 KB)

wow super.
@amithlon
habe gerade mal den Link versucht
https://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Displays/utft/

habe die libary hinzugefügt, ein Beispiel daraus versucht und siehe da, es funktioniert.

nun nur noch zwei Zeilen in dem Sketch was dann die Server CPU last usw anzeigt.

//#include <UTFT.h>
#include <UTFTGLUE.h> //use GLUE class and constructor

//UTFT myGLCD(HX8357B,38,39,40,41);
UTFTGLUE myGLCD(0,A2,A1,A3,A4,A0); //all dummy args

und schon funktioniert das Sketch. “SystemStats.ino” mit dem China Display

https://bitbucket.org/mikedirl/comp_stats/src

ich danke euch allen nochmal für die Hilfe

SystemStats.ino (9.51 KB)

so nun ist es komplett und das Python script geht jetzt auch.
Im Anhang das fertige Projekt mit libraries usw.

da das nun funktioniert
wie kann ich in das vorhandene Sketch nun noch das einbauen das ich das Relais für die Backup HDD schalte indem ich per “echo 1 > /dev/ttyUSB0” sende

vorher hatte ich es so:

int Re1 = 3;

uint8_t incoming = 0;
boolean BoolRe1 = LOW;

void setup()
{
pinMode(3, OUTPUT);
Serial.begin(9600);
digitalWrite(Re1, HIGH);
}

void loop()

{
  //delay(50);
  //if (Serial.available() > 0) 
  //if(!Serial.available()) return;
  uint8_t incoming = Serial.read(); 
  //Serial.println(incoming); 
       switch(incoming){ 
         case '0': 
           Re1aus(); 
          break; 
         case '1': 
           Re1an(); 
          break; 
        }
 //delay(50);
}

void Re1aus(){
  digitalWrite(Re1, HIGH);
 //Serial.println("Backup Relais ist aus!"); 
}
void Re1an(){
  digitalWrite(Re1, LOW);
 //Serial.println("Backup Relais ist an!"); 
}

das war auch nur auf die schnelle irgendwie zusammen gesucht.
vielleicht weiß jemand ja eine bessere lösung

SystemStats.zip (879 KB)

Ich möchte auch dringend von dem Krampf mit (parallel) angeschlossenen Displays am Arduino abraten. Wie bereits oben erwähnt, wird da an Chips verbaut, was gerade übrig ist und ob es funktioniert ist quasi Zufall.

Ich verwende deshalb (und empfehle das auch anderen) die Verwendung von Nextion-Displays. Nach ein wenig Einarbeitungs-Aufwand kann man damit quasi 100% Erfolgsgarantie erlangen und der größte Teil des Arduino-Speichers bleibt für die eigentliche Programmlogik frei. Auch optisch kann damit ein völlig anderes Niveau erreicht werden ... Den Touch kann man, muss man aber nicht nutzen.

Hallo,

qualidat:
Ich möchte auch dringend von dem Krampf mit (parallel) angeschlossenen Displays am Arduino abraten. Wie bereits oben erwähnt, wird da an Chips verbaut, was gerade übrig ist und ob es funktioniert ist quasi Zufall.

ich würde es anders ausdrücken: man sollte sich genau anschauen, was man kauft, wenn z.B. preiswerte China-Ware kauft. Parallel an den AVR ist nur ein Zugeständnis an die Geschwindigkeit. Mein "Liebling" ist zur Zeit ein 2,8" Touch mit ILI9341 im SPI-Mode und SPI-Touchcontroller. Man muß beim Kauf schon genau hinschauen, was man da bestellt.
Ich nutze das Display allerdings meist am ESP8266/ESP32, da ist Geschwindigkeit bei 40MHz SPI-Takt auch nicht mehr das Problem. Der Displaycontroller kann es.
Hängt immer von den Vorhaben und den Kenntnissen ab, beim Hobby wie bei mir und damit mehr Einzelstücken, kann ich auch mal etwas Zeit beim Kauf und der Inbetriebnahme investieren.

Gruß aus Berlin
Michael

Hallo,

noiasca:
Hast auf die schnelle einen Link beim freundlichen Chinesen? So ein Dispaly geht ihn meiner Bastelkiste noch ab...

https://www.ebay.de/itm/172726994916

Gibt auch Anbieter bei Amazon, da aber gut doppelt so teuer.

Beachten: Steckverbinderanordnung und Beschriftung, es gibt es auch in 8Bit parallel, dann 2-reihiger Steckverbinder. Version ohne Touch, IC auf der Rückseite dann nicht bestückt. Es gibt auch Varianten mit Touch aber ohne Touchcontroller, da sind die X/Y-Pins dann auf der Steckleiste, habe ich aber nur als 8 Bit parallel so gesehen.

Beim gelieferten Display dann auch auf R6 (LED-Vorwiderstand) achten: bei meinem ist 3,9 Ohm bestückt, mein Bekannter hat ein (sonst identisches), da ist eine 0 Ohm-Brücke drauf. Ich betreibe die LEDs mit 47 Ohm Vorwiderstand extern an 5V.
Außerdem auf den Stand der Brücke j1 über dem Spannungsregler achten, offen -> 5V Vcc, gebrückt oder ohne Spannungsregler Vcc 3,3V. Meine waren aber immer richtig für 5V im Lieferzustand.

Gruß aus Berlin
Michael

gut wie auch immer es funktioniert ja nun.

Die Frage ist nun nur noch wie ich das ein- und ausschalten eines Relais auf dem selben Arduino in das vorhandene Sketch implementieren kann.

SystemStats.ino (9.51 KB)

Hallo,

flexone:
Die Frage ist nun nur noch wie ich das ein- und ausschalten eines Relais auf dem selben Arduino in das vorhandene Sketch implementieren kann.

welche Art Antwort erwartest Du jetzt?

Freien IO an Deinem Arduino-Board suchen:
#define RELAIS_PIN xx

In Setup() den Pin als Ausgang setzen:
pinMode(RELAIS_PIN,OUTPUT);

Da, wo Du es im Programm willst, mit digitalWrite(RELAIS_PIN,HIGH); oder digitalWrite(RELAIS_PIN,LOW); Dein Relais schalten.

Wir wissen nichts über Dein Relais und nichts darüber, wann das Relais warum anziehen oder abfallen soll...

Gruß aus Berlin
Michael

ich hatte es weiter oben in diesem thread schon mal angesprochen und auch gesagt das ich das Relais über die Serielle schnittstelle schalte indem ich einfach am Terminal in Linux "echo 1 > /dev/ttyUSB" sende zum anschalten und "echo 0 > /dev/ttyUSB"

das Problem was ich mir dachte ist das ja über diese Serielle Verbindung schon die Daten für die CPU last usw. anzeige gesendet werden,
tritt das nicht in Konflikt wenn ich darüber auch noch einfach so, was schicke um das Relais zu schalten?

Hallo,

Dazu müßte man den Sketch mal daraufhin durchsuchen, was da an Daten in welchem Format überhaupt geschickt werden. Vermutlich mußt Du Deine Daten rausfischen bevor sie zur Auswertung für die Anzeige gehen.
Ob Du da einfach mit "0" oder "1" auskommst? Allerdings kannst Du ja genausogut z.B. relaisan und relaisaus schicken oder #0 und #1 oder so. Es muß eben eindeutig erkennbar sein, daß es Dein Befehl ist und keine Daten für die Anzeige.
Außerdem sehe ich noch die Frage, ob die Software, die die Daten vom PC schickt, die serielle jeweils wieder frei gibt oder ob sie die offen hält wenn sie einmal läuft. Dann könnte Dein Echo auch auf eine "in use" Meldung laufen oder was Linux da dann macht. Bin kein Linux-Insider...

Gruß aus Berlin
Michael

ich bin zwar kein Freund von softserial, aber evtl. in diesem Fall wenn es eh nur ein #1 oder #0 ist, vielleicht einfach auf einem freien Port einen softserial einrichten und den PC auf einer anderen Schnittstelle as senden lassen.
Damit können sich TFT Ausgabe und Relais-Schaltbefehl nicht in die Quere kommen.