Powrót

Mikroprocesorowa ośla łączka, część 12

Możliwość wyświetlania informacji tekstowej jest bardzo atrakcyjna w różnych zastosowaniach. Moduł LCD oprócz wielu zalet ma jedną wadę, jaką jest konieczność stosowania wielu pinów portu do jego obsługi. Robimy kolejną redukcję w bezpośrednich połączeniach – mniej już się nie da.

W poprzedniej części mowa była o przyłączeniu modułu LCD do mikrokontrolera w trybie dwukierunkowej komunikacji. Aby coś wyświetlić na ekranie, mikrokontroler musi przesłać do modułu niezbędne informacje. Zachodzi tu transmisja danych w jedną stronę: porty mikrokontrolera są „ustawione” jako wyjścia a dane są zapisywane do modułu (poprzez linię RW=0 moduł jest informowany o operacji zapisu, zaś sama operacja następuje w wyniku wystąpienie impulsu na linii E). Zapisywane dane mogą stanowić wyświetlaną treść lub polecenie wykonania określonej operacji, będącej w zakresie możliwości modułu. W pewnych sytuacjach zachodzi potrzeba odczytu danych z modułu, jak choćby odczyt jego statusu gotowości przyjęcia kolejnego polecenia. Oprócz odczytu statusu możliwe jest „odczytanie” wyświetlanych danych (przykładowo jaki znak znajduje się na ściśle określonej pozycji wyświetlacza). W tych przypadkach port komunikacyjny mikrokontrolera należy przestawić na port wejściowy i dokonać odczytu (poprzez linię RW=1 moduł jest informowany o kierunku transmisji i w wyniku impulsu na linii E moduł jest zobowiązany do wystawienia na szynę wymaganych danych a mikrokontroler do ich odczytu). Istnieje możliwość kolejnej redukcji liczby niezbędnych linii do współpracy mikrokontrolera z modułem LCD.

Praca bez linii RW

Jeśli chodzi o sposób przesyłania danych między mikrokontrolerem a modułem LCD to możliwa jest redukcja liczby niezbędnych połączeń o sterowanie linią RW. Oczywistym jest, że taka czynność nie może zakłócać przesyłania danych do modułu. Z punktu widzenia użytkowego istotnym elementem jest wysyłanie danych do modułu LCD, co implikuje, że podstawową operacją jest zapis (z perspektywy mikrokonterolera). Prowadzi to do wysterowania linii RW na stałe (podanie logicznego zera) jak pokazuje rysunek 1.

Rysunek 1

Brak możliwości sterowania przez mikrokontroler linią RW jednocześnie oznacza, że w tej konfiguracji nie istnieje techniczna możliwość odczytu czegokolwiek z modułu LCD (w szczególności jego statusu). Każda czynność realizowana przez moduł LCD wymaga odpowiedniego czasu a kolejne polecenie nie zostanie przyjęte do realizacji, jeżeli poprzednie nie zostanie zakończone. W wariancie, gdzie jest możliwy odczyt statusu, mikrokontroler mógł określić moment, gdy moduł LCD przyjmie kolejne polecenie. Przy braku takiej możliwości po wysłaniu polecenia do modułu pozostaje odczekanie odpowiedniego interwału czasu. Wysyłając określone polecenie do modułu, wiadomo ile czasu zajmie jego realizacja, toteż bezpośrednio po zapisie odczekanie wymaganego interwału czasu daje gwarancję poprawnego działania. Przykładowe zwłoki czasowe dla wybranych poleceń przedstawia tabela na rysunku 2, pełna specyfikacja znajduje się w danych katalogowych zastosowanego kontrolera (HD44780, KS0066 itp.). Pozbawienie możliwości odczytu danych z modułu wnosi spore zmiany w jego oprogramowaniu. Podobnie jak w poprzedniej części nowy wariant będzie posiłkował się plikiem nagłówkowym zawierającym szczegóły przyłączenia modułu do mikrokontrolera. Można wykorzystać dokładnie ten sam plik (lcdequip.h), pomimo że niektóre zapisy straciły znaczenie (jak specyfikacja przyłączenia linii RW czy deklaracja portu wejściowego na odczyt szyny danych – mamy mały nadmiar informacji, który nie jest szkodliwy).

Rysunek 2

Przykład wykorzystania nowego oprogramowania to środowisko zbudowane zgodnie ze schematem z rysunku 3 lub 4.

Rysunek 3

Rysunek 4

Dotyczy ono wykorzystania modułu LCD z 4-bitowym interfejsem szyny danych oraz dwiema liniami sterującymi: linią RS oraz linią E (istnieje identyczna możliwość aplikacji modułu w różnych wariantach konfiguracji dokładnie tak jak w poprzedniej części). Sama obsługa modułu jest podobna do opisanej w poprzedniej części z tym wyjątkiem, że po każdym wysłaniu czegokolwiek do modułu LCD realizowane jest zatrzymanie działania programu na określony czas. Uzyskuje się to poprzez użycie znanych już funkcji _delay_us (dołączonych do programu poprzez #include <util/delay.h>). Jak wiadomo, tu wymagane jest zdefiniowanie częstotliwości taktującej jako parametr #define F_CPU 16000000UL. Oczywiście można taki zapis umieścić w wielu miejscach, ale jest bardziej przydatne rozwiązanie: utworzenie go jako elementu globalnego, będzie on automatycznie dostępny w każdym kompilowanym kawałku. Zostaje zdefiniowany jeden raz, co znacząco eliminuje możliwość powstania pomyłek, gdyż utworzony kawałek programu często jest wykorzystany w innych projektach i zdarza się zapominać o drobnych szczegółach z tym związanych (warto wyrobić sobie nawyk globalnych definicji często używanych parametrów).

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w majowym numerze czasopisma Zrozumieć Elektronikę (ZE 5/2025). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 5/2025 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać – Postaw kawę za:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – Własna kwota. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dodać dedykację/Wiadomość dla Twórcy” i tu zawsze trzeba wpisać, który numer lub numery ZE mamy wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 5/2025.
UWAGA!!! E-mail z linkiem do materiałów (Smash) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.