0702
LCD displej a sběrnice I2C
18.12.2015


Nejprve jsem si zkusil přímé paralelní připojení LCD displeje. Fungovalo na první pokus. Není třeba stahovat žádné knihovny. Knihovna pro toto zapojení a tento displej je zabudovaná přímo v programu. Trimrem se řídí kontrast displeje. Odpor 330Ω snižuje jas displeje. Bez této úpravy se může displej použít místo baterky.

Zkrácený testovací prográmek jsem použil ze stránek https://www.arduino.cc/en.
  1. #include <LiquidCrystal.h>
  2. // initialize the library with the numbers of the interface pins
  3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  4. void setup() {
  5.   // set up the LCD's number of columns and rows:
  6.   lcd.begin(16, 2);
  7.   // Print a message to the LCD.
  8.  lcd.print("hello, world!");
  9. }
  10. void loop()
  11. {
  12. }




Ovládání displeje přes sběrnici I2C

Pro toto ovládání je třeba si stáhnout knihovnu LIQUIDCRYSTAL_I2C. Podle http://arduino8.webnode.cz jsem si knihovnu stáhnul z adresy http://hmario.home.xs4all.nl. A teď nastalo tápání. Na internetu jsem našel tři adresy sběrnice I2C pro tento modul. Byly to 0x27, 0x3F a 0x20, a to jsem nevěděl, jestli nejsou ještě nějaké jiné. Postupně jsem je zkoušel dosadit. Při druhé adrese 0x3F modul ožil. Dělal ale úplně něco jiného, než jsem chtěl. Ono knihoven s tímto názvem je na internetu víc a od různých autorů. Mám ošklivý dojem, že nejsou mezi sebou kompaktibilní. Hledal jsem možnost jak nahranou knihovnu odstranit a při hledání jsem kliknul na nápis INSTALLED. Otevřela se nabídka UPGRADE. Kliknul jsem na ní a po instalaci nové verze knihovny se všechno v pořádku rozeběhlo.
Použitý testovací program je ze stránek http://pastebin.com/iXH6dvVv.
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>    // vytvoří objekt lcd
  3. LiquidCrystal_I2C lcd(0x3F,16,2);  //nastaví jeho adresu  0x3F a 16 znaků na 2 řádcích
  4.  
  5. void setup()
  6. {
  7.   lcd.init();// inicializuje displej   
  8.   lcd.backlight();                  // zapne podsvětlení
  9.   lcd.print("Ahoj lidi...");       // vypíše text
  10. }
  11.  
  12. void loop()
  13. {
  14. }
Zkusil jsem také nastavit pozice. Všechno fungovalo k mé spokojenosti. Ještě čekám až mi přijde paměť EEPROM a hodiny reálného času. Všechno chci připojit přes sběrnici I2C.
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. LiquidCrystal_I2C lcd(0x3F,16,2);  
  5.  
  6. void setup()
  7. {
  8.   lcd.init();
  9.   lcd.backlight();
  10.   lcd.setCursor(0, 0);  // první pozice v prvním řádku
  11.   lcd.print("3.5 MHz");
  12.   lcd.setCursor(10, 0);
  13.   lcd.print("OK1CJB");
  14.   lcd.setCursor(0, 1);
  15.   lcd.print("invert.V");
  16.   lcd.setCursor(10, 1);  // desátá pozice v druhém řádku
  17.   lcd.print("manual"); 
  18. }
  19.  
  20. void loop()
  21. {
  22. }


Po výměně kolíků za dutinky na modulu sběrnice I2C vznikla poměrně kompaktní jednotka. SMD odpor 220Ω/1206 pro LED osvětlení jsem připájel přímo mezi plošky kolíků.