Lekce 10 - Arduino a I2C - LCD

11.03.2013 14:20

V této lekci si ukážeme k čemu nám je dobrá a jak můžeme využít tzv. I2C sběrnici. Tato umožňuje, pomocí 2-vodičového datového propojení, komunikaci mezi jedním nebo více procesory nebo integrovanými obvody s podporou I2C. Nechtěl bych se tady rozepisovat dopodrobna jak celá věc funguje, ale řekneme si o ní pár vět. 

     Ke sběrnici mohou být připojeny všechy integrované obvody, které zvládají speciální protokol komunikace. K těmto obvodům patří různé paměti, převodníkly D/A a A/D, senzory, obvody reálného času atd. Umožnujě připojení až 128 různých zařízení pomocí jak jsme si už řekli dvou obousměrných vodičů, z nihž jeden je SLC (Synchronous Clock) - hodinový signál a druhý vodič datový kanál SDA (Synchronous Data). Více o této problematice na wikipedi Naše arduino samozřejmě má podporu této komunikace a již vytvořenou a připravenou knihovnu. 

Pro naši ukázku jsem si sehnal několik součástek nebo modulů. V prvním případě si k Arduinu připojíme LCD diplej 16x2 znaků ke kterému jsem si pořídil levný I2C modul který je právě určen pro připojení k těmto druhům displejů. Dá se sehnat do 100 Kč takže za babku.

Na obrázku vidíte obě strany modulu. Jedno 4-pinové připojení pro komunikaci  a napájení a dále 16-pinové připojení LCD displeje. Já jsem nechtěl (ač je to již na to připraveno) připájet I2C LCD modul přímo k dipleji, z důvodu možného dalšího připojení k jinému LCD a složitému odpájení. 

Na LCD dipleji již jsem měl přípájen hřebínek s piny tak jsem spojil LCD s modulem pomocí malého nepájivého kontaktního pole. 

Musíte si dát pozor také na zapojení vývodů LCD. Ne všechny mají zapojeny stejně a modul I2C by vám ve spojení s displejem nefungoval. 

Zapojení pinů na modulu:

  1. Vcc
  2. GND
  3. V0 - nastavení kontrastu displeje
  4. RS
  5. RW
  6. E
  7. D0
  8. D1
  9. D2
  10. D3
  11. D4
  12. D5
  13. D6
  14. D7
  15. podsvětlení Vcc
  16. podsvětlení GND

V případě, že by piny na modulu a LCD nebyly shodné, propojte jej pomocí nepájivého kontaktního pole a propojovacích kabílků. Mě se to shodovalo, takže propojení je přímé. Jak můžete vidět na obrázku nahoře. Nyní nám již zbývá spojit modul s Arduinem. Na Arduinu Mega je sběrnice I2C na pinech 20 (SDA) a 21 (SCL). Opět schéma zapojení není potřeba, vše je jasně popsáno a i napájení modulu je jasné. Sami vidíte, že na Arduinu jsou použiti pouze 2 datové piny - paráda, zbyde spousta volných pinů pro další věci. Po zapnutí se vám může zdát, že nic nevidíte (jako mě), ale pouze stačilo nastavit kontrast pomocí modrého trimru na modulu a nápis se objevil.

 

Teď k programu. Nejprve si musíme stáhnout knihovnu LiquidCrystal_I2C buď z odkazu na  http://playground.arduino.cc nebo odtud. Nakopíruj te si jí do adresáře libraries jako v návodech v minulých tutoriálech. Vlastní zdrojový kód programu je velmi jednoduchý:

Další ukázka programu počítá dokola od 0 do 500:

Další podporované funkce knihovnou LiquidCrystal_I2C  :

 

  void clear();
  void home();
  void noDisplay();
  void display();
  void noBlink();
  void blink();
  void noCursor();
  void cursor();
  void scrollDisplayLeft();
  void scrollDisplayRight();
  void printLeft();
  void printRight();
  void leftToRight();
  void rightToLeft();
  void shiftIncrement();
  void shiftDecrement();
  void noBacklight();
  void backlight();
  void autoscroll();
  void noAutoscroll(); 
  void createChar(uint8_t, uint8_t[]);
  void setCursor(uint8_t, uint8_t); 
  virtual size_t write(uint8_t);
  void command(uint8_t);
 
Myslím, že již z angličtiny poznáte k čemu slouží, tak je na váš, které si vyzkoušíte a použijete ve svém vlastním programu. V dalším díle si ještě ke sběrnici I2C připojíme modul reálného času a tím vlasně s diplejem postavíme funkční digitální hodiny :-) .
 

Zdrojový kód a potřebné soubory najdete všechny zde.

 

 

 

Zpět

Diskusní téma: Lekce 10 - Arduino a I2C - LCD

Datum
Vložil
Titulek

Zapojení pinů na modulu:

s tímto zapojení jsem se ještě nesetkal.

Datum
Vložil
Titulek

Otočení textu

Ahoj, nevíte jestli je nějak možné otočit text na display? Jednoduše aby byl text čitelný když mám display otočený vzhůru nohama. Předem děkuji za odpověď.

Datum
Vložil
Titulek

Re: Otočení textu

Nie, display je znakovo orientovany.

Datum
Vložil
Titulek

data pouze 4-vodičově?

Zdravím všechny :) Nevíte někdo, jestli je možné provozovat display se zapojenými datovými piny pouze D4 až D7? Mám to takto řešené kvůli úspoře IO, ale teď mi došly i rezervy a tak bych si pořídil ten I2C modul. Ale k displayi se už nedostanu, abych tam dopájel D0 - D3. Je nějaké řešení? Díky za radu.

Datum
Vložil
Titulek

Připojení více I2C sensorů

Zdravím vás a prosím o radu, nebo nápad. Mám Arduino Mega a 8 I2C sensorů (teplota, vlhkost - Si7021) a řeším jejich vhodné zapojení - napadlo mě všechny komunikační vodiče připojit do pinů SDA a SCL na arduinu a postupně napájet jednotlivé sensory přes digitální piny (zapnout napájení prvního, odečíst veličiny, vypnout napájení, zapnout napájení druhého....). Ale narazil jsem na problém. Když přes napěťový dělič napájím sensor z pinu 5V (vstupní napětí má být 3,3V) vše funguje, ale pokud ho chci napájet přes digitální pin, musím ho (prasecky) za provozu nejdříve zapojit přes 5V pin a pak přepojit do digitálního pinu, jinak se nenabudí. Nevíte co s tím?

Neexistuje jiný způsob, jak zapojení udělat?

Datum
Vložil
Titulek

nejde nahrát

Prosím o pomoc když skopiruji kod do arduina tak to piše chybu :exit status 1
invalid conversion from 'int' to 't_backlighPol' [-fpermissive]

a červeně označilo tento řádek :
LiquidCrystal_I2C lcd(0x20,16,2);

Datum
Vložil
Titulek

Re: nejde nahrát

Měl jsem stejnou chybu , pomohla mě tato nformace:
http://robodoupe.cz/2015/i2c-adapter-pro-lcd-displej/

Datum
Vložil
Titulek

Zobrazuje se pouze 1. znak

Ahoj, mám Arduino Mega 2560 r3 a display 16/2. Po připojení a nahrání kódu vše ok, kromě toho že se mi zobrazuje pouze 1. znak.
Např. nechám vypsat "Ahoj lidi", ale display mi ukáže pouze "A".
Můžete někdo nějak poradit? Díky

Datum
Vložil
Titulek

Re: Zobrazuje se pouze 1. znak

Jsem na tom stejně. Pokud zadám lcd.print("a"); lcd.print("h"); tak to vypíše ah

Datum
Vložil
Titulek

Re: Zobrazuje se pouze 1. znak

Ahoj,
Mám úplně stejný problém.
Pokud vypisuje proměné tak vše funguje.
Ale pokud chci vypsat nějaké slovo vypíše jen první písmeno.

Prosím o radu...

1 | 2 | 3 | 4 | 5 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.