Obvykle má daný LCD displej jedno rozhraní, typ BC1602AI má ale pro uživatele připravená rovnou tři (nebo dokonce čtyři) a tak poskytuje výborné podmínky pro porovnání jak z hlediska vlastností, tak náročnosti programové obsluhy.
BC1602AI je sériový LCD displej 2×16 znaků s možností přepínání vstupu a komunikací RS232 (v úrovních TTL), I2C nebo SPI, některé verze mají navíc rozhraní USB na samostatném „mini“ konektoru. V ukázkovém příkladě si stručně ukážeme obsluhu tří základních rozhraní na výpisu jednoduchého textu.
K přepínání slouží propájení propojek na zadní straně displeje, znaková sada je standardní, povely jsou podrobně popsané v katalogovém listu. Podsvícení a kontrast displeje lze nastavit programově.
RS232
Displej umožňuje povelem změnu rychlosti přenosu na 300, 1200, 2400, 9600, 14400, 19200, 57600 a 115200 Bd. Povelem lze vypsat nastavenou přenosovou rychlost. Příklad vypíše „představení“ displeje – na první řádek jeho typ, na druhý rozhraní.
RS232 v úrovních TTL vystačí s jediným datovým vodičem (jediným pinem mikrokontroléru), nicméně každé zařízení takto připojené bude muset mít své vlastní připojení (nevytváří sběrnici) a komunikace je dost pomalá, na druhou stranu nečiní problém ani přenos na větší vzdálenosti.
REM BC1602AI s RS232 2x16 - PICAXE 08M2 pause 100 ;čas na náběh setfreq m8 high 2 ;nastavení H pro COM serout 2,T9600_8,($FE,$51) ;vymazání displeje serout 2,T9600_8,("Displej BC1602AI") serout 2,T9600_8,($FE,$45,$40) ;kurzor na 2. řádek serout 2,T9600_8,("rozhrani RS232") end
I2C
I2C vytváří dvouvodičovou sběrnici s možností adresování dalším vodičem, dovoluje připojit více (slave) zařízení na stejné piny. Je rychlejší než RS232, ale obecně mnohem pomalejší než SPI, Obsluha komunikace je ve všech novějších mikrokontrolérech PICAXE a je stejně jednoduchá jako RS232. Displej umožňuje povelem změnit asresu I2C, případně nastavenou adresu vypsat.
REM BC1602AI s I2C 2x16 - PICAXE 08M2 pause 100 ;čas na náběh hi2csetup i2cmaster, $A0, i2cslow, i2cbyte writei2c ($FE,$51) ;vymazání displeje writei2c ("Displej BC1602AI") writei2c ($FE,$45,$40) ;kurzor na 2. řádek writei2c ("rozhrani I2C") end
SPI
SPI je obecně (dokonce řádově) nejrychlejší, ale v konkrétním případě displeje to neplatí. Jak I2C tak SPI mají omezenou frekvenci hodin asi na 100 kHz. SPI dovoluje současný přenos dat oběma směry po dvou vodičích, k tomu potřebuje další vodič pro hodinový signál a každé zařízení vlastní signál, kterým je selektováno. V daném případě je zapojen jen vodič pro přenos dat do displeje (nelze z displeje číst data, i když displej sám to umožňuje). SPI je ve své podstatě vysílání a příjem dat pomocí synchronních posuvných registrů a takto také lze i realizovat logickými obvody, je-li třeba. V případě PICAXE lze SPI obsluhovat třemi způsoby:
-
S HW podporou mikrokontroléru, připravené povely ale mají až PICAXE řad X1 a X2. To je nejrychlejší a nejefektivnější, v daném případě se však toto řešení bohužel nedá použít, protože i nejvíce zpomalené hodiny od mikrokontroléru (X2 8MHz / 64) jsou rychlejší, než displej zvládne.
-
S podporou příkazů pomocí programové obsluhy a samostatným ovládáním selectu, nicméně i tyto příkazy jsou funkční až u řad X1 a X2. Tento způsob dovoluje dosáhnout menších rychlostí, proto byl použit i k ovládání displeje. Bohužel, nejde vyslat řetězec znaků a odesílání jednoho po druhém je značně nepohodlné. Čísla se musí převést na znaky. V ukázce jsou na začátku před mazáním vyslány dvě obětované mezery, které zajistí správné nastavení úrovní na pinech (první z nich se přijme chybně). Ukázka je pro PICAXE 20X2.
REM BC1602AI s SPI 2x16 - PICAXE 20X2 REM B.5-data, B.6-select, B.7-clock pause 100 ;čas na náběh low B.6 ;nastavení select spiout B.7,B.5,3,(" "," ") ;nastavení úrovní high B.6 ;zrušení select low B.6 spiout B.7,B.5,3,($FE,$51) ;smazání displeje high B.6 pause 500 ;čas na mazání low B.6 ;nápis 1. řádek spiout B.7,B.5,3,("D","i","s","p","l","e","j"," ") spiout B.7,B.5,3,("B","C","1","6","0","2","A","I") high B.6 low B.6 spiout B.7,B.5,3,($FE,$45,$40) ;začátek 2. řádku high B.6 pause 10 ;čas na přesun kurzoru low B.6 ;nápis 2. řádek spiout B.7,B.5,3,("r","o","z","h","r","a","n","i") spiout B.7,B.5,3,(" ","S","P","I") high B.6 end
-
Další možností je plně programová obsluha SPI vlastním programem. Tento způsob zvládá jen velmi malé rychlosti, nicméně je použitelný na všech PICAXE. Ukázka je pro PICAXE 08M2. Také nejde vyslat řetězec znaků, v tomto případě jsou znaky předem uloženy do EEPROM a následně vypisovány jeden po druhém v cyklu. Čísla se musí převést na znaky.
REM BC1602AI s SPI 2x16 - PICAXE 08M2 REM C.1-data, C.2-select, C.4-clock data 0,("Displej BC1602AI") ;text pro 1. řádek data 16,("SPI programove ") ;text pro 2. řádek low C.4 ;výchozí úroveň CLK pause 100 ;čas na náběh b0=$FE gosub posli ;mazání displeje b0=$41 gosub posli for b5=0 to 15 ;zápis 1. řádek read b5,b0 gosub posli next b5 b0=$FE gosub posli ;kurzor na 2. řádek b0=$45 gosub posli b0=$40 gosub posli for b5=16 to 31 ;zápis 2. řádek read b5,b0 gosub posli next b5 end posli: ;pošle znak z b0 (b1,b2,b3 prac.) b2=128 ;maska se postupně mění low C.2 ;nastavit select for b3=1 to 8 ;pro 8 bitu v bytu b1=b0 and b2 ;vymaskovat if b1>0 then high C.1 else low C.1 endif ;data pulsout c.4,1 ;pulz hodin - zápis bitu b2=b2/2 ;upravit masku next b3 high C.2 ;konec selectu return
Kat. 1