Obsługa graficznego wyświetlacza z telefonu Nokia 3310 za pomocą mikrokontrolerów STM32
Polecenia sterownika PCD8544
Sterownik akceptuje dwa zestawy komend: standardowy i rozszerzony, ich opisy zestawiono w tab. 1.
Tab. 1. Polecenia sterownika PCD8544 (zgodnie z dokumentacją firmy NXP)
Instrukcja | D/C | Bajt komendy | Opis | ||||||||
DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | ||||
H=0 lub H=1 | |||||||||||
NOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Nic nie rób | |
Function Set | 0 | 0 | 0 | 1 | 0 | 0 | PD | V | H | Tryb obniżonego poboru energii (PD), adresowania (V) i komendy rozszerzone (H) | |
Write Data | 1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Zapisanie pamięci RAM | |
H=0 podstawowy zestaw komend | |||||||||||
Reserved | 0 | 0 | 0 | 0 | 0 | 1 | X | X | Nie używać | ||
Display Control | 0 | 0 | 0 | 0 | 0 | 1 | D | 0 | E | Konfiguracja wyświetlacza | |
Reserved | 0 | 0 | 0 | 0 | 1 | x | x | X | X | Nie używać | |
0 | 0 | 1 | 0 | 0 | 0 | Y2 | Y1 | Y0 | Ustawienie licznika wierszy 0…5 | ||
Set X address | 0 | 1 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | Ustawienie licznika kolumn 0…83 | |
H=1 Rozszerzony zestaw komend | |||||||||||
Reserved | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Nie używać | |
Reserved | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | Nie używać | |
Temperature Control | 0 | 0 | 0 | 0 | 0 | 0 | 1 | TC1 | TC0 | Współczynnik temperaturowy | |
Reserved | 0 | 0 | 0 | 0 | 0 | 1 | x | X | X | Nie używać | |
Bias System | 0 | 0 | 0 | 0 | 1 | 0 | BS2 | BS1 | BS0 | Ustawienie BIAS | |
Reserved | 0 | 0 | 1 | X | X | X | x | X | X | Nie używać | |
Set Vop | 0 | 1 | Vop6 | Vop5 | Vop4 | Vop3 | Vop2 | Vop1 | Vop0 | Napięcie zasilania matrycy (kontrast) |
Opis parametrów z tab. 1.
Oznaczenie | Gdy 0 | Gdy 1 |
PD | Układ aktywny | Tryb obniżonego poboru mocy |
V | Adresowanie poziome | Adresowanie pionowe |
H | Podstawowy zestaw instrukcji | Rozszerzony zestaw instrukcji |
D E 0 0 0 1 1 0 1 1 |
Wyświetlacz wygaszony Tryb normalny Wszystkie segmenty zapalone Wyświetlanie w inwersji |
|
TC1 TC0 0 0 0 1 1 0 1 1 |
VLCD współczynnik temperaturowy 0 VLCD współczynnik temperaturowy 1 VLCD współczynnik temperaturowy 2 (standardowy) VLCD współczynnik temperaturowy 3 |
Komenda Function Set jest przeznaczona do programowego przełączania wyświetlacza w tryb obniżonego poboru energii, sposobu adresowania pamięci RAM i ustawiania zestawu komend (normalny lub rozszerzony).
Kontrast wyświetlacza zależy od napięcia zasilającego matrycę LCD i jest ustawiany komendą Set Vop. Można ustawić 128 wartości, ale użyteczny zakres regulacji to wartości od 30 do 90.
Komenda Temperature Control umożliwia ustalenie jednej z 4 predefiniowanych charakterystyk kompensacji temperaturowej kontrastu. Dla większości zastosowań można zastosować współczynnik 2 (TC1=1, TC0=0). Dla wyświetlacza od telefonu Nokia 3310 wartość parametru BIAS powinna wynosić 3.
Niezgodność sterownika ze standardem PCD8544
Do testowania procedur obsługi LCD zastosowano moduł KAmodLCD1 (fot. 7) i płytę ewaluacyjną STM32Butterfly z mikrokontrolerem STM32F107. Wyświetlacz dołączono do mikrokontrolera zgodnie ze schematem elektrycznym pokazanym na rys. 8.
Fot. 7. Wygląd modułu KAmodLCD1
Rys. 8. Schemat elektryczny ilustrujący sposób połączenia mikrokontrolera STM32F107 z modułem KAmodLCD1 (zastosowany w prezentowanym przykładzie)
Do obsługi linii portów GPIO najlepiej jest wykorzystać biblioteki producenta mikrokontrolerów. Na list. 1 przedstawiono definicje linii i konfigurację portu GPIOA używanego do sterowania wyświetlaczem.
List. 1. Definicja linii wykorzystywanych do transmisji danych i konfiguracja portów
//definicja portu #define PORT_DISP_NOKIA GPIOA #define RCC_APB2Periph_DISP_NOKIA RCC_APB2Periph_GPIOA //definicja linii portu #define CLK GPIO_Pin_0 //CLK PA0 #define DATA GPIO_Pin_1 //DATA PA1 #define DC GPIO_Pin_2 //D_nC PA2 #define RES GPIO_Pin_3 //RESET PA3 #define SCE GPIO_Pin_4 //SCE PA4 RCC_APB2PeriphClockCmd(RCC_APB2Periph_DISP_NOKIA, ENABLE); GPIO_InitStructure.GPIO_Pin = CLK | DATA | DC | RES | SCE ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PORT_DISP_NOKIA, &GPIO_InitStructure);