Kurs AVR-GCC Wyświetlacz LCD od Nokii_3310.pdf

(417 KB) Pobierz
Kurs AVR-GCC Wyświetlacz LCD od Nokii_3310
1 Z 11
Artykuł pochodzi ze strony XYZ HOBBY ROBOT ( xyz.isgreat.org )
Kurs AVRGCC Wyświetlacz LCD od Nokii_3310
26.04.11 ABXYZ
Niniejszy tekst jest dodatkiem poszerzającym tematykę
publikowanego na tej stronie kursu AVRGCC .
Jak mówią, jeden obraz wart jest tysiąca słów, dlatego warto
zainteresować się wyświetlaczami graficznymi. W tym artykule
zajmiemy się wykorzystaniem wyświetlaczy LCD od popularnych
niegdyś telefonów komórkowych Nokia 3310/3410. Pewnie
niektórzy czytelnicy zastanawiają się, czemu nie wybrałem duŜego,
kolorowego wyświetlacza o rozdzielczości QVGA. Przede wszystkim
ze względu na cenę, szkoda montować w kaŜdym urządzeniu
modułu LCD kosztujący ponad 100zł, zaś wyświetlacze od starych
komórek praktycznie nic nie kosztują i teŜ są fajne:)
Wyświetlacz LCD od telefonu Nokia 3310 posiada
monochromatyczny ekran o rozdzielczość 84x48 (wymiary
czynnego pola ekranu 30x20mm). WyposaŜony jest w sterownik
PCD8544(lub podobny) z szeregowym interfejsem SPI. Dostępny
jest wyłącznie tryb graficzny, ale moŜna łatwo programowo
zaaranŜować tryb tekstowy; przykładowo moŜna pokazać sześć linii
tekstu, kaŜda po 14 znaków wielkości 6x8 pikseli.
Wyświetlacz od telefonu nokia 3310 wraz z oryginalną ramką. Identycznie wygląda
wyświetlacz od noki 3410.
Wyświetlacz od telefonu nokia 3310 wydobyty z ramki.
Wyświetlacz od Nokii3410 wygląda identycznie jak wyświetlacz od
Nokii3310, ten sam układ wyprowadzeń złącza, ale ma nieco
większą rozdzielczość: 96x65 (moŜna pokazać 8 linii tekstu, kaŜda
po 16 znaków 6x8). Wyświetlacz od Nokii3410 wyposaŜony jest
608082538.012.png 608082538.013.png 608082538.014.png
2 Z 11
w kontroler "Philips OM6206", który programuje się prawie w ten
sam sposób jak kontroler PCD8544 z Nokii3310. Do obsługi obu
typów wyświetlaczy będziemy wykorzystywać te same funkcje
napisane w języku C.
LCD Nokia 3310 LCD Nokia 3410
Rozdzielczość 84x48 96x65
kontroler PCD8544 OM6206
cena <10zł <10zł
Monochromatyczne wyświetlacze LCD od telefonów nokia 3310/3410
Podłączenie wyświetlacza do mikrokontrolera AVR
Wyświetlacz jest delikatnym elementem, dlatego lepiej jest
pozostawić go w jego oryginalnej ramce. Ramkę moŜna
odpowiednio przyciąć i wraz z wyświetlaczem przykręcić wkrętami
do jakieś płytki, albo przykleić.
Na tylnej stronie ramki wyświetlacza dostępne jest złącze; w
telefonie miedziane styki złącza przylegają do ścieŜek na płytce
drukowanej.
Złącze na tylnej stronie wyświetlacza.
Nr
styku Sygnał kierunek
Opis
1 VDD zasilanie
Zasilanie 2.7 .. 3.3 V
2 SCLK wejście
Serial clock. Sygnał zegarowy taktujący
dane na linii SDIN
3 SDIN wejście
Wejście danych synchronizowane
sygnałem SCLK
4
D/C wejście
Wejście wyboru rodzaju danych
wprowadzanych do sterownika
(wyświetlane1,sterujące 0)
5 SCE wejście
Wejście aktywujące interfejs
szeregowy(aktywny stan niski)
6 GND zasilanie
Masa zasilania
Ouptut voltage. Kondensator
elektrolityczny 110 uF między VOUT i
GND.
8 /RES input Reset LCD (aktywny stan niski)
Opis wyprowadzeń w złączu wyświetlacza od noki 3310/3410
Najprostszym sposobem przyłączenia wyświetlacza jest przylutować
przewody bezpośrednio do miedzianych styków złącza, bez
rozbierania ramki. Ale trzeba lutować szybko i zdecydowanie,
inaczej plastykowa listwa, na której osadzone są miedziane styki
złącza moŜe się pod wpływem ciepła roztopić i odkształcić.
7 VOUT zasilanie
608082538.015.png 608082538.001.png
3 Z 11
Najprostszym sposobem przyłączenia wyświetlacza jest przylutować przewody do
miedzianych styków złącza, bez wyciągania wyświetlacza z oryginalnej ramki.
Wyświetlacz z przewodami przystosowanymi do podłączenia do płytki stykowej.
Wyświetlacz wymaga napięcia zasilania 2.73.3 VDC, zatem
najprościej jest zasilać całość: mikrokontroler i wyświetlacz
napięciem 3.3V. W takim przypadku wejścia sygnałowe
wyświetlacza moŜna podłączyć bezpośrednio do wyprowadzeń
portów we/wy mikrokontrolera. Na schematach wejścia sygnałowe
wyświetlacza połączone są do wyprowadzeń mikrokontrolera
skojarzonych ze sprzętowym interfejsem SPI AVRa atmega.
W przykładowych programach, które będziemy dalej uruchamiać,
moŜna wybrać sprzętowe lub programowe SPI; w przypadku wyboru
programowego SPI, sygnały sterujące wyświetlaczem moŜna
przyłączyć do dowolnych porów we/wy AVRa.
Schemat 1 Sposób przyłączenia wyświetlacza od nokii3310/3410 do interfejsu SPI
mikrokontrolera atmega8(88) zasilanego napięciem 3.3V
608082538.002.png 608082538.003.png 608082538.004.png 608082538.005.png
4 Z 11
Nie wszystkie wersje AVR mogą być zasilane napięciem 3.3V,
schemat nr 2 pokazuje, jak moŜna podłączyć wyświetlacz zasilany
napięciem 3.3V do mikrokontrolera zasilanego napięciem 5V.
Wyświetlacz od Nokii 3310 zuŜywa minimalne ilości prądu, napięcie
3.3V do jego zasilania moŜna uzyskać stosując dzielnik napięcia:
rezystor i dioda zenera 3.3V. Na schemacie wejścia sterujące
wyświetlacza połączono z portami we/wy AVRa poprzez bufor
74ls07. Scalony układ 74LS07 zawiera sześć cyfrowych buforów
z wyjściami typu otwarty kolektor, wyjścia te zostały podciągnięte
rezystorami 330 do napięcia 3.3V.
Schemat 2 Sposób przyłączenia wyświetlacza od nokii3310/3410 zasilanego napięciem
3.3V do mikrokontrolera zasilanego napięciem 5V
Komunikacja z wyświetlaczem
Wyświetlacz od Nokii 3310 wyposaŜony jest kontroler PCD8544 z
szeregowym interfejsem SPI(Serial Peripheral Interface). Interfejs
posiada cztery wejścia:
SDIN szeregowe wejście danych,
SCLK sygnał zegarowy taktujący dane na linii, SDIN
/SCE wejście aktywujące interfejs szeregowy,
D/C wejście wyboru rodzaju danych (wyświetlane lub
sterujące).
Komunikacja przebiega tylko w jednym kierunku, od
mikrokontrolera do wyświetlacza. ZaleŜnie od stanu linii D/C, bajty
danych wysyłane do wyświetlacza, mogą być interpretowane przez
kontroler jako komendy do wykonania albo dane zapisywane do
pamięci RAM obrazu; stan wysoki na linii D/C sygnalizuje daną,
stan niski komendę.
Rys.1 pokazuje przebieg transmisji jednego bajtu danych od
mikrokntrolera do wyświetlacza Komunikację rozpoczyna się od
ustawienia linii /SCE w stan niski, co aktywuje interfejs SPI. Jeśli
wysyłany bajt jest komendą, linię D/C ustawia się w stan niski,
a jeśli zwykłą daną w stan wysoki Następnie, linią SDIN,
szeregowo(bit po bicie) przesyła się 8 bitów danej, zaczynając od
bitu najbardziej znaczącego. Transmisja szeregowa jednego bitu
przebiega w następujący sposób: Wpierw na linii danych SDIN
ustawia się stan niski lub wysoki, zaleŜnie od wartości przesyłanego
bitu; następnie na linii SCLK podaje się impuls: 010 kontroler
odczytuje kolejne bity danych przy rosnącym zboczu sygnału SCLK.
Zmiana na linii /SCE stanu niskiego na wysoki sygnalizuje
zakończenie transmisji.
Rys.1 Przesłanie jednego bajtu do wyświetlacza przez SPI.
A oto funkcja "lcd_write_byte" realizująca w sposób programowy
przesłanie jednego bajtu z mikrokontrolera do wyświetlacza:
void lcd_write_byte( unsigned char c_d, unsigned char data )
{
unsigned char m;
LCD_CE_CLR
if (c_d)
608082538.006.png 608082538.007.png 608082538.008.png
5 Z 11
LCD_DC_SET
else
LCD_DC_CLR
for
(m
= 0x80
; m
; m>>=
>>= 1
)
{
if
)
LCD_DATA_SET
else
LCD_DATA_CLR
LCD_CLK_SET
LCD_NOP
LCD_CLK_CLR
(data
& m
}
LCD_CE_SET
}
Listing nr 1. Funkcja przesyłająca szeregowo jeden bajt danych z mikrokontrolera do
wyświetlacza LCD poprzez interfejs SPI zrealizowany programowo.
Pierwszy argument funkcji "lcd_write_byte" wskazuje czy wysyłana
jest komenda, czy bajt zwykłych danych (1komend, 0zwykła
dana); drugi argument to kod komendy lub bajt danych. UŜyte w
funkcji makrodefinicje: LCD_x_SET, LCD_x_CLR ustawiają na
liniach sygnałowych stan wysoki lub niski, a makro LCD_NOP to
krótkie opóźnienie w programie.
Mikrokontrolery atmega wyposaŜone są w sprzętowy interfejs SPI,
który moŜemy wykorzystać do sterowania naszym wyświetlaczem.
PoniŜej znajduje się listing drugiej wersja funkcji "lcd_write_byte",
która wysyła do wyświetlacza jeden bajt z wykorzystaniem
sprzętowego interfejsu SPI.
/**/
SPCR
=
( 1 <<
<<SPE)|(
)|(
)|( 1 <<
<<
<<MSTR)|(
)|(
<<
)|( 1 <<
<<<
<<SPR0);
);
);
/**/
void lcd_write_byte
( unsigned char c_d
, unsigned char data
)
{
LCD_CE_CLR
)
LCD_DC_SET
else
LCD_DC_CLR
(c_d
SPDR
= data
;
while (!(
(!(SPSR
&
( 1 <<
<<SPIF)));
)));
LCD_CE_SET
}
Listing nr 2. Funkcja przesyłająca szeregowo jeden bajt danych z mikrokontrolera do
wyświetlacza poprzez sprzętowy interfejs SPI AVRa atmega.
Do kontroli sprzętowego interfejsu SPI AVRa atmeaga wykorzystuje
się trzy rejestry IO :
SPDR SPI Data Register,
SPCR SPI Control Register,
SPSR SPI Status Register.
Sprzętowy interfejs SPI mikrokontrolera atmega ma szerokie
moŜliwości konfiguracji, ale do sterowanie naszym wyświetlaczem
pasują ustawienia domyślne. Pozostaje tylko wybrać szybkość
działania interfejsu SPI, tzn. częstotliwość sygnału taktującego na
linii SCLK. SłuŜą do tego celu bity SPR0, SPR1 rejestru SPCR(SPI
Control Register) oraz bit SPI2X rejestru SPSR(SPI Status
Register), tabela poniŜej:
SPI2X SPR1 SPR0 SCK Frequency
0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
1 1 0 fosc/32
1 1 1 fosc/64
Wybór częstotliwości sygnału taktującego na linii SCLK interfejsu SPI mikrokontrolera
atmega
W naszych przykładach transmisja przez sprzętowy interfejs SPI
będzie przebiegać z częstotliwością fosc/16, czyli przy częstotliwości
pracy mikrokontrolera 16MHz sygnał taktujący na wyjściu SCLK
będzie mieć częstotliwość 1MHz.
Ustawienie bitów SPE i MSTR w rejestrze SPCR(SPI Control
Register) włącza interfejs SPI AVRa w trybie MASTER. Wysłanie
>>=
<<
<<
)|(
)|(
);
if
(!(
<<
608082538.009.png 608082538.010.png 608082538.011.png
Zgłoś jeśli naruszono regulamin