hamik164

16. díl – OctopusLAB
Serial TFT Display (STD) – užitečná pomůcka pro vývojáře

Z oblíbeného a rozšířeného Arduino UNO se po připojení „shieldu“ TFT display 320x240px stane chytrý sériový TFT displej. STD je pak připojený klasickým UARTem, pouze pomocí jediného datového vodiče Tx (transmit). Tento nápad vznikl již před několika lety, jako reakce na potřebu debugovat (hledat chyby v programu a odladit potřebné procedury) a tak rychleji oživit a efektivněji otestovat malá zařízení. Později se STD stal součástí i několika samostatných projektů. Například to byl první displej pro sterolitografickou 3D tiskárnu 3DWARF (nyní pod značkou PRUSA SL1). Tam jsme ještě zkoušeli využít i dotykové ovládání, ale pro potřeby komerčního produktu to nebylo použitelné. Pak se objevily displeje pracující na podobném principu, testovali jsme například verzi od firmy Nextion, která má v sobě výkonnější procesor, více paměti a tak umožní vytvářet už poloprofesionální aplikace.


Na následujícím obrázku vidíte základní zapojení ATtiny + STD. My jsme zde využili vývojovou desku DEVboard, která nám umožní pomocí Arduino NANO přímo ATtiny programovat přesně tak, jak jsme si popsali v předchozích dílech.
Jako ukázku jsme zvolili projekt, který na vstupním pinu P3 „čte“ analogovou hodnotu a tuto hodnotu zobrazuje na displeji (jako RAW – „syrové“ číslo, které vrací AD převodník).

Projekt Sériového displeje má klasicky svou samostatnou stránku na githubu: https://github.com/octopusengine/serial-display
Celý kód je opět open-source, to znamená že pod licencí MIT je k dispozici zdarma a každý si ho může podle libosti upravovat.
Ještě musíme poznamenat, že displejů, které na první pohled vypadají stejně, je celá řada a ne na všechny jsou dostupné ovladače. My jsme začínali na knihovně SWIFT, pak jsme přešli novější Adafruit_TFTLCD. Vždy je lepší, když máte možnost si funkčnost programu na daném displeji vyzkoušet.

Jak to funguje?

Princip chytrého displeje spočívá v jednoduchém komunikačním protokolu, který nám umožní na dané pozici zvolenou barvou nakreslit bod, čáru nebo přímo zobrazit řetězec textu. Připojené zařízení využívá jak paměť takovéhoto displeje (potažmo Arduina), tak některé jeho základní dovednosti.
Stačí po sériové lince poslat znak, nebo sekvenci znaků, kde některé jsou řídící, a displej se o vše stará sám. Uvedeme si pár fragmentů kódu našeho konkrétního příkladu:

#include <SoftwareSerial.h> // nezbytná inicializace:
SoftwareSerial TSerial(UART_RX, UART_TX);
...
TSerial.begin(9600);        // a spuštění - v setup() 
...
TSerial.print("C"); // "C" = Clear -  smazání displeje
TSerial.print("R1QAttiny - serial display*"); // R1Q-> 
// "Q txt *" - text na řádku 1 základní velikosti, END "*"
TSerial.print("h10"); 
// "h num" horizontal line - vodorovná linka na y pozici 100

TSerial.print("c"); // "c num" or "W num" = set color: 
0=BLACK; 1=WHITE; 2=YELLOW; 3=RED; 4=GREEN; 5=MAROON; 6=MAGENTA; 7=CYAN; 8=NAVY; 9=DIMGRAY; 
...
sensorValue = analogRead(ANALOG_PIN); // AD převod
TSerial.print("Q");                   // zobrazení na STD 
TSerial.print(String(sensorValue)); 
TSerial.print("*"); 

Jak vidíte, když displej připojíme k maličkému ATtiny (máme vzadu vyvedený konektor na RX, TX, 5V, GND), tak se z něj rázem stane mnohem výkonnější stroj. Je samozřejmé, že pro výsledný projekt by se kód integroval do Arduino UNO, ale my chceme využít především možnosti ladění programu, takže máme displej připojen jen v době vývoje.

Zde je zmíněný ukázkový projekt:
https://github.com/octopusengine/hamik_cz/blob/master/attiny/attiny-hamik164/attiny-hamik164.ino
který zobrazuje změřenou analogovou hodnotu, dá se zkalibrovat jako voltmetr a získaná hodnota se může vykreslovat graficky (pomalý „osciloskop“ – stovky Hz nebo logický analyzátor), to vše s ATtiny.