Peter Hofbauer’s private Homepage
Selbstbauprojekte eigene Entwicklungen
Impressum Letzte Änderung: 08.Juli 2013 Copyright: frei! Impressum Letzte Änderung: 12.02.2017 Copyright: frei!

Mein Projekt “FENSTER” 1/2

Home nach oben FENSTER Seite 2 Home FENSTER Seite 1 FENSTER Seite 2
Dieses Projekt ist kein Betriebssystem, sondern einfach nur ein Fenster um Daten/Abläufe von meinen konstruierten Geräten/Maschinen zu sehen. Es ist eine farbige Text-Anzeige mit serieller 1-Draht-Ansteuerung. Soll im Master / Slave Prinzip von einer Hauptanwendung gesteuert werden.

Meine Überlegungen

Das oft verwendete Standard-Text-Display mit 4 x 20 Zeichen ist einfach anzusteuern. Leider ist es bei vielen Anwendungen zu klein. Man kann nicht alles Anzeigen was eigentlich nötig wäre. Man muss den Text geschickt verteilen und verkürzt zeigen. Schon besser ist das Grafikdisplay mit 128x64 Pixeln. Das ist aber wesentlich aufwendiger anzusteuern. Bei meinen “speziellen  Funktionsgenerator” musste ich wegen der ungünstigen Verteilung der Pixelreihen immer das kompletten LCD auf einmal schreiben. Das hat natürlich die CPU aus gebremst. Bei der Suche nach ein größeres Display habe ich dieses 3,5 Zoll TFT-LCD mit 480 x 320 Pixel (wie oben gezeigt) gefunden. Das wird von unseren chinesischen Freunden sehr günstig angeboten. Was auch dessen größter Vorteil ist. Leider sind die technischen Daten dazu recht dürftig oder eigentlich gar nicht vorhanden. Darum habe ich das Display selber getestet. Eine Typenbezeichnung zur eindeutigen Identifikation fehlt. Man erkennt es am einfachsten am Foto von der Rückseite. Das TFT wird “mit Touch-Panel” und “ohne Touch-Panel” angeboten. Sehen aber beide identisch aus. Vermutlich ist der einzige Unterschied der mit gelieferten Plastik-Stift. Die Ansteuerung (8 Bit parallel) ist umfangreich. Man muss Pixel für Pixel je nach Farbe (je Pixel 2 Byte) übertragen. Ein einziges Zeichen benötigt je nach Größe 0,38ms bis 3,1ms. Dazu sind etwa 12000 bis 93000 CPU-Zyklen nötig.  Egal wie man es löst, die CPU wird stark beschäftigt. Für zeitkritische Anwendungen ein Problem. Dieses Problem will ich mit dieser Anzeige lösen. Soll als Slave mit eigener CPU von einer Master-CPU betrieben werden.

Das 3,5” TFT-Display

Leider sind verschiedene Versionen am Markt. Siehe Fotos oben.   Mechanisch   Die Displays werden über die Stiftleisten befestigt. Die 2 Stiftreihen sind für einen Arduino Uno bemaßt. Der Abstand der Stifte bis zum Rand sind unterschiedlich weshalb eine einheitliche CPU-Platine für meine beiden Typen nicht möglich ist. Die rote TFT-Platine (links) kann für meine erste Platine nicht befestigt werden. Ich benötige dazu einen extra Entwurf. Weil die Anstände zum Rand anders sind Betriebsspannung, 5V? 3,3V? Wie das auf der TFT-Platine gelöst ist weis ich nicht. In einer Info im www steht das man den 3,3V-Anschluss offen lassen kann. Schaltpläne wären Hilfreich. Gibt es aber nicht. Ich habe die TFT-Displays mit zwei CPU-Platinen testen können. 1.) Die ältere aus meiner Erodiermaschinen-Steuerung mit 3,3V-CPU beide Ub-Pins am Display werden mit 5V und 3,3V betrieben: rote TFT = 111mA blaue TFT = 125mA ohne TFT, nur 3,3V-CPU = 25mA Beide Ub-Pins mit 3,1...3,0V betrieben, funktioniert einwandfrei, etwas geringe Helligkeit beide TFT komplett mit CPU = 72mA 2.) Der neue Entwurf mit 5V-CPU. nur 5V-Pin mit 5V betrieben, 3,3V-Pin frei: rote TFT = 197mA blaue TFT = 257mA ohne TFT, nur 5V-CPU = 125mA  Initialisierung Ich hatte zwei Exemplare TFT-Displays besorgt (das Blaue oben im Foto) und mit der alten Firmware und der Platine´von der Erodiermaschinen-Steuerung ausprobiert und erlebte eine Überraschung. Alles nur Grün! Die anderen Farben waren nicht zu sehen. Ein Defekt? Um das zu klären habe ich das rote TFT (in D) besorgt. Damit waren alle Farben OK. Dann habe ich einige Initialisierungsdaten aus dem www getestet und ein Satz gefunden der für beide TFTs richtig funktioniert. Dann erkannte ich noch einen anderen Unterschied. Das rote TFT zeigte eine andere Position der Textzeilen. Die XY-Position 0,0 ist beim blauen TFT oben links, beim roten TFT dagegen unten links. Seltsamerweise sind die Zeichen (Ziffern und Buchstaben) davon nicht betroffen. Font #1 bis #4 Hier ein blaues und ein rotes TFT mit der selben CPU und Firmware. Wie man sieht eine andere Reihenfolge der Zeilen. Der Touch-Screen Das TFT-Display hat einen resistiven Touchscreen. Der besteht aus 2 leitfähigen Schichten, die sich durch Druck auf den Screen berühren. Die Widerstände kann man mit ein Ohmmeter leicht messen. Bei meinen 3 Exemplaren messe ich große Unterschiede. Von 335 Ohm bis 1680 Ohm. Wegen der Toleranzen muss man die Touch-Funktion vorm Betrieb kalibrieren. Die Anschlüsse liegen leider nicht getrennt vom Display. Ich habe 3 verschiedene Anschluss-Versionen im www gefunden, 2 davon sind: Version 1: YP an LCD_CS YM an LCD_D1 XP an LCD_D0 XM an LCD_RS  Version 2: YP an LCD_WR YM an LCD_D7 XP an LCD_D6 XM an LCD_RS Es gibt noch eine 3. Version, die Notiz ist leider nicht auffindbar. Bei meinen Geräten kann ich aber kein Touchcreen brauchen. Meine Geräte müssen meist mit langen Arm bedient werden und das geht besser und präziser mit richtigen Tasten.

Ein FENSTER als Slave

Für diese TFT-Displays gebt es eine Reihe von Libs. Für den Betrieb mit einen Arduino Uno. Damit kann ich nichts anfangen. Für meine Anwendungen ungeeignet. Ich mache meine Konstruktionen lieber selber und auch komplett in Assembler. Mit den Controllern der 16bit- Reihe vom Microship: dsPIC30, dsPIC33 und PIC24. Die Reihe hat einen (für Assembler) sehr guten und umfangreichen Befehlssatz und ist sehr schnell.   Diese Baugruppe “FENSTER” soll für die verschiedensten Anwendungen dienen. Die nötigen Eigenschaften: 1. nur so einfach wie unbedingt nötig 2. farbige Texte, gerade Linien und Flächen auf das 3,5” TFT Display zeichnen, keine Bilder 3. eine einfache 1-Draht Ansteuerung ohne Fehlerkorrektur und ohne Quittung weil alles in ein Gehäuse kommt 4. Stromversorgung 5V oder 3,3V, nur für am Netz betriebene Geräte/Maschinen wegen Strombedarf 5. Was wo angezeigt wird bestimmt nur der Master, keine eigenen Funktionen 6. einfaches Protokoll mit lesbaren ASCII-Byte, muß mit einer Terminal Software (z.B. hterm) mit PC-Tastatur beschreibbar sein. Welche Schnittstelle? Ich verwende die asynchrone UART, aber nur die eine Richtung, also nur 1-Draht. Diese Schnittstelle benötigt keine Taktleitung. Verwendet wird Baudrate von 9600. Höhere Taktrate ist zwar möglich, bringt aber nichts, das TFT kann auch nicht schneller. Notfalls kann der Master, falls keine UART übrig ist, den Datensender auch mit Timer-Interrupt per Software machen. Welches Steuerzeichen? Das Protokoll benötigt ein Zeichen, welches nicht im Text vorkommen darf. Es muss aber auf einer PC-Tastatur eine Taste haben. Ich habe das kaufmännische & gewählt. Das benötigt man normalerweise nicht im Text zum TFT. Das dient als Endesignal eines Kommandos. Ein Zeichen am Anfang ist nicht nötig. Das Protokoll   Das Protokoll ist ganz einfach aufgebaut. Es besteht aus ein Kommando, Parameter und das & als Endezeichen. Es sind 11 Kommandos, die bestehen aus einen Großbuchstaben. Danach folgt manchmal nur das &, oder Zahlen oder Text, ans Ende immer ein &. Falsche Zeichen werden ohne Reaktion ignoriert. A& ist inzwischen überflüssig, wurde für die Entwicklung und Tests nötig, sendet ein ’a’ als Echo, sonst passiert nichts C& löscht das Display komplett mit der Hintergrundfarbe. Dieses Kommando dauert etwas Fn& schaltet einen der 4 Fonts ein, n geht von 1 bis 4 Hn& Hintergrundfarbe, n geht von 0 bis 8, siehe Farbtabelle unten In& Initialisierung, n ist 0 oder 1, damit wird die Nullposition eingestellt, entweder oben links oder unten links, ist vom TFT abhängig. Lbbbhhh& Linie oder Rechteck, ab der XY-Position, wird mit der Hintergrundfarbe überschrieben, hhh = Höhe, bbb = Breite, müssen immer je 3 Ziffern sein, zwischen 000...479 und 000...319, das Produkt aus beiden darf 32000 nicht übersteigen. Rn& im Textmodus: Zwischenraum um n Pixel vergrößern, möglich 0...9 Ttext& Textmodus, bis 100 Zeichen erlaubt, der Text erscheint unverändert auf dem Display, CR/LF werden ignoriert Un& im Textmodus: nächste Zeile wird um n Pixel nach unten verschoben, falls der Text am rechten Rand des Display umbricht. Xnnn& X-Position setzen, nnn möglich von 000...497, müssen 3 Ziffern sein, die Startposition des ersten Zeichens, im Textmodus wird wie üblich automatisch erhöht. Ynnn& Y-Position setzen, nnn möglich von 000...319, müssen 3 Ziffern sein, die Startposition des ersten Zeichens, im Textmodus nach Zeilenumbruch am rechten Rand wie üblich automatisch erhöht. Zn& Zeichenfarbe für Text, n geht von 0...8, siehe Farbtabelle unten Die Kommandos dürfen ohne Pause direkt hinter einander gesendet werden. Die Byte werden per Interrupt in einen 511 Byte großen Ringspeicher geladen und der Reihe nach ab gearbeitet. Ein Überlaufen ist nicht möglich auch wegen der geringen Baudrate von 9600. Eine Abfrage im Master auf “bereit?” ist überflüssig. So sollte es auch sein. Farben: Hn& oder Zn& 0 = schwarz, 0 1 = weiss, FFFF 2 = rot, 0b0000000011111000 3 = hellrot, 0b1011011011110100 4 = gruen, 0b1110000000000111 5 = gelb, 0b1110000011111111 & = blau, 0b0001111100000000 7 = cyan, 0b1111111100000111 8 = lila, 0b0001111111111000 Die Farben bleiben bis sie überschrieben werden. Die XY-Positionen werden im Textmodus automatisch erhöht. Der folgende Textstring setzt an der letzten Stelle an. Am rechten Ende des Display erfolgt wie üblich eine folgende Zeile ab linken Rand. Font: Fn& 1 = Font 12x16,  maximal 20 Zeilen zu je 40 Zeichen, Rest 0,0 Pixel 2 = Font 16x26,  maximal 12 Zeilen zu je 30 Zeichen, Rest 8,0 Pixel 3 = Font 12x16x2,  maximal 10 Zeilen zu je 20 Zeichen, Rest 0,0 Pixel 4 = Font 16x26x2,  maximal 6 Zeilen zu je 15 Zeichen, Rest 8,0 Pixel Beispiel mit Font #4:  F4&X000&Y000&H0$Z1&C&T1234567890123......& Linien oder Flächen Lbbbhhh& Im Prinzip wird eine definierte Fläche ab Position Xnnn& und Ynnn& mit der Farbe Hn& gefüllt. Die Höhe oder die Breite darf auch mit 000 angegeben werden, Ergebnis ist dann ein sehr dünner Strich. Mit größeren Werten wird der Strich breiter Beispiel: H0&C&H1&X000&Y100&L480002& H2&X000&Y140&L480004& H4&X000&Y180&L480008& H6&X000&Y220&L480016& H1&X100&Y000&L002320& H2&X140&Y000&L004320& H4&X180&Y000&L008320& H6&X220&Y000&L016320& Wirkung I0& oder I1& beim selben TFT-Display Das “Warnung”-Schild wurde in 3 Stufen hinter einander gemacht: 1.) Fläche mit roten Hintergrund 2.) Fläche, etwas kleiner, mit gelben Hintergrund 3.) Text “Warnung” mit gelben Hintergrund und rote Schriftfarbe
Kleine Flächen = Punkte
Wirkung von I0& und I1& beim selben Display mit der selben Platine
FENSTER Seite 1 FENSTER Seite 1