Monthly Archives: Červen 2013

Levný LCD displej připojený přes I2C

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