Kurs Arduino – #7 – Wyświetlacz tekstowy, LCD 2×16

Kurs Arduino – #7 – Wyświetlacz tekstowy, LCD 2×16

Do tej pory nasza komunikacja z płytką Arduino była stosunkowo ograniczona. Mogliśmy użyć diod święcących do sygnalizowania pewnych stanów lub UART do połączenia z komputerem.

Ten ostatni sposób pozwalał na stosunkowo dużo jednak był mało mobilny. Teraz przyszła pora na pierwszy program z wykorzystaniem LCD.

Krótki wstęp o wyświetlaczach

Podłączenie i sterowanie wyświetlaczem graficznym lub tekstowym może wydawać się pozornie bardzo trudne. W końcu na ekranie mamy ogrom pikseli i każdym trzeba jakoś sterować. Spójrz jeszcze raz na zdjęcie z pierwszej części kursu Arduino:

Przykładowy napis na LCD tekstowym.

Przykładowy napis na LCD tekstowym.

Każda litera składa się z wielu pikseli, które poukładane są w prostokątach -16 w każdym, z dwóch wierszy. To jest właśnie wyświetlacz tekstowy LCD 2x16 (lub 16x2). Zapis ten oznacza, że w jednej chwili na ekranie możemy wyświetlić 2 wiersze, po 16 znaków.

Jest to ograniczenie typowe dla wyświetlaczy tekstowych, służących do pokazywania napisów (i małych symboli). Innaczej byłoby w przypadku wyświetlaczy graficznych, tam mamy większą swobodę, ponieważ wszystkie piksele ułożone są w jednym prostokącie np.: 128x128. Dzięki temu możliwe jest dodatkowo rysowanie np.: linii, czy okręgów.

Jak zmusić wyświetlacz do pracy?

Tak jak wspomniałem litery składają się z pixeli. Sterowanie każdym z osobna generowałoby dużą, ba - olbrzymią ilość linii sterujących. Oczywiście wszystko działa znacznie prościej, ponieważ wyświetlacze wyposażone są we wbudowane sterowniki! Najpopularniejszy z nich to HD44780.

Najczęściej w opisie danego LCD znajdziesz "Wyświetlacz zgodny ze sterownikiem HD44780". Wtedy wiadomo, że jego obsługa będzie wręcz banalna!

Zestaw elementów do kursu

Gwarancja pomocy na forum Błyskawiczna wysyłka

Teraz możesz kupić zestaw ponad 70 elementów niezbędnych do przeprowadzenia ćwiczeń z kursu u naszych dystrybutorów!

Kup w Botland.com.pl

Jak w takim razie należy przesyłać tekst do wyświetlacza? Konieczne jest podłączenie około 12 przewodów. Oczywiście tylko część z nich służy do komunikacji, pozostałe to zasilanie oraz inne sygnały, które nie zmieniają się podczas pracy wyświetlacza.

Najczęściej, ekran taki, jest wyposażony w 16-pinowe złącze:

LCD_2x16

Wyświetlacz tekstowy LCD 2x16 znaków.

Licząc od lewej, podłączenia prezentują się jak poniżej. Znaczenie wszystkich pinów od 4 do 12 nie jest najważniejsze, przedstawiam je dla ciekawskich czytelników:

  1. GND - masa
  2. Vcc - zasilanie dodatnie, 5V
  3. V0 - regulacja kontrastu
  4. RS - wybór rejestrów (komenda, dane)
  5. RW - wybór opcji odczyt/zapis
  6. E - zezwolenie na zapis do rejestrów
  7. D0 - dane
  8. D1 - dane
  9. D2 - dane
  10. D3 - dane
  11. D4 - dane
  12. D5 - dane
  13. D6 - dane
  14. D7 - dane
  15. Vpod - zasilanie dodatnie podświetlenia
  16. GNDpod - masa podświetlenia

Piny od 1 do 3 służą do zasilania układu, od 4 do 14 do sterowania, zaś pod 15 i 16 znajduje się wewnętrzna dioda święcąca, która podświetla ekran. Wyświetlacze kompatybilne ze sterownikiem HD44780 mogą komunikować się z otoczeniem w trybie 4-bitowym oraz 8-bitowym.

W pierwszym z nich konieczne jest 7 połączeń Arduino <-> wyświetlacz. Natomiast w przypadku trybu 8-bitowego należy zrobić ich aż 11. Korzystając z mniejszej ilości wyprowadzeń zachowamy praktycznie wszystkie opcje wyświetlacza.

Podłączenie wyświetlacza do Arduino

Arduino jest wyposażone w specjalną bibliotekę przygotowaną do wyświetlania tekstów. Jednak zanim przejdziemy do pracy z wyświetlaczem pora go podłączyć. Na szczęście w tej części kursu nie będzie wielu schematów montażowych - wystarczy tylko kilka. Pierwszy znajduje się poniżej.

Potrzebne są: Arduino, płytka stykowa, LCD, potencjometr oraz oczywiście przewody.

Podłączenie LCD do Arduino.

Podłączenie LCD do Arduino.

Wyjaśnienia może wymagać potencjometr. Jest on podłączony w roli dzielnika napięcia, za pomocą którego regulowany jest kontrast wyświetlacza. Druga ważna sprawa, to podświetlenie. Napięcie można podłączyć przez rezystor ograniczający prąd lub bezpośrednio (ponieważ najczęściej w środku wyświetlacza jest już wbudowany rezystor). Kwestia doboru jasności, każdy musi tutaj samodzielnie eksperymentować. U mnie ładny efekt uzyskałem bez rezystora.

Po podłączeniu Arduino do prądu (tutaj wystarczy zasilanie z USB) ekran powinien się świecić. Tak jak widoczne jest to poniżej.

Efekt źle ustawionego kontrastu.

Efekt źle ustawionego kontrastu (po lewej).

Kręcąc potencjometrem od kontrastu uzyskać można jeden z dwóch wariantów. Pusty ekran lub górny wiersz zapełniony prostokątami. Czy oznacza to uszkodzenie wyświetlacza?

Nie! To dobry objaw, sprawny wyświetlacz podłączony do prądu powinien właśnie  tak wyglądać. Dlatego ustaw w tym momencie potencjometr w taki sposób, aby widzieć prostokąty.

Teraz możemy przejść do programowania...

Pierwszy program - wyświetlanie tekstu

Tak jak w przypadku serwomechanizmów w Arduino znajdziemy osobną bibliotekę ułatwiającą pracę z wyświetlaczami tekstowymi. Tym razem jej nazwa to LiquidCrystal. Na początku przykład, a później omówienie programu. Nie wgrywaj jeszcze kodu do swojego Arduino!

Biblioteka do obsługi wyświetlacza umieszczona jest w pliku: LiquidCrystal.h. Aby rozpocząć pracę z wyświetlaczem należy zainicjować nowy obiekt. Służy do tego linijka:

Zapis taki informuje, że podłączyliśmy wyświetlacz nazwany lcd do pinów od 2 do 7. Konkretnie sygnały zostały podpięte kolejno do: 2 (RS), 3 (Enable), 4 (D4), 5 (D5), 5 (D6) i 7 (D7).

Funkcja lcd.begin(znaki, linie) ustawia ilość znaków i wierszy, na których będzie wyświetlany tekst. W naszym przypadku wyświetlacz pozwala na 16 znaków, w każdej z 2 linii.

Funkcja lcd.setCursor(pozycja, wiersz) ustawia kursor w zadanej pozycji. Przykładowo zapis (0,0) oznacza początek napisu od pierwszego znaku, pierwszego wiersza. Z kolei zapis (0,1), to tekst od początku drugiej linijki.

Najważniejsza funkcja - lcd.print(napis) wypisuje na wyświetlaczu tekst. Podczas wyświetlania kolejnych liter przesuwa się kursor. Dlatego kolejne wywołanie lcd.print zaczyna się od miejsca, gdzie był koniec poprzedniego tekstu. Chyba, że pomiędzy wywołaniami skorzystamy z setCursor. Wszystko stanie się jasne podczas kolejnych przykładów.

Teraz pora, aby wgrać program do Arduino! Efekt powinien prezentować się tak, jak poniżej:

Tekst wyświetlany na LCD z Arduino!

Tekst wyświetlany na LCD z Arduino!

Co jeśli nie działa?

Jeśli na ekranie nie widzisz tekstu sprawdź poniższe 3 punkty, rozwiązują one 99,99% problemów!

  1. Brak zasilania podłączonego do LCD
  2. Błędna kolejność połączenia sygnałów z Arduino
  3. Złe ustawienie kontrastu

Ostatni punkt został pogrubiony, bo jest najłatwiejszy w sprawdzeniu, a początkujący często o nim zapominają! Mam nadzieję, że po sprawdzeniu powyższych punktów wszystko zadziałało. Teraz możemy zająć się omówieniem najważniejszych funkcji powiązanych z LCD. Jednak najpierw proste zadanie domowe

Zadanie domowe 7.1

Napisz program, który wyświetli na ekranie w pierwszej linii Twoje imie, a w drugiej adres forbot.pl
Zdjęcie obowiązkowo wrzuć w komentarzu!

Włączanie i wyłączanie kursora - Arduino

Tak jak w edytorze tekstu, na LCD możemy mieć włączony lub wyłączony kursor. Będzie to znak "_" umiejscowiony za ostatnio napisanym znakiem. Domyślnie jest on wyłączony. Do sterowania służą dwie, proste funkcje: lcd.cursor() oraz lcd.noCursor().

Gdy kursor zostanie włączony:

Otrzymamy następujący efekt:

Arduino_LCD4

LCD sterowane z Arduino - włączony kursor.

Oczywiście efekty te można mieszać, sprawdźcie sami efekt programu, gdy w loop wpiszemy:

Inna wersja kursora...

Jest jeszcze zbliżona funkcja, która z automatu wprowadza miganie kursora. Tym razem jest nim jednak zamalowany prostokąt. Funkcje do włączenia i wyłączenia tej opcji nazywają się bardzo analogicznie: lcd.noBlink() oraz lcd.blink(). Użycie tej funkcji jest bardzo proste, przykład:

Efekt migającego kursora:

Arduino_LCD5

Migający kursor - Arduino i LCD

Włączanie i wyłączanie wyświetlacza

Tytuł mówi wszystko, możemy włączać lub wyłączać, to co wyświetlone na ekranie. Uwaga, należy jednak pamiętać, że funkcje te wyłączają jedynie wyświetlanie tekstu.

Kolejny raz nazwy funkcji okazują się wymowne: lcd.display() oraz lcd.noDisplay(). Oczywiście po wyłączeniu i włączeniu wyświetlacza pojawi się na nim poprzedni tekst. Nie ma konieczności ponownego wysyłania zawartości, która ma być widoczna. Przykładowy program:

Oraz efekt:

Chwilowe wyłączanie wyświetlacza - LCD i Arduino.

Chwilowe wyłączanie wyświetlacza - LCD i Arduino.

Usuwanie zawartości LCD

Testując wyświetlanie tekstów na LCD możesz zauważyć, że czasami nachodzą one na siebie. Wyświetlacz nie czyści automatycznie swojej zawartości (ma to swoje zalety). Jeśli chcemy jednak usunąć cały tekst korzystamy z funkcji  lcd.clear(). Sprawdź samodzielnie jak ona działa!

Wyświetlanie wyniku ADC na wyświetlaczu

Program służy do wyświetlania wartości napięcia występującego na fotorezystorze. Fotorezystor z rezystorem tworzą dzielnik napięcia, zaś napięcie to podawane jest na wejście analogowe A0.

Schemat podłączenia naszego czujnika światła.

Schemat podłączenia czujnika światła.

Przy zmianie natężenia światła padającego na dzielnik, zmienia się (odczytywana) wartość napięcia na przetworniku. Wynik binarny przetwarzany jest na odpowiadający mu wynik napięcia. Zadanie to powinno być banalne, jeśli zapoznaliście się wcześniej z częścią o ADC.

Zwróć uwagę, że w tym przypadku napisy wyświetlamy tylko raz i już nigdy ich nie nadpisujemy. Zmieniamy tylko pierwsze 4 znaki dolnej linijki, czyli nasz odczyt. Sprawdź czy program działa poprawnie. U mnie wynik wyglądał przykładowo tak:

Przenośny miernik natężenia światła!

Przenośny miernik natężenia światła!

Tym sposobem zbudowaliśmy przenośne urządzenie, które może prezentować swoje wyniki bez potrzeby podłączania go do komputera!

Zadanie domowe 7.2

Wyświetlacz ma pewną bezwładność. Sprawdź co dzieje się, gdy staramy się zbyt szybko pokazać nowe dane (usuwając zawartość ekranu przy każdym obiegu pętli).

Zadanie domowe 7.3

Sprawdź, co działoby się, gdybyśmy w powyższym przykładzie woltomierza odświeżali częściej cały tekst. Czy wynik nadal byłby taki łatwy do odczytania, do jakiej wartości?

Zadanie domowe 7.4

Napisz program, który jest prostym stoperem. W momencie przyciśnięcia jednego przycisku pomiar rusza, a na ekranie pojawią się aktualny czas. Po wciśnięciu drugiego przycisku na ekranie pojawia się napis "Koniec" oraz zmierzony czas w sekundach.

Co z tym podświetleniem...

Na koniec jeszcze jedna ciekawostka. Wspomniałem wcześniej, że nie mamy możliwości kontroli podświetlenia. Czy na pewno? W końcu jest to tylko dioda święcąca. Gdyby tak podłączyć ją do mikrokontrolera? Wystarczy przełożyć jeden przewód:

Pełna kontrola nad wyświetlaczem.

Pełna kontrola nad wyświetlaczem.

Pamiętacie jakie możliwości daje generowanie sygnału PWM? Sprawdźcie jak zachowuje się LCD po wgraniu poniższego programu. Wierzę, że wiecie już dlaczego tak się dzieje!

Masz już pełną kontrolę nad wyświetlaczami LCD. Od teraz będziemy korzystać z nich przy kolejnych projektach. Do tego czasu dobrze opanuj ich działanie!

Podsumowanie

W tej części kursu omówiliśmy najważniejsze informacje dotyczące wyświetlaczy tekstowych. Z pewnością będziecie z nich korzystali w wielu projektach. Oprócz tego, że są użyteczne, to dość znacznie poprawiają odbiór całego urządzenia, które wygląda dużo profesjonalniej!

Nawigacja kursu

W kolejnej części kursu wrócimy do sygnałów PWM. Pokażę, jak łatwo można sterować silnikiem. Jak zawsze zachęcam do komentowania oraz zadawania pytań!

Autor: Damian (Treker) Szymański

PS Nie chcesz przeoczyć kolejnych części naszego darmowego kursu programowania Arduino? Skorzystaj z poniższego formularza i zapisz się na powiadomienia o nowych publikacjach!

Arduino, ekran, kurs, kursArduino, kursor, lcd, wyświetlacz

Komentarze

Dodaj komentarz