Újra SPFD5408 TFT kijelző




Mint az első cikkből kiderült, nem igazán volt a sikeres az adott könyvtár átalakítás, csak nagyon minimális utasítás készlettel volt használható a kijelzőnk. Most ezt orvosolandó egy kedves ismerősöm nem sajnálva időt és fáradtságot kicsit belepiszkált egyik-másik mintaprogramba és új példa progikat is létre hozott a kezelhetőség érdekébe. Ez a cikk Tamási András jóvoltából, és saját kezéből született.


A környezet, amiben próbáltam ezt a TFT LCD shield-et:
======================================================
- Lenovo T400 notebook
- Kubuntu 14.04 LTS - linux oprendszer
- Arduino "HOURLY BUILDS" - 1.6.6-ként jelentkezik be - linux 32 bit-es verzió
- AVR-Duino / R3 (Arduino Diecimila) (tavir shop)
- Mega 2560 klón (vatera - nem R3, viszont kb. harmadába került)
- TFT LCD 2,4", érintőképernyő, microSD kártyahely - www.mcufriend.com (vatera)



Több internetről letölthető librari-t is próbáltam, mire végre az egyik
mintaprogramja kiírta a soros monitorra a TFT meghajtó IC típusát: st7783.
Innentől lehetett célzottan keresni.

Két librari vált be többé-kevésbé, de mindkettőben akad hibás működés.
Mindegyiknek megadom a linkjét, ahonnan letöltöttem. (De pár dologba
belepiszkáltam, érdemes a "piszkált" változatot használni, vagy legalább
megnézni.)
Mindkét librari-t először a saját mintaprogramjaival teszteltem.


1. Adafruit_GFX_Library - SWTFT_Shield páros. (Ezzel "szórakoztam" először.)
---------------------------------------------
- https://github.com/adafruit/Adafruit-GFX-Library
- https://github.com/adafruit/Touch-Screen-Library
- https://github.com/Smoke-And-Wires/TFT-Shield-Example-Code (SWTFT)

Ebben a librari-ben hibás a a bmp kép forgatása. Nem kerestem, hogy a
forgatási hiba miből ered, hogy a tesztprogramban, vagy
a rotáció illetve bmp megjelenítő eljárásban van-e a hiba.

Ebben viszont rövid teszt alapján jónak láttam "fillRoundRect" és a
"drawRoundRect" eljárásokat. (Lásd következő librari.)

2. st7783 librari. (Ezzel írtam a saját mintaprogramokat.)
------------------
Ezt egy Arduino forumban található linkről töltöttem le.
A fórum: http://forum.arduino.cc/index.php?topic=286790.0
Letölteni a "st7783.zip" állományt kell, ennek linkje szinte az adott fórum
elején található meg.

A rotáció ezzel a libraryval nem mindegy, mert van olyan állás, amiben mind
a "fillRoundRect", mind a "drawRoundRect" hibásan rajzol, marad benne egy
fekete csík.
A "fillRoundRect"-ben van némi egyéb megjelenítési hiba is, ezért a
mintaprogramban a gomboknál előbb ezt rajzolom meg, és utána ugyan olyan
mérettel a "drawRoundRect"-et.

-----

A két librari esetén eltérő az inicializálás menete, más a neve is az ehhez
tartozó eljárásoknak. (Ez a mintaprogramokból könnyen kinyerhető.)
A "TouchScreen" librari-ben a "Point/TSPoint" elnevezés más.

Az Adafruit-SWTFT páros esetén a SWIFT.cpp-ben választani kell milyen
"board"-dal dolgozunk:
- #include "uno_24_shield.h"
- #include "mega_24_shield.h"

A mega board esetén nem működik a memória kártya, mert az ehhez szükséges "pin"-ek
másutt vannak a két board-on.

 

Saját kiegészítések
===================

- Írtam két mintaprogramot, az egyik kirajzolja a kódtáblát, a másik minta az
érintőképernyős menüre, illetve számok bevitelére mutat egyszerű mintát.

- Először értékelhető működést az Adafruit - SWTFT librari-kkel sikerült
elérnem, de a másik librari (st7783) tűnik jobbnak. Az általam írt
mintaprogramokat is utóbbi alatt lőttem be, majd azért kipróbáltam az
előbbiekkel is.

- Mindenhez megcsináltam a "keywords.txt" file-t.

- A kapott mintaprogramokba itt-ott kicsit belejavítottam, ezt az adott
programok elején, esetenként közben is kommentben jeleztem.
A módosításoknál meghagytam az eredeti sorokat is, csak kommentbe tettem.

- Csináltam egy módosított "glcdfont.c" (font leíró) file-t. Az ékezetes
karakterek kód kiosztása eléggé zagyvára sikeredett, mert menet közben
változtattam az elképzelésemen, hogy mit mi helyére tegyek. Sokat nem
foglalkoztam vele, mert a tervezett éles programjaimhoz majd szeretnék
készíteni egy szebb fontokat adó file-t. (Az alapból 5*7 pixeles fontok
a nagyobb méretnél egyszerű nagyítással keletkeznek, ezért nagyobb méret
esetén durván pixelesek.)

- Az ékezetes fontokhoz módosítottam a "drawChar"- és "drawString"-ben
a "c" paraméter típusát (utóbbiban nem biztos, hogy kell), mert nem vitte
a 127 feletti karaktereket.

- Az Adafruit - SWTFT párosban nem mennek az ékezetes karakterek, hiába
állítom át a módosított fontokra. A hiba okát nem kerestem.

- A font átrajzolás segítéséhez írtam egy perl scriptet, ami a font leíró
file-ból kiemelt táblázat alapján kirajzolja a fontok képét.

- Kipróbáltam az általam írt két mintaprogramot az Adafruit - SWTFT párossal
is, a fentebb már említett inicializálás és eljárás név különbségeket
módosítva szintén működött. Hiányosság a már említett 127 feletti karakterek
eredeti változatának hozása, mintha valamiért az átírás ellenére sem
cserélődne a fontokat leíró file.

- A másik különbség, hogy az érintőképernyő érzékelése sem működik rendesen.
Érzéketlenebb, helyenként látszólag egyáltalán nem érzékel. Nem kerestem
az okát.

- Ezekkel a librari-kkel működik a mega-board is, kivéve a memória kártyás
dolgokat, de annak mint fent már említettem hardware oka van.

- A megpiszkált SWIFT.cpp-ben látható egy olyan próbálkozás, hogy a board
kiválasztását egy a főprogramban lévő #define segítségével lehessen megtenni,
ne a librari-be kelljen belepiszkálni. Ezt itt nem sikerült működésre bírnom.
Nem ismerem, mi a helyes a sztenderd C++-ban, hogy ez itt hiányosság, vagy
a PIC-hez való MPLABX-ben plusz, mert ott működik ez a megoldás.
Az is lehet, hogy csak rosszul próbálom megcsinálni. Ha valaki tudja a megoldást,
akkor tomi1121@freemail.hu-ra kérek jelzést.

A  mintaprogramok letölthetők : ST7783

Hogyan tovább?
==============

Mivel a továbbiakban szeretnék éles alkalmazásban is ilyen TFT LCD-t használni,
nem akarok itt megállni. Interneten olcsón beszerezhető, a hivatalos üzletekben
hagyományos karakterest sem nagyon kapok ennyiért. Az internetes árakat nézve is
megéri, mert ha veszek egy karakterest és hozzá egy billentyűzetet, pénzben
nagyjából ugyan ott vagyok, és akkor mennyivel nagyobb a lehetőségem a
megjelenítésben. Ellenérv lehet, hogy egy billentyűzetet könnyebb nyomkodni,
ez a képernyő messze nem olyan érzékeny, mint pl. az okostelefonomé.



Elképzelések:
-------------

- Egy szebb rajzolatú font-készlet, eleve nagyobbra tervezve, mert az alap
5*7 pont elég nehezen olvasható. Pillanatnyilag a "fejtörés" állapotában van,
valahogy úgy kell kialakítani, hogy csak a szükséges karakterek legyenek benne
- természetesen az ékezetesek is, ez nálam alap - de a leíró táblázat mérete
lehetőleg ne legyen túl nagy.

- Összenézni az eljárásokat a két librari-ben. Alapnak az st7783-at tekintem,
(a tévedés lehetőségét fenntartva) nekem ez tűnik ehhez az LCD meghajtó IC-hez
jobbnak. Ami ebben nem tökéletes, javítani az Adafruit szerint.

- Az Adafruit-ban szemmel láthatóan több eljárás, tehát több funkció van,
megnézni, mit érdemes esetleg átvenni.
Szintén ebben láttam egy "Adafruit_GFX_Button" osztályt is, de még nem
foglalkoztam vele. Ebben ha jól látom, van megnyomott, elengedett állapot.
Persze PC grafikus felületet nyilván a sebesség miatt nem várhatunk, de
feltételezem szebb, mint amit a mintaprogramban elkövettem.

- Kidobni a számomra felesleges funkciókat, ne foglalják a helyet.

- Kissé más vonulat, de számomra érdekes. Ezt beüzemelni más fejlesztő
környezetben (mpIDE, UECIDE, esetleg MPLABX) amennyiben sikerül. Oka,
hogy szeretném a librari-ket PIC-ekhez is használni. Semmi esetre sem
szeretnék "hitvitát" nyitni, nekem pillanatnyilag szimpatikusabbak a PIC-ek.

A ”megpiszkált” könyvtárak letölthetők innen:


Az eljárás a szokványos: kicsomagol, bemásol az Arduino / librarie könyvtárba,

példa program megnyitása a fájl/ minták könyvtárból.


Még egyszer: Az Adafruit-SWTFT páros esetén a SWIFT.cpp-ben választani kell milyen
"board"-dal dolgozunk:
- #include "uno_24_shield.h"
- #include "mega_24_shield.h"

ezt mindenki állítsa át saját HW-ja szerint.


Még egy kiegészítés: . Az Adafruit-SWTFT páros nem véletlen láthatóan gyorsabb. Tele van inline sorokkal. Ahhoz meg kéne az Atmel proci utasításkészlete. Mivel alapvetően nem ezek, hanem a PIC32-es sorozat a célom, kár ezt átírnom. De ha tényleg meg akarom csinálni arra, hát bazi nagy meló lesz. Bár "csak" a közvetlen hardware elérést kell újra megírni, a ráépített C részek használhatóak, és vissza kell fejteni az st7783 leírás alapján, mit, hogyan csinál.

Egy szóval PIC-re átírás még egy darabig nem lesz elérhető :)


Tamási András


Előző cikk:  SPFD5408 TFT kijelző 141111