Prvotně publikováno na raspi.cz 27.5.2013.
Pro účely zobrazení provozních dat jsem potřeboval připojit nějaký levný LCD displej. Vzhledem k tomu, že se mi nechce obsazovat hejno I/O pinů běžným displejem s paralelním rozhraním, hledal jsem něco s I2C … a našel jsem: podsvícený displej 2×16 znaků s I2C sběrnicí za USD 8.69 (poštovné do ČR zdarma).
Technicky je to standardní paralelní displej 2×16 s nejběžnějším řadičem HD44780. Ten je připojen na I2C osmibitový I/O port expandér PCF8574 sedící na adrese 0×20 (adresa se dá změnit propojkami na desce). Tento expandér je výrazně jednodušší než mnou dříve použitý MCP23009 – není potřeba jej nijak nastavovat. Data zaslaná na I2C adresu expandéru se rovnou pošlou na výstupy.
Vzhledem k tomu, že displej je na 5 V, připojil jsem k němu I2C bus přes převodník úrovníza USD 2.60 (poštovné zdarma). Zapojení je jednoduché: na 5V straně jsem připojil +5V a zem; na 3.3V straně jsem napájení nezapojoval. A pak jsem na dva z pinů na 3.3V straně přivedl SDA a SCL z RasPi a na druhé straně tyto piny zapojil do displeje.
Mapování skutečných nožiček displeje na porty expandéru je toto:
bit 7 = backlight, 0=rozsviceno
bit 6 = RS; 0=command, 1=data
bit 5 = RW; 0=write, 1=read — takže vždy 0
bit 4 = E; 0=klid, 1=strobe
bit 3 = D7
bit 2 = D6
bit 1 = D5
bit 0 = D4
Řízení těchto displejů je poměrně jednoduché. Teorie je hezky popsána na tomto odkazu, ale pro praxi je možná jednodušší vyjít z pythoního samplu tady (pozor, předpokládá jiné zapojení nožiček).
Takže za další hodinku jsem napsal ovládací program v Javě… a zcela překvapivě to fungovalo.
Poslední, co je potřeba otestovat, je znaková sada displeje. Každý z těchto kontrolérů má jinou sadu znaků podle toho, pro jakého zákazníka byl stavěn. Já našel tohle:
Výsledek je uspokojivý.
Ukázkovou aplikaci najdete ke stažení zde. Vyžaduje nainstalovanou knihovnu pi4j.
NA ZÁVĚR ODKAZY
1) Teorie LCD řadičů HD44780 – http://joshuagalloway.com/lcd.html
2) Praktický sampl v Pythonu: http://www.raspberrypi-spy.co.uk/2012/07/16×2-lcd-module-control-using-python/
3) Stránky zdejšího diskutujícího MiKa, který řešil podobný problém. Připojoval displeje s paralelním připojením: http://www.astromik.org/raspi/16.htm a posléze i přes I2C, kde si ale expandér zapojil sám: http://www.astromik.org/raspi/32.htm