Levný LCD displej připojený k I2C

lcd_fotoPro úč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 0x20 (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:

lcd_tabulka

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

4 thoughts on “Levný LCD displej připojený k I2C

  1. Používám podobné zapojení, jen bez toho převodníku úrovní. i2c je zapojeno s otevřeným kolektorem s pull-up rezistory na straně raspi a PCF8574 funguje spolehlivě i s 3,3V vstupy.

  2. Zpachtil jsem si neco podobneho, ale mam problem s rychlosti. Okem jde videt jak se display prepisuje. Zkousel jsem to nejak urychlit, ale nezadarilo se.

    • Jestli máš displej připojený přes nějaký I2C expander, a pokud to ten expander umožňuje, můžeš zkusit zvýšit baudrate té komunikační linky z defaultních 100kHz třeba až na 400kHz.
      To by mělo výrazně zrychlit komunikaci.

      Provádí se to změnou hodnoty v souboru:
      /sys/module/i2c_bcm2708/parameters/baudrate

      To číslo udává rychlost v Hz. Takže pro změnu na 400kHz se tam přepíše číslo 100000 na 400000.

      Po restartu RasPi se ale ta rychlost vrátí zpátky na 100kHz. Určitě je možné to někde nastavit na trvalo, ale zatím jsem to nezkloušel.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.