logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Podłączenie LCD 16x2 do Raspberry Pi z wykorzystaniem interfejsu I2C

ghost666 04 Sie 2015 12:53 9891 8
REKLAMA
  • Podłączenie LCD 16x2 do Raspberry Pi z wykorzystaniem interfejsu I2C
    LCD oparty o kontroler Hitachi HD44780 ma wymiar 16x2 znaków. Jest to standardowy, typowy LCD wykorzystywany w wielu urządzeniach i projektach hobbystycznych. Wykorzystać ten LCD można wykorzystując układ scalony PCF8574 i interfejs I²C do podłączenia do Raspberry Pi. Prosty skrypt w Pythonie, umieszczony poniżej, pozwala na wykorzystanie LCD.

    PCF8574 to 8 bitowy ekspander I²C, podłączony jest do LCD z kontrolerem HD44780 w następujący sposób, wykorzystując 4 bitowy interfejs komunikacji z tym wyświetlaczem.

    Podłączenie LCD 16x2 do Raspberry Pi z wykorzystaniem interfejsu I2C
    Pin ekspanderaPin LCD
    P0D4
    P1D5
    P2D6
    P3D7
    P4RS
    P5R/W
    P6E


    Pin A0 ekspandera podłączony jest do VCC poprzez rezystor 10kΩ, a pozostałe piny adresowe do masy. Daje to adres układu 0x21.

    Podłączenie LCD 16x2 do Raspberry Pi z wykorzystaniem interfejsu I2C


    Jeśli chcemy wykorzystać inny adres, to układy PCF8574 i PCF8574A dają nam dostęp do szerokiej gamy adresów:

    Podłączenie LCD 16x2 do Raspberry Pi z wykorzystaniem interfejsu I2C


    Przed rozpoczęciem pracy z Raspberry Pi i interfejsem I²C trzeba interfejs ten włączyć. Opis jak to zrealizować znaleźć można w tym projekcie.

    Po podłączeniu LCD i ekspandera i załadowaniu systemu z włączonym interfejsem I²C na RPi można sprawdzić czy system wykrywa obecność ekspandera PCV8574. Wykorzystać w tym celu można narzędzia z pakietu i2ctools, a mianowicie:

    i2cdetect 0 -y 

    lub
    i2cdetect 1 -y 


    To z której komendy korzystamy zależne jest od wersji naszego modułu. Rev 1 korzysta z interfejsu zerowego, a rev 2 z pierwszego.

    Dochodzimy teraz do kwestii oprogramowania wyświetlacza. Skrypt obsługujący LCD napisany został w Pythonie, poniżej znajduje się prosta biblioteka, pozwalająca na komunikację z wyświetlaczem poprzez I²C. Skrypt wymaga do działania biblioteki obsługującej smbus, nazywającej się python-smbus. Aby zainstalować bibliotekę wystarczy wpisać w linii komend:

    sudo apt-get install python-smbus


    Po skopiowaniu poniższy skrypt zapisać trzeba jako pylcdlib.py.

    Kod: Python
    Zaloguj się, aby zobaczyć kod


    A program główny wygląda następująco:

    Kod: Python
    Zaloguj się, aby zobaczyć kod


    Ten krótki skrypt zapisujemy jako test_lcd.py i wpisujemy w linii komend:

    sudo python test_lcd.py


    Uwaga

    Jeśli korzystacie z Raspberry Pi rev 2.0 to trzeba zmienić interfejs I²C z którego korzysta program. Moduły Rev 1 korzystają z interfejsu 0, a rev 2 z interfejsu 1, zatem w powyższym programie trzeba zmienić linijkę "lcd = pylcdlib.lcd(0x21,0)" na "lcd = pylcdlib.lcd(0x21,1)".

    Źródło: http://www.rpiblog.com/2012/07/interfacing-16x2-lcd-with-raspberry-pi.html

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • REKLAMA
  • #2 14899964
    PiotrPitucha
    Poziom 34  
    Witam
    Mam mieszane uczucia co do schematu, Raspberry na GPIO operuje poziomami 3,3V, we wszystkich zasilanych z 5V urządzeniach między nimi a Raspberry stosowane są konwertery poziomów napięć. Bałbym się tego podłączyć do swojej malinki.
    Układ jest dla zapalonych konstruktorów, bo gotową płytkę takiego konwertera można kupić za cenę mniejszą niż elementy.
    Duży plus za opis konfiguracji.
    Pozdrawiam
  • #3 14900074
    pawel1029384756
    Poziom 21  
    Sprawdziłem poziomy napięć w kilku notach katalogowych i jeśli chodzi o samą komunikacje, to nie powinno być żadnego problemu, ale nie mam pewności, czy wyświetlacz przy zasilaniu 3,3V będzie dalej działał prawidłowo. Trzeba by to chyba sprawdzić w praktyce przy konkretnym wyświetlaczu. Z drugiej strony są zestawy edukacyjne z mikrokontrolerami ARM i tam nie ma żadnych konwerterów napięć, a kontroler jest zasilany napięciem 3,3V. Więc na tej podstawie można stwierdzić, że rozwiązanie z artykułu jest poprawne.
    Podoba mi się opis programowania, bo równie dobrze można zrobić taką małą bibliotekę do obsługi LCD na PC, tylko wykorzystać usb, albo proste i przyjemne lpt.
  • REKLAMA
  • #4 14900409
    PiotrPitucha
    Poziom 34  
    Witam
    Co do podłączenia SDA SCL to w notach nie znalazłem jakie napięcie wymusza SDA przy zasilaniu 5V, podejrzewam że jednak 5V, chyba że jedynymi rezystorami podciągającymi są rezystory zewnętrzne
    Mamy natomiast "gwarantowany" katalogowo problem transmisyjny.
    W manualu podają że Vih dla SDA i SCL wynosi minimum 0,7Vdd, czyli 3,5V , nawet zakładając że na wyjściu maliny mamy idealnie 3,3V to znaczy że dla wejścia PCFa panuje tam nieustannie stan niski.
    Podejrzewam że w realnym układzie jest lepiej niż w katalogu, ale nie mamy prawa zakładać że coś ma działać skoro według katalogu nie będzie działać.
    Ciekawy jestem jak to rozwiązano w sprzedawanych konwerterach z Chin, czy też dostępnych w Botlandzie, jeśli ktoś takie posiada to proszę o info
    Co do wyświetlacza to są specjalne wersje na 3,3V , niektóre przeznaczone na 5V działają przy 3,3V ale mam też takie które do prawie 4V nie dają odznak życia.
    Pozdrawiam
  • REKLAMA
  • #5 14900586
    darkp1
    Poziom 12  
    Standardowy LCD z HD44780 nie będzie działać z napięciem niższym niż 5V. Sprawdzone w praktyce :cry:
  • #6 14900681
    100
    Poziom 14  
    darkp1 napisał:
    Standardowy LCD z HD44780 nie będzie działać z napięciem niższym niż 5V. Sprawdzone w praktyce :cry:

    Niestety jesteś w błędzie sama logika pracuję bezproblemu przy 3V3 jedynie przy zasilaniu z tego napięcie trzeba do potencjometru od kontrastu zamiast masy podać napięcie ujemne -3V3 lub -5 np. za pomocą scalaka ICL7660.
    Wtedy niektóre pracują jeszcze poprawnie przy 2V !!.
    Też spr w praktyce prze zemnie ,a także w najnowszych zestawach ATB od ATNELA.
  • REKLAMA
  • #7 14901392
    dondu
    Moderator na urlopie...
    100 napisał:
    Niestety jesteś w błędzie sama logika pracuję bezproblemu przy 3V3 jedynie przy zasilaniu z tego napięcie trzeba do potencjometru od kontrastu zamiast masy podać napięcie ujemne -3V3 lub -5 np. za pomocą scalaka ICL7660.

    Rozumiem, ze kolega przedkłada eksperymenty przed parametry określone przez producenta LCD i sterownika?
    Jeśli tak, to proszę to robić w zaciszu własnego biurka i nie wprowadzać tego typu rewelacji na forum.
    Wszystko bowiem zależy od producenta konkretnego LCD i zastosowanej w nim wersji sterownika.
  • #8 14901670
    100
    Poziom 14  
    dondu napisał:
    100 napisał:
    Niestety jesteś w błędzie sama logika pracuję bezproblemu przy 3V3 jedynie przy zasilaniu z tego napięcie trzeba do potencjometru od kontrastu zamiast masy podać napięcie ujemne -3V3 lub -5 np. za pomocą scalaka ICL7660.

    Rozumiem, ze kolega przedkłada eksperymenty przed parametry określone przez producenta LCD i sterownika?
    Jeśli tak, to proszę to robić w zaciszu własnego biurka i nie wprowadzać tego typu rewelacji na forum.
    Wszystko bowiem zależy od producenta konkretnego LCD i zastosowanej w nim wersji sterownika.

    Czasami trzeba poeksperymentować wiadomo że gdyby trzeba było zastosować lcd w urządzeniu 3V3 produkowanego na masową skalę do dałbym tam specjalny lcd 3V3 (Które są zazwyczaj droższe i mniej popularne) ale do zastosowań domowych,hobbystycznych myk ze scalakiem sprawdza się bardzo dobrze.

    I tam gdzie trzeba przestrzegam dokumentacji i wytycznych producentów
REKLAMA