Jak zaprogramować wyświetlacz LCD (HD44780) na AVR ATTINY84A

Wiemy już jak w najprostszy sposób obsłużyć dane wyjściowe w postaci diody oraz dane wejściowe w postaci przycisku. Teraz przyszedł czas aby nieco podnieść poprzeczkę a co za tym idzie zwiększyć nasze możliwości tworzenia urządzeń elektronicznych. Kolejnym klockiem w naszej kolekcji będzie wyświetlacz LCD zgodny ze standardem scalonego sterownika HD44780 (czyli prawie każdy wyświetlacz jaki kupisz tego typu).

Akurat mam tutaj taki jeden pod ręką. Dwa rzędy po szesnaście znaków. Jak widać mam tutaj przylutowane mnóstwo kabelków, które będzie trzeba jakoś podłączyć. Podefiniować piny i zaprogramować. Na szczęście mamy gotową bibliotekę do obsługiwania tych wszystkich pinów jak już je podepniemy, więc na tym etapie i z tym artykułem powinieneś dać radę!

Jak widzisz na załączonym obrazku mam jeszcze potencjometr. Jest to urządzenie znajdujące się na prawo od wyświetlacza. Do tego zadania dobrze jest mieć potencjometr z zakresem do 10 kiloohmów. Potencjometr to taki rezystor gdzie pokrętłem możesz regulować rezystancję. W dzisiejszym zadaniu wykorzystamy go do ustawienia kontrastu na naszym wyświetlaczu.

Do zaprogramowania Wyświetlacza będziemy potrzebować programatora, mikrokontrolera, potencjometru i trochę kabli. Przejdźmy do budowania.

Jak podłączyć wyświetlacz LCD do mikrokontrolera?

Jak zwykle w takich sytuacjach zaczynamy od wyszukania w sieci informacji i schematu danego elementu. Możemy się dowiedzieć że potrzebujemy zasilania 5V czyli standard jaki otrzymujemy z programatora. Można też znaleźć schemat może trochę bardziej skomplikowany niż ten poniżej.

Z powyższego już możemy wyczytać co najmniej gdzie podpiąć plus a gdzie minus. Patrząc na powyższy obrazek liczymy wyjścia od 1 do 16.

Wyjścia 1 i 16 podpinamy do minusa.
Wyjścia 2 i 15 podpinamy do plusa.
Wyjście 3 podpinamy do środkowej nóżki potencjometru (jedną z pozostałych do minusa a drugą do plusa)

Na tym etapie jak prawidłowo podpiąłeś zasilanie i kontrast do potencjometru to jak będziesz kręcił potencjometrem powinieneś uzyskać efekt mniej więcej jak na zdjęciu poniżej.

Wyjścia 7,8,9 i 10 nie muszę więc zostawiam nie podłączone. Pozostałe podłączam do mojego mikrokontrolera Attiny84A. Według następującej rozpiski i schematów wyżej przedstawionego LCD oraz wcześniejszego mikrokontrolera.

RS (Register Select) -> PA4
RW (ReadWrite) -> PA5
E (Enable) -> PA6

D4 – PA0
D5 – PA1
D6 – PA2
D7 – PA3

Czyli piny, które miałem podpiąć do mikrokontrolera po prostu wtykam po kolei. Pewnie kiedyś narysuję tutaj jeszcze schemat żebyście mieli łatwiej ale na ten moment skoro mam już wszystko podpięte przejdziemy do próby zaprogramowania mikrokontrolera w taki sposób aby wyświetlił jakiś napis.

Jak zaprogramować napis na LCD, mikrokontrolera AVR ATTINY84A-PU?

Nie musimy pisać kodu od zera, ponieważ już ktoś napisał bibliotekę do obsługi takiego wyświetlacza w takim podłączeniu jak wyżej i możemy ją wykorzystać. Część bibliotek jakie znalazłem nie za bardzo mi działała. Prawdopodobnie jak wpiszesz HD44780 for AVR library to znajdzie się jakaś działająca, ja wykorzystałem tą: https://github.com/efthymios-ks/AVR-HD44780

W tym przypadku w folderze Files mamy pliki, które trzeba ściągnąć i wrzucić do projektu.

Ustawienie PINów

Ażeby ustawić piny wchodzimy do pliku HD44780_Settings.h i ustawiamy tam odpowiednie wartości. Wydaje mi się że kod jest tak czysty i przejrzysty że nie wymaga nawet tłumaczenia. W każdym razie.

#define LCD_Size – Ja mam wyświetlacz 1602, czyli po 16 znaków 02 wiersze. Można to odczytać z wyświetlacza, u mnie jest na dole z tyłu 1602B2.

#define LCD_Type – Typ też można odczytać z tego numeru wyżej. Kolejne zmienne to określenie portu i numeru PINu. Jeśli podpiąłeś wejścia tak jak wcześniej napisałem to będzie wyglądać w taki sposób

Plik główny programu

Kolejnym etapem jest zaprogramowanie mikrokontrolera aby do naszego wyświetlacza wysyłał napis jaki chcemy wyświetlić. W tym celu przechodzimy do pliku głównego programu i na samym początku załączamy plik konfiguracyjny, w którym przed chwilą zdefiniowaliśmy piny. A także plik z kodem naszej biblioteki, której funkcje za chwilę będziemy wykorzystywać

#include „HD44780_Settings.h”
#include „HD44780.c”

Dalej w funkcji głównej naszego programu napiszemy prosty kod odliczania. Będzie wyświetlany napis oraz liczba, która co sekundę będzie zwiększała się o jeden.

Na początek należy wykorzystać funkcję inicjalizującą wyświetlać LCD_Setup(). Dalej przed uruchomieniem pętli głównej programu definiuję jeszcze zmienną, którą będę zwiększał.

W pętli zwiększam zmienną o jeden poprzez inkrementację, czyszczę wyświetlacz funkcją LCD_Clear(), ustawiam kursor na początku za pomocą LCD_GotoXY(0,0) a następnie wyświetlam napis i dopisuję liczbę. W drugiej linijce podobnie i na końcu czekam sekundę żeby zwiększyć wartość zmiennej i wyświetlić od nowa.

Poniżej cały kod programu, jak widać za pomocą odpowiedniej biblioteki wyświetlenie napisu na LCD to kwestia zdefiniowania pinów i kilka linijek kodu.

Niby nic a jednak dojście do tego zajęło mi parę godzin ze względu na przetestowanie kilku niedziałających bibliotek i błędną próbę napisania własnej. Możliwe że za jakiś czas opiszę także jak się pisze własną bibliotekę do obsługi wyświetlacza.

No i na koniec efekt, jak to będzie wyglądać jeśli zrobisz to tak dobrze jak ja.