Wprowadzenie do modułu adaptera I2C LCD

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście przyjrzymy się modułowi adaptera LCD opartemu na „I2C” lub „IIC” lub „I kwadrat C”, który zredukuje połączenia przewodowe między Arduino a wyświetlaczem LCD do zaledwie 2 przewodów, oszczędzając również mnóstwo pinów GPIO dla inne czujniki / napędy itp.

Zanim omówimy moduł adaptera I2C LCD, ważne jest, aby zrozumieć, czym jest magistrala I2C i jak działa.



Ale i tak nie musisz być ekspertem od protokołu I2C, aby pracować z wymienionym adapterem LCD.

Ilustracja połączenia I2C:

Ilustracja połączenia I2C:

I2C lub IIC to skrót od „Inter-Integrated Circuit” to szeregowa magistrala komputerowa wynaleziona przez półprzewodniki firmy Philips, dziś znane jako półprzewodniki NXP. Ten system autobusowy został wynaleziony w 1982 roku.



Co to jest autobus?

Magistrala to grupa kabli / przewodów, które przenoszą dane z jednego układu scalonego do innego układu scalonego / jednej płytki drukowanej do innej płytki drukowanej.

Główną zaletą protokołu magistrali I2C jest to, że obsługiwany mikrokontroler lub czujniki lub układy scalone mogą być połączone tylko dwoma przewodami. Zdumiewającą zaletą tego protokołu jest to, że możemy podłączyć 127 różnych układów scalonych lub czujników / sterowników do jednego urządzenia nadrzędnego, którym jest zwykle mikrokontroler z zaledwie 2 przewodami.

Jakie są dwa przewody I2C?

Dwa przewody to SDA i SCL, które są odpowiednio danymi szeregowymi i zegarem szeregowym.

Zegar szeregowy lub SCL jest używany do synchronizacji transmisji danych przez magistralę I2C. SDA lub dane szeregowe to linia danych, w której rzeczywiste dane są przesyłane z urządzenia nadrzędnego do podrzędnego i odwrotnie. Urządzenie główne steruje zegarem szeregowym i decyduje, z którym urządzeniem slave musi się komunikować. Żadne urządzenie slave nie może najpierw zainicjować komunikacji, tylko urządzenie master może to zrobić.

Szeregowa linia danych jest dwukierunkowa i niezawodna, po wysłaniu każdego zestawu 8-bitowych danych urządzenie odbierające odsyła bit potwierdzenia.

Jak szybki jest protokół I2C?

Oryginalna wersja protokołu I2C opracowana w 1982 roku obsługiwała 100 Kbps. Następna wersja została znormalizowana w 1992 r., Która obsługiwała 400 kb / s (tryb szybki) i obsługiwała do 1008 urządzeń. Następna wersja została opracowana w 1998 roku z szybkością 3,4 Mb / s (tryb dużej szybkości).

Kilka innych wersji I2C zostało opracowanych w latach 2000, 2007, 2012 (z trybem 5Mbps Ultra-Fast), a ostatnia wersja I2C została opracowana w 2014 roku.

Dlaczego rezystory podciągające w magistrali I2C?

SDA i SCL są „otwarte-drenowe”, co oznacza, że ​​obie linie mogą być NISKIE, ale nie mogą zasilać linii WYSOKI, więc rezystor podciągający jest podłączony do każdej linii.

Ale większość modułów I2C, takich jak LCD lub RTC, ma wbudowane rezystory podciągające, więc nie musimy ich podłączać, chyba że jest to określone.

Rezystor pull-up / pull-down: Rezystor pull-up to rezystor podłączony do linii + Ve zasilania, aby utrzymać poziom logiczny linii na WYSOKI, jeśli linia nie jest ani wysoka, ani niska.

Rezystor obniżający to rezystor podłączony do linii –Ve zasilania, aby utrzymać poziom logiczny linii na NISKIM, jeśli linia nie jest ani wysoka, ani niska.

Zapobiega to również przedostawaniu się szumów do przewodów.

Mamy nadzieję, że podrapaliśmy powierzchnię protokołu I2C, jeśli potrzebujesz więcej informacji na temat protokołu I2C, surfuj dalej

YouTube i Google.

Przyjrzyjmy się teraz modułowi I2C LCD:

Wyprowadzenia modułu I2C LCD

Istnieje 16 pinów wyjściowych dla wyświetlacza LCD, które można przylutować bezpośrednio z tyłu modułu LCD 16 X 2.

Piny wejściowe to + 5V, GND, SDA i SCL. Piny SDA i SCL na Arduino Uno to odpowiednio piny A4 i A5. Dla Arduino mega SDA to pin # 20, a SCL to pin # 21.

Porównajmy, jak to wygląda, gdy podłączymy wyświetlacz LCD do Arduino bez adaptera I2C iz adapterem.

Bez adaptera I2C:

Arduino bez adaptera I2C

Z adapterem I2C:

Arduino za pomocą adaptera I2C

Adapter jest przylutowany z tyłu wyświetlacza LCD i jak widzimy zaoszczędziliśmy mnóstwo pinów GPIO do innych zadań, a także możemy kontynuować dodawanie kolejnych 126 urządzeń I2C do pinów A4 i A5.

Należy pamiętać, że standardowa biblioteka ciekłokrystaliczna nie będzie działać z tym adapterem I2C LCD. Istnieje do tego specjalna biblioteka, która zostanie wkrótce omówiona, a my pokażemy, jak używać tego modułu wraz z przykładem kodowania.

Jak podłączyć adapter I2C do wyświetlacza 16 x 2

W powyższych sekcjach artykułu poznaliśmy podstawy protokołu I2C i dokonaliśmy podstawowego przeglądu modułu adaptera I2C LCD. W tym poście dowiemy się, jak podłączyć moduł adaptera I2C LCD do wyświetlacza LCD 16 x 2 i zobaczymy, jak programować na przykładzie.

Główną zaletą protokołu I2C jest to, że możemy podłączyć obsługiwane czujniki / urządzenia wejścia / wyjścia w zaledwie dwóch liniach i jest to pomocne w przypadku Arduino, ponieważ ma ograniczone piny GPIO.

Zobaczmy teraz, jak podłączyć moduł do LCD.

Moduł posiada 16 pinów wyjściowych i 4 piny wejściowe. Możemy po prostu przylutować adapter do tylnej części wyświetlacza LCD 16 x 2. Z 4 pinów wejściowych dwa to + 5V i GND, pozostałe dwa to SDA i SCL.

Widzimy, że zaoszczędziliśmy wiele pinów w Arduino dla innych zadań wejścia / wyjścia.

Kontrast wyświetlacza możemy regulować regulując potencjometr małym śrubokrętem (zaznaczony na czerwono).

Podświetlenie można teraz kontrolować w samym kodzie programu:

podświetlenie LCD()

Spowoduje to włączenie podświetlenia wyświetlacza LCD.

lcd.noBacklight ()

Spowoduje to wyłączenie podświetlenia wyświetlacza LCD.

Widzimy, że jest podłączona zworka, która jest podświetlona na czerwono, jeśli zworka zostanie usunięta, podświetlenie pozostaje wyłączone niezależnie od polecenia programu.

Teraz konfiguracja sprzętu jest zakończona, zobaczmy teraz, jak kodować. Proszę pamiętać, że moduł I2C LCD wymaga specjalnego

biblioteka i wstępnie zainstalowana biblioteka „liquidcrystal” nie będą działać.

Możesz pobrać bibliotekę I2C LCD stąd i dodać do Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Z poprzedniego postu dowiedzieliśmy się, że urządzenia I2C mają adres, po którym master lub mikrokontroler może zidentyfikować urządzenie i komunikować się.

W większości przypadków dla modułu I2C LCD byłby to adres „0x27”. Ale inna produkcja może mieć inny adres. Musimy tylko wpisać w programie poprawny adres, a wtedy wyświetlacz LCD będzie działał.

Aby znaleźć adres wystarczy podłączyć 5V do Vcc i GND do GND Arduino i pin SCL modułu I2C do A5 i SDA do A4 i wgraj poniższy kod.

Spowoduje to przeskanowanie podłączonych urządzeń I2C i wyświetlenie ich adresu.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 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(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Prześlij kod i otwórz monitor szeregowy.

Jak widzimy, wykryto dwa urządzenia i wyświetlają się ich adresy, ale jeśli chcesz znaleźć tylko adres modułu I2C LCD, nie powinieneś podłączać żadnych innych urządzeń I2C podczas skanowania.
Podsumowując, otrzymaliśmy adres „0x27”.

Teraz zrobimy cyfrowy zegarek jako przykład, ponieważ są dwa urządzenia I2C, moduł LCD i RTC lub moduł zegara czasu rzeczywistego. Oba moduły zostaną połączone dwoma przewodami.

Pobierz następującą bibliotekę:
Biblioteka RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Jak ustawić czas na RTC

• Otwórz Arduino IDE i przejdź do Plik> Przykład> DS1307RTC> ustaw czas.
• Prześlij kod z kompletnym sprzętem i otwartym monitorem szeregowym i gotowe.

Schemat obwodu:

Program:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Uwaga:

LiquidCrystal_I2C lcd (0x27, 16, 2)

„0x27” to adres, który znaleźliśmy podczas skanowania, a 16 i 2 to liczba wierszy i kolumn na wyświetlaczu LCD.

W przypadku RTC nie musimy szukać adresu, ale znaleźliśmy podczas skanowania „0x68”, ale i tak biblioteka RTC sobie z tym poradzi.

Zobaczmy teraz, jak bardzo zmniejszyliśmy przeciążenie przewodów i zaoszczędziliśmy piny GPIO w Arduino.

Tylko 4 przewody są podłączone do wyświetlacza LCD, zaznaczone na czerwono.

Również tylko 4 przewody są podłączone z Arduino, a moduł RTC dzieli te same linie.

Do tej pory zdobyłeś podstawową wiedzę na temat I2C i korzystania z modułu adaptera I2C LCD.
Podoba ci się ten post? Czy masz jakieś pytania? Prosimy o wyrażenie w komentarzu, możesz otrzymać szybką odpowiedź.




Poprzedni: Prosty obwód testera diody tranzystorowej Dalej: Wykonaj ten obwód przedłużacza zasięgu pilota zdalnego sterowania na podczerwień