LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

Digilent Pmod i STM32 (cz. 7) – PmodBT2, PmodTC1 i PmodCLP

PmodCLP

Ostatni z modułów opisywanych w tej części cyklu, PmodCLP, posiada wyświetlacz znakowy LCD zawierający 2 linie po 16 znaków. W roli kontrolera wyświetlacza użyto układu KS0066 firmy Samsung obsługującego wyświetlacze jedno- i dwuliniowe. Komunikacja z nim odbywa się za pomocą interfejsu równoległego, przez który wysyłane są zarówno komendy, jak i dane do wyświetlenia.

Fotografia 6. Moduł PmodCLP

Sterowanie układu KS0066

Układ KS0066 posiada trzy typy wewnętrznej pamięci:

  • CGROM – zawiera predefiniowany zestaw 192 znaków o rozmiarze 5×8 pikseli,
  • CGRAM – umożliwiaja zdefiniowanie do 8 znaków użytkownika,
  • DDRAM – przechowująca aktualnie wyświetlany zestaw znaków.

Wyświetlenie napisu jest możliwe przez zapis do pamięci DDRAM za pośrednictwem interfejsu równoległego, którego sygnały przedstawiono w tabeli 5. Za jego pomocą można także konfigurować wyświetlacz wysyłając do niego instrukcje. Część dostępnych instrukcji, użytych w przykładzie, razem z wybranymi parametrami została przedstawiona w tabeli 6. Szczegóły dotyczące wszystkich instrukcji, a także ich struktury znajdują się w dokumentacji modułu na stronie:

https://reference.digilentinc.com/reference/pmod/pmodclp/reference-manual

Tabela 5. Sygnały sterujące modułem PmodCLP

Sygnał Opis
DB0-DB7 8-bitowa szyna danych i instrukcji
RS Tryb instrukcji (stan niski) i danych (stan wysoki)
R/W Tryb zapisu (stan niski) i odczytu (stan wysoki)
E Wyzwalanie zapisu (na zboczu opadającym) lub tryb odczytu (w stanie wysokim)

Tabela 6. Opis komend użytych w przykładzie wraz z ich parametrami

RS R/W DB7-DB0 Opis
0 0 0x38 8-bitowe dane (DB4 = 1), 2 linie (DB3 = 1), rozmiar znaku 5×8 (DB2 = 0)
0 0 0x0C Włączenie wyświetlacza (DB2 = 1), niewidoczny kursor (DB1 = 0)
0 0 0x01 Wyczyszczenie wyświetlacza
0 0 0x06 Przesuwanie kursora w prawo (DB1 = 1), wyłączenie przesuwania napisu (DB0 = 0)
0 0 0x80 Ustawienie kursora na początku pierwszej linii
0 0 0xC0 Ustawienie kursora na początku drugiej linii

Połączenie z płytką KAmeleon

Ze względu na dużą liczbę sygnałów, moduł PmodCLP podłączono do złącza ARDUINO CONNECTOR według tabeli 7. W przykładzie używane są tylko komendy do zapisu danych i instrukcji, dlatego piny mikrokontrolera mogą być skonfigurowane wyłącznie jako wyjścia.

Tabela 7. Sposób podłączenia modułu PmodCLP do płytki KAmeleon

Sygnał Numer pinu PmodCLP Numer pinu KAmeleon ARDUINO CONNECTOR Pin mikrokontrolera
DB0 1 (J1) D0 PC5
DB1 2 (J1) D1 PC4
DB2 3 (J1) D2 PD6
DB3 4 (J1) D3 PB6
GND 5 (J1) GND
VCC 6 (J1) +3,3
DB4 7 (J1) D4 PB9
DB5 8 (J1) D5 PD9
DB6 9 (J1) D6 PD10
DB7 10 (J1) D7 PB11
GND 11 (J1)
VCC 12 (J1)
RS 1 (J2) D8 PD11
R/W 2 (J2) D9 PB13
E 3 (J2) D10 PB12
NC 4 (J2)
GND 5 (J2)
VCC 6 (J2)

Kod przykładu

Obsługa wyświetlacza znajduje się w plikach inc/PmodCLP.h, a także src/PmodCLP.c. W pierwszym z nich znajdują się definicje użytych pinów, portów, a także funkcji włączających sygnały zegarowe. Służą one ułatwieniu konfiguracji ze względu na duża liczbę sygnałów. Za samą konfigurację odpowiedzialna jest funkcja PmodCLP_Config. Włącza sygnały zegarowe dla kolejnych portów, a także konfiguruje piny jako wyjścia. Następnie program inicjalizację wyświetlacza, którą przedstawiono na listingu 8. Jest ona zgodna z procedują inicjalizacji przedstawioną w dokumentacji modułu, natomiast użyte w niej komendy zostały wyjaśnione w tabeli 6. Zastosowane opóźnienia pomiędzy instrukcjami zostały wydłużone ze względu na ograniczenie funkcji bibliotecznej HAL_Delay, która przyjmuje jedynie całkowitą liczbę milisekund.

Kod programu z plikami projektowymi środowiska Atollic można pobrać w sekcji „Do pobrania”

Listing 8. Sekwencja inicjalizacji wyświetlacza

HAL_Delay(20);
writeCommand(0x38);
HAL_Delay(1);
writeCommand(0x0C);
HAL_Delay(1);
writeCommand(0x01);
HAL_Delay(2);
writeCommand(0x06);

Funkcje pomocnicze

Podczas konfiguracji wykorzystywane są następujące funkcje pomocnicze ułatwiające zarządzanie pinami, a także korzystanie z interfejsu równoległego:

  • configGpio – konfiguruje podany pin GPIO jako wyjście,
  • setGpio – ustawia podany pin w stan wysoki,
  • resetGpio – podaje stan niski na podany pin,
  • writeGpio – ustawia podany pin w dowolny stan przekazany jako argument,
  • setDataBits – wystawia podaną wartość 8-bitową na liniach DB7 – DB0,
  • writeCommand – wysyła podaną instrukcję,
  • writeData – wysyła podany bajt danych.

Wyświetlanie napisów

Do wyświetlania napisów zaimplementowano funkcję PmodCLP_Write, przedstawioną na listingu 9. Przyjmuje ona numer linii, a także napis wraz z jego długością, a następnie wysyła go do wyświetlacza. Wybór linii (0, lub 1) odbywa się przez zapis instrukcji ustawiającej kursor na odpowiednim adresie pamięci DDRAM. Dane do wyświetlacza mogą być wysłane bezpośrednio w kodzie ASCII, ze względu na zastosowane mapowanie kodów znaków w pamięci CGROM.

Listing 9. Wysyłanie napisu na wyświetlacz

void PmodCLP_Write(uint8_t line, char* text, uint32_t len)
{
  if(line >= MAX_LINES || len > MAX_LINE_CHARACTERS) return;
  if(line == 0) writeCommand(0x80); else writeCommand(0xC0);
  for(uint32_t i = 0; i < len; i++) writeData((uint8_t)text[i]);
}

Główna funkcja programu – main, wywołuje funkcję konfiguracji modułu PmodCLP, a także wyświetla napis:

Hello PmodCLP!

KAmeleon Board

Efekt działania programu jest widoczny na fotografii 7.

Fotografia 7. Wyświetlanie napisu na module PmodCLP

Moduły PmodBT2 i PmodTC1 a także zestaw KAmeleon oraz wiele innych płytek ewaluacyjnych i modułów rozszerzających można znaleźć w ofercie Kamami.pl
Zachęcamy do przeczytania ósmej części cyklu, w której omówiliśmy moduły PmodMTDS, PmodRTCC i PmodCMPS2Digilent Pmod i STM32 (cz. 8) – PmodMTDS, PmodRTCC i PmodCMPS2