poniedziałek, 6 czerwca 2016

LCD 1602 na I2C - problem z wyświetlaniem



Samo podpięcie wyświetlacza do Arduino lub do innego kompatybilnego układu nie jest dużym problemem. Mimo to i dostępnej dużej ilości gotowych schematów w internecie i zastosowaniu się do nich, na ekranie nie pojawia się oczekiwany tekst mimo iż kontrast działa poprawnie (możemy nim sterować potencjometrem).








Wykluczając sam układ (ustalamy że jest w pełni sprawny) pozostaje kwestia oprogramowania czyli biblioteki a konkretnie NewLiquidCristal,  LiquidCrystal lub LiquidCrystal_I2C. Jeżeli korzystamy z konwertera używamy biblioteki z końcówką I2C. Pierwszy problem na jaki możemy się natknąć to wersja biblioteki z jakiej korzystamy. Przez  ostatnie lata biblioteka przeszła nieco zmian i była modyfikowana przez wiele osób co spowodowało, że wiele poradników w internecie odsyła do nieaktualnej już wersji biblioteki lub do wersji mocno zmodyfikowanej. Drugi problem  to adres (rzadko kto to sprawdza) na jakim pracuje nasze urządzenie.

Przy korzystaniu z I2C pierwszym element, na który trzeba zwrócić uwagę, to właśnie adres i ten element powinniśmy sprawdzać jako pierwszy. Jeżeli poniższy szkic nie kompiluje się poprawnie należy doinstalować do IDE bibliotekę "Wire".



#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); }













































Po uruchomieniu w serial monitorze (9600baud) ukaże nam się adres - u mnie jest to 0x27. Poniżej prosty szkic.



#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.begin(); delay(20); lcd.setCursor(0, 0); } void loop() { lcd.print("LCD READY"); delay(2000); lcd.setCursor(0, 0); delay(2000); }

















Link do biblioteki której używam


Ta wersja biblioteki działa u mnie prawidłowo także przy korzystaniu z ESP8266.


Zawartość katalogu należy wkleić do katalogu "libraries" Arduino. Jeżeli zainstalowane środowisko nie posiada folderu o nazwie LiguidCrystal_I2C to należy go ręcznie otworzyć i tam wkleić wypakowane pliki.

Brak komentarzy:

Prześlij komentarz