PICAXE a tři rozhraní pro jeden LCD displej

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.

1602AIBC1602AI 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.

 

LCD_kombi1

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.

LCD_kombi2

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.

lcd_kombi3

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.

LCD_kombi4

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ě 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