Wyświetlacz Nokii 3310 artykuł.pdf

(978 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
notatnik konstruktora
Wyświetlacz graiczny
do Nokii 3310
Stary wyświetlacz, nowe
problemy...
Wyświetlacze LCD od telefonów
komórkowych idealnie się nadają
do zastosowania w  układach
z  mikrokontrolerem. Telefon
Nokia 3310 nie jest już
oferowany przez operatorów sieci
komórkowych, ale olbrzymia
liczba sprzedanych egzemplarzy
spowodowała, że można już za
około 10 złotych kupić do niego
wyświetlacz oferowany jako część
zamienna. Niestety, okazuje się,
że mimo deklarowanej zgodności
z  wcześniejszymi modelami
wyświetlaczy, przy próbach
użycia niektórych z  nich mogą
pojawić się pewne problemy.
Matryca wyświetlacza do Nokii 3310 ma
rozdzielczość 84×48 piksele. W trybie tek-
stowym może wyświetlić 14 znaków w 6 li-
niach. W porównaniu z możliwościami po-
pularnych wyświetlaczy alfanumerycznych
(najczęściej 2×16 do 4×20 znaków) jest to
całkiem sporo. Wyświetlacz został zaprojek-
towany do urządzenia przenośnego, więc ob-
szar wyświetlania matrycy LCD nie jest zbyt
duży – ma wymiary 30×24 mm, a grubość
całego modułu jest również niewielka i wy-
nosi ok. 3 mm.
Sterowanie wyświetlaczem tego typu
było już opisywane łamach Elektroniki Prak-
tycznej. Również w Internecie można zna-
leźć sporo opisów z gotowymi procedurami
sterującymi napisanymi dla różnych mikro-
kontrolerów i w różnych językach progra-
mowania. Sam stosowałem ten wyświetlacz
jako część interfejsu użytkownika w kilku
swoich projektach. I pewnie jego popular-
ność nie byłaby niczym zagrożona, gdyby nie
to, że pojawiły się problemy ze sterowaniem
niektórych egzemplarzy. Ostatnio w  moje
ręce traiło kilka wyświetlaczy, z  których
część zachowywała się zupełnie poprawnie,
a część nie chciała działać sterowana moimi,
wielokrotnie sprawdzonymi procedurami.
Po wykonaniu serii prób modyikacji tych
procedur zacząłem szukać w Internecie czy
ktoś jeszcze nie ma podobnych problemów.
Okazało się, że jest to znany problem i co
gorsza, nikt nie potrai podać sposobu jego
rozwiązania.
Wszystkie znane mi opisy wyświetlacza
od telefonu Nokia 3310 podają, że ma wbu-
dowany sterownik NXP typu PCD8544 i na
84
ELEKTRONIKA PRAKTYCZNA 12/2009
862894700.215.png
Stary wyświetlacz, nowe problemy...
– SCE służącą do uaktywnienia układu
(odpowiednik Chip Select )
– D/C do wyboru miejsca przeznaczenia wy-
syłanych danych: dla D/C=1 jest to pamięć
RAM wyświetlacza (dane), natomiast dla
D/C=0 rejestr sterujący (rozkazy).
– RES służąca do zerowania sterownika
wyświetlacza.
Na rys. 2 pokazano przebiegi czasowe
przy przesyłaniu bajtu do wyświetlacza.
Transmisja rozpoczyna się od uaktyw-
nienia linii SCE (stan niski). Dane dopro-
wadzone do SDIN są wpisywane do rejestru
sterownika przy narastającym zboczu zegara
SCK. Na rys. 1, po wpisaniu pojedynczego
bajtu, SCE staje się nieaktywne. Sterownik
akceptuje wpisywanie bloku bajtów z aktyw-
nym SCE (bez konieczności przechodzenia
w stan wysoki tej linii po każdym przesła-
nym bajcie). Przyśpiesza to przesyłanie da-
nych, ale przy większych blokach i dużej
prędkości transmisji może powodować prze-
kłamania. Każde opadające zbocze SCE syn-
chronizuje transmisję i jeżeli pojawiają się
problemy, to lepiej zastosować sterowanie
linią SCE, tak jak na rys. 2.
Wyprowadzenia wyświetlacza telefo-
nu Nokia 3310 pokazano na rys. 3 . Napię-
cie zasilające wyświetlacz (styk Vdd) może
mieć wartość z zakresu 2,7...3,3 V. Napięcie
zasilające matrycę wyświetlacza (6...8  V),
wytwarzane w  wewnętrznej przetwornicy
sterownika, jest wyprowadzone na styk Vout.
Do tego styku podłącza się zewnętrzny kon-
densator iltrujący o pojemności 1 MF.
Wbudowana w sterownik pamięć RAM
jest zapisywana po wymuszeniu stanu wy-
sokiego na linii D/C. Matryca wyświetlacza
może wyświetlić 48 linii. Każda linia ma 84
piksele. Pamięć jest zorganizowana w 6 ban-
ków po 84 bajty każdy. Taka organizacja wy-
musza logiczny podział pola wyświetlacza
na 6 wierszy po 84 kolumny ( rys. 4 ). Wiersze
są numerowane od 0 do 5, a kolumny od 0
do 83.
W czasie wpisywania danej do pamięci
najpierw określamy numer banku (zmienna
Y określająca wiersz na rys. 4), a następnie
numer bajtu w wierszu (zmienna X okre-
ślająca kolumnę na rys. 4). Zapisanie całe-
go banku odpowiada wyświetleniu jednego
wiersza na wyświetlaczu. W trybie teksto-
wym, odpowiada to wyświetleniu pojedyn-
czej linijki tekstu.
Każdy bajt pamięci RAM jest wyświe-
tlany jako pionowy pasek składający się z 8
pikseli. Najwyżej położony piksel w pasku
odpowiada bitowi najmniej znaczącemu,
a najniżej – najbardziej znaczącemu. W stan-
dardowym trybie wyświetlania, ustawienie
bitu w bajcie pamięci odpowiada zaświece-
niu, a wyzerowanie zgaszeniu piksela.
Przy wpisywaniu bajtów do pamię-
ci RAM wykonywana jest przez sterownik
PCD8544 automatyczna inkrementacja
rys. 1. Połączenie dwóch układów interfejsem sPi
rys. 2. Przesłanie bajtu do wyświetlacza.
– interfejs szeregowy.
Nas będzie interesował przede wszystkim
izyczny interfejs użytkownika, organi-
zacja pamięci RAM i sposób wymiany
informacji pomiędzy mikrokontrolerem,
a sterownikiem.
Jak to działa?
Przesyłanie danych pomiędzy sterow-
nikiem wyświetlacza i  mikrokontrolerem
odbywa się przez interfejs szeregowy SPI.
Długość słowa danych wynosi 8 bitów. Więk-
szość dostępnych mikrokontrolerów ma
wbudowany sprzętowy interfejs SPI. Rów-
nież programowa implementacja interfejsu
nie jest skomplikowana.
Interfejs SPI jest zbudowany się z 3 li-
nii: wejścia DIN, wyjścia DOUT, zegara SCK.
Czasami do sterowania funkcjami interfejsu
używa się również SS ( Slave Select ). Typo-
wo transmisja przeprowadzana z punktu do
punktu, w koniguracji układ zarządzający
( Master ) – układ podrzędny ( Slave ).
Na rys. 1 pokazano dwa układy połączo-
ne za pomocą SPI. Przy podłączeniu wyświe-
tlacza układem nadrzędnym, generującym
sygnał SCK, jest mikrokontroler, natomiast
sterownik wyświetlacza jest układem pod-
rzędnym. Ponieważ dane są tylko wpisywa-
ne do sterownika, to wykorzystywana jest
tylko linia danych wejściowych.
Interfejs szeregowy PCD8544 został uzu-
pełniony o dodatkowe linie:
Nu-
mer
styku
1 2
3 4 5 6 7 8
Vdd SCLK SDIN D/C SCE GND Vout RES
rys. 3. Widok wyprowadzeń wyświetlacza
podstawie dokumentacji do tego sterownika
oparte są procedury sterujące. Dla ugrunto-
wania wiedzy przypomnijmy pokrótce budo-
wę i sposób działania układu PCD8544.
Działanie sterownika
wyświetlacza
Sterownik PCD8544, w  który wyposa-
żono wyświetlacz, ma wbudowane w swojej
strukturze:
– interfejs przystosowany do sterowania
matrycy LCD, zawierający wzmacniacze
kolumn i  wierszy, układ wytwarzania
napięć zasilających matrycę i układ kom-
pensacji ustawienia kontrastu w funkcji
temperatury,
– pamięć RAM,
rys. 4. organizacja pamięci raM PCD8544
85
ELEKTRONIKA PRAKTYCZNA 12/2009
862894700.226.png 862894700.237.png 862894700.248.png 862894700.001.png 862894700.012.png 862894700.023.png 862894700.034.png 862894700.045.png 862894700.055.png 862894700.066.png 862894700.077.png 862894700.088.png 862894700.099.png 862894700.110.png 862894700.121.png 862894700.132.png 862894700.143.png 862894700.154.png 862894700.164.png 862894700.174.png 862894700.182.png 862894700.183.png 862894700.184.png 862894700.185.png 862894700.186.png 862894700.187.png 862894700.188.png 862894700.189.png 862894700.190.png 862894700.191.png 862894700.192.png 862894700.193.png 862894700.194.png 862894700.195.png 862894700.196.png 862894700.197.png 862894700.198.png 862894700.199.png 862894700.200.png 862894700.201.png 862894700.202.png 862894700.203.png 862894700.204.png 862894700.205.png 862894700.206.png 862894700.207.png 862894700.208.png 862894700.209.png 862894700.210.png 862894700.211.png 862894700.212.png 862894700.213.png 862894700.214.png 862894700.216.png 862894700.217.png 862894700.218.png 862894700.219.png 862894700.220.png 862894700.221.png 862894700.222.png 862894700.223.png 862894700.224.png 862894700.225.png 862894700.227.png 862894700.228.png 862894700.229.png 862894700.230.png 862894700.231.png 862894700.232.png 862894700.233.png 862894700.234.png 862894700.235.png 862894700.236.png 862894700.238.png 862894700.239.png 862894700.240.png 862894700.241.png 862894700.242.png 862894700.243.png 862894700.244.png 862894700.245.png 862894700.246.png 862894700.247.png 862894700.249.png 862894700.250.png 862894700.251.png 862894700.252.png 862894700.253.png 862894700.254.png 862894700.255.png 862894700.256.png 862894700.257.png 862894700.258.png 862894700.002.png 862894700.003.png 862894700.004.png 862894700.005.png 862894700.006.png 862894700.007.png 862894700.008.png 862894700.009.png 862894700.010.png 862894700.011.png 862894700.013.png 862894700.014.png 862894700.015.png 862894700.016.png 862894700.017.png 862894700.018.png 862894700.019.png 862894700.020.png 862894700.021.png 862894700.022.png 862894700.024.png 862894700.025.png 862894700.026.png 862894700.027.png 862894700.028.png 862894700.029.png 862894700.030.png 862894700.031.png 862894700.032.png 862894700.033.png 862894700.035.png 862894700.036.png 862894700.037.png 862894700.038.png 862894700.039.png 862894700.040.png 862894700.041.png 862894700.042.png 862894700.043.png 862894700.044.png 862894700.046.png 862894700.047.png 862894700.048.png 862894700.049.png
 
notatnik konstruktora
Tryb adresowania poziomego pokazano
na rys. 6 . Po zapisaniu każdego bajtu jest in-
krementowany licznik kolumn. Po osiągnię-
ciu maksymalnego numeru kolumny, licznik
kolumn jest zerowany, a licznik wierszy jest
inkrementowany. Tryb adresowania pozio-
mego jest bardzo wygodny przy pracy w try-
bie tekstowym.
Tryby adresowania można dowolnie
przełączać w trakcie normalnej pracy wy-
świetlacza. Nie ma to wpływu na wyświetla-
ną informację.
rys. 5. adresowanie pionowe
Zestawy komend
Sterownik akceptuje dwa zestawy ko-
mend: standardowy i rozszerzony ( tab. 1 ).
Komenda Function Set jest przeznaczona do
programowania wyświetlacza w tryb obniżo-
nego 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ży-
teczny zakres regulacji to nastawy 30...90.
Komenda Temperature Control progra-
muje jedną z 4 predei niowanych charakte-
rystyk temperaturowej kompensacji kontra-
stu. Dla większości zastosowań odpowiedni
jest współczynnik 2 (TC1=1, TC0=0). Dla
wyświetlacza od telefonu Nokia 3310 BIAS
powinien mieć wartość 3.
rys. 6. tryb adresowania poziomego
liczników wierszy i  kolumn. Dostępne są
ustawiane komendą Function Set dwa tryby
automatycznego modyi kowania liczników:
pionowy i poziomy.
Tryb pionowy pokazano na rys. 5 . W tym
trybie, po każdym zapisaniu bajtu do pamię-
ci licznik wierszy jest inkrementowany. Po
osiągnięciu maksymalnego numeru wier-
sza licznik wierszy jest zerowany, a licznik
kolumn jest inkrementowany. Wysłanie 6
bajtów 0xFF, rozpoczynając od wiersza 0,
spowoduje wyświetlenie po lewej stronie
wyświetlacza pionowego paska ciągnącego
się przez całą wysokość wyświetlacza. Tryb
adresowania pionowego można stosować np.
przy wpisywaniu pełnoekranowej bitmapy.
Problemy
Do testowania wyświetlaczy użyłem mo-
dułu KAmodLCD1 (jednej z tych prostych
rzeczy, które ułatwiają życie) i płyty ewalu-
acyjnej ZL30ARM z procesorem STM32.
Pierwszym problemem jaki napotkałem
było niewłaściwe zerowanie pamięci wy-
świetlacza. Po włączeniu zasilania sterownik
nie inicjalizuje pamięci i dlatego są w niej
pewne nieokreślone wartości. Dlatego zero-
wanie jest jednym ze składników procedury
inicjalizacji.
Pamięć sterownika PCD8544 ma 504
bajty (rys. 5 i 6). Wystarczy wpisać do niej
kolejno 504 bajty równe 0, aby ekran wy-
świetlacza po inicjalizacji był czysty ( list. 1 ),
jednak po wykonaniu takiego zerowania nie
wszystkie piksele na wyświetlaczu zostały
zgaszone ( fot. 7 ). Wyglądało na to, że nie cała
pamięć została wyzerowana. Skoro tak, to
w pierwszej próbie zacząłem zwiększać licz-
bę wpisywanych danych. Zwiększanie ilości
wpisywanych danych o niewielką wartość
nie dawało żadnych efektów. Dopiero zapeł-
nienie pamięci 550 zerami spowodowało, że
obszar na dole zaczynał być gaszony. Próbo-
wałem więc dalej. Po wpisaniu 612 bajtów
ekran został wyczyszczony, ale nie cały. Je-
Tab. 1. Wykaz komend akceptowanych przez sterownik wyświetlacza Nokii 3310
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
Tryb obniżonego poboru
energii (PD), adresowania
(V) i komendy rozszerzo-
ne (H)
Write Data 1 D7 D6 D5 D4 D3 D2 D1 D0 Zapisanie pamięci RAM
H=0 podstawowy zestaw komend
Function Set 0
0
0
1
0
0
PD
V
H
Rezerwa
0
0
0
0
0
0
1
X
X
Nie używać
Display
Control
0
0
0
0
0
1
D
0
E Konfi guracja wyświetlacza
Rezerwa
0
0
0
0
1
x
x
X
X
Nie używać
Set Y
address
Ustawienie licznika wier-
szy 0…5
0
0
1
0
0
0
Y2
Y1
Y0
Set X
address
Ustawienie licznika ko-
lumn 0…83
0
1 X6 X5 X4 X3 X2 X1 X0
H=1 Rozszerzony zestaw komend
Rezerwa
0
0
0
0
0
0
0
0
1
Nie używać
Rezerwa
0
0
0
0
0
0
0
1
X
Nie używać
Temperature
Control
Współczynnik tempera-
turowy
0
0
0
0
0
0
1
TC1 TC0
Rezerwa
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
List. 1. Zerowane pamięci wyświetlacza
for(i=0;i<504;i++)
WriteData(0x00); //zerowanie pamięci
RAM wyświetlacza
Rezerwa
0
0
1
X
X
X
x
X
X
Nie używać
1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop0 Napięcie zasilania matry-
cy (kontrast)
Set Vop
0
86
ELEKTRONIKA PRAKTYCZNA 12/2009
862894700.050.png 862894700.051.png 862894700.052.png 862894700.053.png 862894700.054.png 862894700.056.png 862894700.057.png 862894700.058.png 862894700.059.png 862894700.060.png 862894700.061.png 862894700.062.png 862894700.063.png 862894700.064.png 862894700.065.png 862894700.067.png 862894700.068.png 862894700.069.png 862894700.070.png 862894700.071.png 862894700.072.png 862894700.073.png 862894700.074.png 862894700.075.png 862894700.076.png 862894700.078.png 862894700.079.png 862894700.080.png 862894700.081.png 862894700.082.png 862894700.083.png 862894700.084.png 862894700.085.png 862894700.086.png 862894700.087.png 862894700.089.png 862894700.090.png 862894700.091.png 862894700.092.png 862894700.093.png 862894700.094.png 862894700.095.png 862894700.096.png 862894700.097.png 862894700.098.png 862894700.100.png 862894700.101.png 862894700.102.png 862894700.103.png 862894700.104.png 862894700.105.png 862894700.106.png 862894700.107.png 862894700.108.png 862894700.109.png 862894700.111.png 862894700.112.png 862894700.113.png 862894700.114.png 862894700.115.png 862894700.116.png 862894700.117.png 862894700.118.png 862894700.119.png 862894700.120.png 862894700.122.png 862894700.123.png 862894700.124.png 862894700.125.png 862894700.126.png 862894700.127.png 862894700.128.png 862894700.129.png 862894700.130.png 862894700.131.png 862894700.133.png 862894700.134.png 862894700.135.png 862894700.136.png 862894700.137.png 862894700.138.png 862894700.139.png 862894700.140.png 862894700.141.png 862894700.142.png 862894700.144.png 862894700.145.png 862894700.146.png 862894700.147.png 862894700.148.png 862894700.149.png 862894700.150.png 862894700.151.png 862894700.152.png 862894700.153.png 862894700.155.png 862894700.156.png 862894700.157.png
 
Stary wyświetlacz, nowe problemy...
List. 2. Zmodyfi kowana funkcja zapisu bitmapy
//ustawia pozycje wyświetlania (14 kolumn, 6 wierszy)
void WriteBmp(const unsigned char *buffer)
{
char j,k;
for(k=0;k<6;k++){
Poz(0,k);//pierwsza linijka
for(j=0;j<84;j++) //wpisywanie 84 bajtów bitmapy
WriteData(*buffer++);
}
}
List. 3. Zmodyfi kowana funkcja pozycjonowania na wyświetlaczu
void Poz(char x, char y)
{
WriteCmd(y|0x40);//zerowanie licznika wierszy
WriteCmd(x|0x80);//zerowanie licznika kolumn
}
Mając świadomość, że sterownik ma
inna organizację można zmodyi kować pro-
cedurę tak, aby bitmapy były wyświetlane
prawidłowo. Po ustawieniu licznika kolumn
i wierszy na wartości zerowe trzeba wpisać
pierwsze 84 bajty bitmapy. Potem trzeba
wyzerować licznik kolumn, inkrementować
licznik wierszy i wpisać kolejne 84 bajty bit-
mapy, i tak dalej. Zmodyi kowaną procedu-
rę wpisywania bitmap pokazano na list. 2 ,
a procedurę pozycjonowania na wyświetla-
czu na list. 3 .
Wróćmy jeszcze do zerowania wyświe-
tlacza. Po wpisaniu 612 bajtów pozostał nie
wyzerowany pasek o  szerokości 3 pikseli.
Biorąc pod uwagę organizację pamięci taki
pasek był dość niepokojący, bo wpisanie
każdego bajtu zajmuje pasek o szerokości 8
pikseli, co dla ekranu o wysokości 48 pikseli
daje równo 6 pasków (wierszy) i nie ma tu-
taj miejsca na wiersz o innej szerokości niż
8 pikseli. Po próbach z wyświetlaniem tek-
stu okazało się ,że rzeczywiście w  pionie
jest przesunięcie o 3 piksele pomiędzy in-
formacją na ekranie , a zawartością pamięci
sterownika ( fot. 9 ). Wyglądało to na kolejny
problem programowy, ale tym razem o wiele
trudniejszy do pokonania.
Aby upewnić się, że wyświetlacz nie jest
uszkodzony, podłączyłem go do telefonu No-
kia 3310. Zgodnie z oczekiwaniami współ-
praca z telefonem przebiegała bez zarzutu.
Było oczywiste, że sterownik wyświetlacza
potrzebuje uzupełnienia o komendę lub ko-
mendy w  trakcie inicjalizacji. Przeprowa-
Fot. 7. Problem z czyszczeniem ekranu
wyświetlacza
Fot. 9. Przesunięcie w pionie
le. Wyjaśniałoby to też, dlaczego procedury
wyświetlania bitmap dla PCD8544 nie dzia-
łają w z tym wyświetlaczem ( fot. 8 ).
Procedura wyświetlania bitmapy działa
podobnie jak zerowanie wyświetlacza. Z ta-
blicy, w której zapisana jest bitmapa są po-
bierane i kolejno wpisywane do pamięci 504
bajty. Jeżeli liczniki wierszy się inkrementują
po zapisaniu 102 bajtów, a nie 84 bajtów jak
w PCD8544, to wyświetlanie bitmap w ten
sposób nie mogło się udać.
Fot. 8. nieprawidłowe wyświetlania
bitmapy
żeli dokładnie przyjrzeć się fot. 8, to widać,
że obszar z przypadkowymi wartościami ma
szerokość 11 pikseli. Pozostał wąski frag-
ment o szerokości 3 pikseli. Wpisanie kolej-
nych 102 bajtów zlikwidowało również i ten
pasek.
Z  tych doświadczeń wynikały pewne
wnioski. Pierwszy to taki, że sterownik wy-
świetlacza ma inną organizację pamięci niż
PCD8544, a zatem nie może to być PCD8544.
Z wyliczeń wpisywanych bajtów w trakcie
zerowania wynika, że pamięć wyświetlacza
tego sterownika odpowiada poziomej roz-
dzielczości równej 102 piksele. Najprawdo-
podobniej sterownik może sterować matry-
cami o rozmiarze 102×64 lub 102×65 pikse-
Tab. 2. Znaczenie bitów komend
Bit
0
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
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
87
ELEKTRONIKA PRAKTYCZNA 12/2009
862894700.158.png 862894700.159.png 862894700.160.png 862894700.161.png 862894700.162.png 862894700.163.png 862894700.165.png 862894700.166.png 862894700.167.png 862894700.168.png 862894700.169.png 862894700.170.png 862894700.171.png 862894700.172.png
 
notatnik konstruktora
Fot. 10. Zestaw do odczytywania komend wysyłanych do sterownika wyświetlacza
dzane próby wykazały, że prawidłowo dzia-
łają wszystkie komendy z zestawy komend
PCD8544, oprócz prawidłowego pozycjono-
wania w  pionie pierwszej linijki. Ponadto
sterownik nie chciał wejść w tryb adresowa-
nia pionowego.
Ponieważ nie wiadomo jaki sterownik
zastosowano w  wyświetlaczu, to aby nie
szukać przysłowiowej igły w stogu siana po-
został tylko jeden sposób trącający szpiego-
stwem przemysłowym. Do pól kontaktowych
telefonu przylutowałem kable zakończone
zaciskanym złączem IDC10. Pomiędzy płyt-
kę wyświetlacza, a kabel od telefonu została
włączyłem przejściówkę, do której podłą-
czyłem kable kanałów analizatora stanów
logicznych LH1116 oscyloskopu cyfrowego
Rigol DS1052D ( fot.   10 )
Do analizatora podłączono wszystkie li-
nie sterujące wyświetlaczem. Na rys.   11 po-
kazano zrzuty ekranu oscyloskopu w trakcie
analizy sygnałów wysyłanych
Na rys. 11a widać, że zerowanie pamięci
jest przeprowadzane przed jej inicjowaniem,
wykonywane jest w 6 krokach i przebiega po-
dobnie, jak zapis bitmapy z list. 2. Zamiast
wpisywać do sterownika 612 bajtów rów-
nych 0 można wykonać zerowanie w wier-
szach po 84 bajty, tak jak to pokazano na
list. 4. Takie zerowanie będzie działało także
w przypadku, gdy sterownik wyświetlacza
będzie miał jeszcze inną rozdzielczość, niż
102 piksele w poziomie.
Analiza sygnałów odczytanych przez
analizator dała w końcu odpowiedź na py-
tanie o prawidłową inicjalizację sterownika.
Telefon wysyła do sterownika wyświetlacza
następującą sekwencję komend:
0x21 – komendy rozszerzone, adresowa-
nie poziome
0x05 – współczynnik temperaturowy lub
nieznana komenda
0x14 – komenda ustawienia współczyn-
nika multipleksowania (BIAS)
0xBF – komenda ustawiania kontrastu
(napięcia zasilania matrycy)
0x20; – zestaw komend podstawowych
0x0C – koni guracja wyświetlacza (tryb
normalny).
Jedyną różnicą pomiędzy inicjalizacją
PCD8544 stosowaną przeze mnie a inicja-
lizacją wysłaną przez telefon była inna ko-
menda współczynnika temperaturowego.
Przy wysłaniu komendy 0x06 wyświetlacz
zachowywał się jak na fot. 8, ale po wysłaniu
0x05 przesunięcie zniknęło. Podejrzewam,
że w  badanym sterowniku wyświetlacza
Fot. 12. Wyświetlanie bitmapy
rys. 11a. Ekran analizatora stanów
logicznych: proces inicjalizacji
z zerowaniem pamięci
Fot. 13. Wyświetlanie tekstu
List. 4. Zmodyfi kowana funkcja
zerowania pamięci
void ClrDisp (void)
{
char j,k;
for(k=0;k<6;k++){
Poz(0,k);//pierwsza linijka
for(j=0;j<84;j++) //wpisywanie
84 bajtów zerowych
WriteData(0);
}
}
rys. 11b. Ekran analizatora stanów
logicznych: fragment wysyłania komend
inicjalizacyjnych (bez zerowania)
komenda o kodzie 0x05 ma inne znaczenie,
niż ustawienie współczynnika temperaturo-
wego.
Na fot. 12 fot. 13 pokazano wyświetla-
nie bitmapy i tekstu przy prawidłowo zaini-
cjalizowanym wyświetlaczu. Samą funkcję
inicjalizacji pokazano na list. 5 . Wyświetlacz
rys. 11c. Ekran analizatora stanów
logicznych: szczegóły wysyłania komendy
88
ELEKTRONIKA PRAKTYCZNA 12/2009
862894700.173.png 862894700.175.png 862894700.176.png 862894700.177.png 862894700.178.png 862894700.179.png 862894700.180.png 862894700.181.png
Zgłoś jeśli naruszono regulamin