Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:ft800-driver

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2016:ft800-driver [2016/12/16 10:55]
Jeroným Juráň [FT800]
2016:ft800-driver [2017/01/14 12:56] (aktuální)
Jeroným Juráň [Demonstrace funkcí]
Řádek 10: Řádek 10:
  
 Driver je určen primárně pro FT800. Tento řadič je specifický tím, že umožňuje tvorbu pokročilých GUI (grafických uživatelských rozhraní) s minimálními nároky na řídící mikrokontrolér. Obvod je připojován pomoci SPI (serial peripherial interface) s rychlostí až 30MHz nebo pomocí i2c (Inter-Integrated Circuit) do rychlosti 3.4MHz. Varianta FT800 umožnuje připojení displejů o rozlišení až 512x512 pixelů, přičemž každá barva je reprezentována 6-ti vodiči. Jde tedy o 18-bitovou hloubku (262144 barev). Obvod dále podporuje připojení rezistivní dotykové vrstvy. Uživateli pak poskytuje nejen souřadnice stlačeného bodu, ale také informaci o objektu na daných souřadnicích. Řadič dále umožňuje generování PWM mono audio signálu a je tedy vhodný i pro složitá GUI. Driver je určen primárně pro FT800. Tento řadič je specifický tím, že umožňuje tvorbu pokročilých GUI (grafických uživatelských rozhraní) s minimálními nároky na řídící mikrokontrolér. Obvod je připojován pomoci SPI (serial peripherial interface) s rychlostí až 30MHz nebo pomocí i2c (Inter-Integrated Circuit) do rychlosti 3.4MHz. Varianta FT800 umožnuje připojení displejů o rozlišení až 512x512 pixelů, přičemž každá barva je reprezentována 6-ti vodiči. Jde tedy o 18-bitovou hloubku (262144 barev). Obvod dále podporuje připojení rezistivní dotykové vrstvy. Uživateli pak poskytuje nejen souřadnice stlačeného bodu, ale také informaci o objektu na daných souřadnicích. Řadič dále umožňuje generování PWM mono audio signálu a je tedy vhodný i pro složitá GUI.
-Malé náročnosti pro řídící mikrokontrolér je dosaženo mimo jiné pomocí widgetů, což jsou složitější prvky jako například tlačítka, posuvníky, hodiny, stavové ukazatele a mnohé další. Uživatelská aplikace může každému vykreslenému prvku nebo objektu přiřadit tag, který slouží jako identifikátor objektu. Následným sledováním tagu může aplikace zjišťovat,​ zda došlo k dotyku objektu a libovolným způsobem reagovat.+Malé náročnosti pro řídící mikrokontrolér je dosaženo mimo jiné pomocí widgetů, což jsou složitější prvkyjako například tlačítka, posuvníky, hodiny, stavové ukazatele a mnohé další. Uživatelská aplikace může každému vykreslenému prvku nebo objektu přiřadit tag, který slouží jako identifikátor objektu. Následným sledováním tagu může aplikace zjišťovat,​ zda došlo k dotyku objektu a libovolným způsobem reagovat.
 Pro vykreslení obrazovky se vytváří DL (Display-list). Pro jeho tvorbu je vymezená paměť velikosti 8192B, do které může mikrokontrolér zapisovat příkazy a následně je nechat vykreslit pomocí dedikovaného registru. Do této paměti může ale zapisovat také grafický koprocesor, který vytvoří widgety. Proto není vhodné do této paměti zapisovat a využívat raději FIFO koprocesoru k vykreslování jednoduchých prvků i widgetů. Tento blok paměti má velikost 4096B a pro jeho obsluhu má řadič dva registry sloužící jako zapisovací a čtecí ukazatel. Zapisovací ukazatel musí po zapsání příkazů inkrementovat aplikace. Naopak čtecí ukazatel obsluhuje grafický koprocesor. Jsou-li si oba ukazatele rovné, znamená to, že všechny příkazy už byly zpracovány a zapsány do DL. FIFO je realizováno jako kruhový zásobník. Pro vykreslení obrazovky se vytváří DL (Display-list). Pro jeho tvorbu je vymezená paměť velikosti 8192B, do které může mikrokontrolér zapisovat příkazy a následně je nechat vykreslit pomocí dedikovaného registru. Do této paměti může ale zapisovat také grafický koprocesor, který vytvoří widgety. Proto není vhodné do této paměti zapisovat a využívat raději FIFO koprocesoru k vykreslování jednoduchých prvků i widgetů. Tento blok paměti má velikost 4096B a pro jeho obsluhu má řadič dva registry sloužící jako zapisovací a čtecí ukazatel. Zapisovací ukazatel musí po zapsání příkazů inkrementovat aplikace. Naopak čtecí ukazatel obsluhuje grafický koprocesor. Jsou-li si oba ukazatele rovné, znamená to, že všechny příkazy už byly zpracovány a zapsány do DL. FIFO je realizováno jako kruhový zásobník.
 +Pro jednodušší aplikace lze využít některý z dostupných nástrojů umožňující vytvářet aplikace pomocí grafického prostředí nebo použití arduino knihovny. Nicméně ani jedno z těchto řešení se neukázalo pro vývoj aplikací příliš vhodné.
  
 {{https://​www.digchip.com/​companies_news/​photos/​ft800.jpg}} {{https://​www.digchip.com/​companies_news/​photos/​ft800.jpg}}
Řádek 49: Řádek 50:
  
 === Funkce pro koprocesor ===  === Funkce pro koprocesor === 
-Tyto funkce zapisují do FIFO koprocesoru který následně vytváří DL. Veškereé widgety jsou umístěny v této části.+Tyto funkce zapisují do FIFO koprocesorukterý následně vytváří DL. Veškereé widgety jsou umístěny v této části.
 Příkladem může být vykreslení tlačítka. Příkladem může být vykreslení tlačítka.
-Nejdříve je kontrolován staf FIFO, poté násleuje ​opcode a parametry specifické pro daný příkaz (mapříklad souřadnice,​ rozměry, vypisovaný řetězec,​...),​nakonec je inkrementován zapisovací ukazatel FIFO (včetně zarovnání na 4B).+Nejdříve je kontrolován staf FIFO, poté následuje ​opcode a parametry specifické pro daný příkaz (mapříklad souřadnice,​ rozměry, vypisovaný řetězec,​...),​nakonec je inkrementován zapisovací ukazatel FIFO (včetně zarovnání na 4B).
 <​code>​ <​code>​
 void cmd_button(sint16_t x, sint16_t y,sint16_t w, sint16_t h, sint16_t font, uint16_t options,​const char *s){        //draws a button void cmd_button(sint16_t x, sint16_t y,sint16_t w, sint16_t h, sint16_t font, uint16_t options,​const char *s){        //draws a button
Řádek 87: Řádek 88:
  
 === Uživatelské funkce ===  === Uživatelské funkce === 
-Tato sekce se sice dále dělí na několik částí, nicméně obsahem všech jsou funkce které souvisí s tvorbou GUI a jsou universálně použitelné pro různé projekty jako například : inicializace FT800, inicializace barev, inicializace řetězců, inicializace bitmamp a uživatelských fontů, kalibrace dotykové vrstvy, čtení tagu nebo souřadnic, konverze řetězců, inteligentní zalamování řetězců, počítadlo FPS, a další. ​+Tato sekce se sice dále dělí na několik částí, nicméně obsahem všech jsou funkcekteré souvisí s tvorbou GUI a jsou universálně použitelné pro různé projekty jako například : inicializace FT800, inicializace barev, inicializace řetězců, inicializace bitmamp a uživatelských fontů, kalibrace dotykové vrstvy, čtení tagu nebo souřadnic, konverze řetězců, inteligentní zalamování řetězců, počítadlo FPS, a další. ​
  
 ====== Možnosti aplikací ====== ====== Možnosti aplikací ======
-Driver byl použit již ve více projektech různé složitosti. Všechny aplikace jsou stejně strukturované a je tudíž velmi jednoduché vytvořit novou aplikace. Postačuje zkopírovat několik ​souboru ​a pak už jen vytvářet jednotlivé obrazovky. Kostra nového projektu je tedy daná a je výsledkem postupného vývoje.+Driver byl použit již ve více projektech různé složitosti. Všechny aplikace jsou stejně strukturované a je tudíž velmi jednoduché vytvořit novou aplikaci. Postačuje zkopírovat několik ​souborů ​a pak už jen vytvářet jednotlivé obrazovky. Kostra nového projektu je tedy daná a je výsledkem postupného vývoje.
 Poutřebné soubory : Poutřebné soubory :
 - ftf.c,​ftf.h,​tft_cfg.h ​ - hlavní modul ve kterém se nachází jednotlivé obrazovky - ftf.c,​ftf.h,​tft_cfg.h ​ - hlavní modul ve kterém se nachází jednotlivé obrazovky
Řádek 100: Řádek 101:
 - tft_types.h ​ - definice konfigurační struktury (jazyk,​podsvit,​barevné schema, ...) - tft_types.h ​ - definice konfigurační struktury (jazyk,​podsvit,​barevné schema, ...)
 ==== Stavový automat ==== ==== Stavový automat ====
-Aplikace je strukturována jako stavový automat se stavovou proměnnou scr. Jednotlivé obrazovky často přistupují ke stejným datům a většina proměnných je tak pro modul globálních. Během běhu programu je potřeba periodicky provádět některé operace jako například kontrola stavů časovačů nebo čtení tagu. Tyto operace jsou prováděny mezi vykreslením obrazovek z hlavní smyčky která ​volá obrazovky volá. Obrazovky ("​screeny"​) jsou tedy implementovány jako jednorázové vykreslení,​ ne jako smyčky.  ​+Aplikace je strukturována jako stavový automat se stavovou proměnnou scr. Jednotlivé obrazovky často přistupují ke stejným datům a většina proměnných je tak pro modul globálních. Během běhu programu je potřeba periodicky provádět některé operace jako například kontrola stavů časovačů nebo čtení tagu. Tyto operace jsou prováděny mezi vykreslením obrazovek z hlavní smyčkykterá obrazovky volá. Obrazovky ("​screeny"​) jsou tedy implementovány jako jednorázové vykreslení,​ ne jako smyčky.  ​
  
 <​code>​ <​code>​
Řádek 127: Řádek 128:
 ==== Obrazovky (screeny),​DL ==== ==== Obrazovky (screeny),​DL ====
 Každé překreslení obrazovky je reprezentováno vykreslením jednoho displej listu (DL). Každý DL začíná voláním cmd_dlstart,​ dále pokračuje vykreslováním dalších příkazů s případnými výpočty. Ukončuje ho příkaz cmd(display()) a vykresluje ho cmd_swap(). Každé překreslení obrazovky je reprezentováno vykreslením jednoho displej listu (DL). Každý DL začíná voláním cmd_dlstart,​ dále pokračuje vykreslováním dalších příkazů s případnými výpočty. Ukončuje ho příkaz cmd(display()) a vykresluje ho cmd_swap().
-Driver je koncipován bez vlastního zásobníku tj. příkazy se posílají do FT800 přímo a je tedy možné mezitím provádět výpočty (např. souřadnic),​ což by při jednorázovém odeslání zásobníku nebylo možné. Navíc by bylo nutné alokovat 4KB SRAM což by omezilo použití driveru pro menší mikrokontroléry.+Driver je koncipován bez vlastního zásobníkutj. příkazy se posílají do FT800 přímo a je tedy možné mezitím provádět výpočty (např. souřadnic),​ což by při jednorázovém odeslání zásobníku nebylo možné. Navíc by bylo nutné alokovat 4KB SRAMcož by omezilo použití driveru pro menší mikrokontroléry.
 Obrazovky jsou vykresleny typicky s 20 až 70 FPS podle jejich složitosti. Obrazovky jsou vykresleny typicky s 20 až 70 FPS podle jejich složitosti.
  
Řádek 153: Řádek 154:
  
 ==== Fonty, bitmapy ==== ==== Fonty, bitmapy ====
-FT800 má integrovány dva druhy fontů v několika velikostech. Pokud aplikace vyžaduje font například s českou diakritikou je možné si tento font pomocí poskytovaného nástroje pro příkazovou řádku vygenerovat. K tomu je potřeba soubor fontu a textový soubor se znaky které mají být vytvořeny.+FT800 má integrovány dva druhy fontů v několika velikostech. Pokud aplikace vyžaduje font například s českou diakritikouje možné si tento font pomocí poskytovaného nástroje pro příkazovou řádku vygenerovat. K tomu je potřeba soubor fontu a textový soubor se znakykteré mají být vytvořeny.
 Výsledná data lze vložit například jako hlavičkový soubor do kódu. Dále je potřeba font do řadiče nahrát a správně jej inicializovat (custom_font_init). ​ Výsledná data lze vložit například jako hlavičkový soubor do kódu. Dále je potřeba font do řadiče nahrát a správně jej inicializovat (custom_font_init). ​
-Aby bylo možné font použít je nejdříve nutné konvertovat řetězce na správné kódování (znaky ve vytvořeném fontu jsou kódovány podle pořadí v textovém souboru před konverzí kdežto řetězce v kódu jsou dány vývojovým prostředím). K tomu slouží další uživatelské funkce obsahující převod znaků podle kódovací tabulky. ​+Aby bylo možné font použítje nejdříve nutné konvertovat řetězce na správné kódování (znaky ve vytvořeném fontu jsou kódovány podle pořadí v textovém souboru před konverzíkdežto řetězce v kódu jsou dány vývojovým prostředím). K tomu slouží další uživatelské funkce obsahující převod znaků podle kódovací tabulky. ​
  
-Podobně jako s fonty je možné dedikovaným nástrojem konvertovat bitmapy v různých formátech. Ty je následně potřeba stejně jako fonty nahrát do paměti a inicializovat (ardesa,​rozměry,​ handle,​formát,​..).+Podobně jako s fonty je možné dedikovaným nástrojem konvertovat bitmapy v různých formátech. Ty je následně potřebastejně jako fontynahrát do paměti a inicializovat (ardesa,​rozměry,​ handle,​formát,​..).
 ==== Retězce, jazyky ====  ==== Retězce, jazyky ==== 
-Aby bylo možné měnit jazyk aplikace obsahuje program vícerozměrné pole s adresami konstantních řetězců. První index určuje text (např. "​Nastavení","​Vytvořit položku",​...),​ druhý index vybírá jazyk.+Aby bylo možné měnit jazyk aplikaceobsahuje program vícerozměrné pole s adresami konstantních řetězců. První index určuje text (např. "​Nastavení","​Vytvořit položku",​...),​ druhý index vybírá jazyk.
 ==== Barevná schémata ====  ==== Barevná schémata ==== 
 Podobně jako u řetězců obsahuje aplikace tabulku barev. První index určuje tzv. třídu (tlačítko typu jedna-BUT1, text typu 1 -STR1, bitmapy popředí -BMFG, gradient na pozadí GR11, atd..), druhý index par určuje složku RGB. Pro změnu barevného schématu stačí předat driveru adresu jiné tabulky barev. ​ Podobně jako u řetězců obsahuje aplikace tabulku barev. První index určuje tzv. třídu (tlačítko typu jedna-BUT1, text typu 1 -STR1, bitmapy popředí -BMFG, gradient na pozadí GR11, atd..), druhý index par určuje složku RGB. Pro změnu barevného schématu stačí předat driveru adresu jiné tabulky barev. ​
-Jelikož grafický kontext používá tři druhy barev (COLOR_RGB,​FGCOLOR,​BGCOLOR) byla v ytvořena funkce cmd_set_color která nastavování zjednodušuje.+Jelikož grafický kontext používá tři druhy barev (COLOR_RGB,​FGCOLOR,​BGCOLOR)byla v ytvořena funkce cmd_set_colorkterá nastavování zjednodušuje.
  
  
Řádek 169: Řádek 170:
  
  
-{{https://​youtu.be/​gMtHJN_q7O8}}+{{youtube>gMtHJN_q7O8?medium}}
  
 +Na následujících snímcích je vidět hardware vytvořený v rámci diplomové práce a ukázková aplikace. Tato zařízení jsou řízena pomocí mikrokontrolérů s jádry ARM (STM - STM32F030CC) realizují vývojové desky pro bezdrátový přenos audio signálu ve standardu WiSA. Jelikož konkrétní aplikace je zatím ve vývoji, byla pro demonstraci pouze přeportována jiná aplikace, která ukazuje, že vytvořená driver je možné použít pro různé platformy.
 +
 +{{:​2016:​tx.jpg?​300|}}
 +{{:​2016:​rx.jpg?​300|}}
 +{{:​2016:​imag0148.jpg?​600|}}
 ====== Závěr ====== ====== Závěr ======
-Projekt popisuje vytvořený driver umožňující plné využití grafického řadiče FT800. Tento řadič spolu s vytvořeným ovladačem umožňuje tvorbu pokročilých GUI při minimálních nárocích na mikrokontrolér. Software byl již využit pro několik profesionálních produktů, na dalších se pracuje a další jsou v plánu (vztaženo k datu vytvoření tohoto dokumentu).+Projekt popisuje vytvořený driver umožňující plné využití grafického řadiče FT800. Software je universálné a může být použit pro libovolnou platformu. Tento řadič spolu s vytvořeným ovladačem umožňuje tvorbu pokročilých GUI při minimálních nárocích na mikrokontrolér. Software byl již využit pro několik profesionálních produktů, na dalších se pracuje a další jsou v plánu (vztaženo k datu vytvoření tohoto dokumentu).
  
2016/ft800-driver.1481882149.txt.gz · Poslední úprava: 2016/12/16 10:55 autor: Jeroným Juráň