taraf�ndan Jan Svenungson <jan.svenungson(at)linux.nu>
Yazar hakk�nda:
Jan 1996'dan ve kas�ts�z yere iki defa reboot ya�ad���ndan beri GNU/Linux kullan�yor.
(g�� hatalar�nda reboot belirlenemiyor).
T�rk�e'ye �eviri:
Ceyhun Elmas <ceyhun.elmas(at)linuxfocus.org>
��erik:
|
HD44780 uyumlu LCD-Ekran'lar� anlamak
�zet:
Bu yaz� HD44780 uyumlu LCD-display �zerine bir iki �ey ��retmeyi ama�l�yor.
Pararlel portunuza ba�lant�n�n nas�l yap�laca��n� ve LCDInfo ad�n� verdi�imiz k���k bir programla nas�l programlanaca��n� anlataca��z.
Yaln�zca g�r�nt�ye ba�lant�y� de�il, ayn� zamanda program� �al��t�rarak istedi�iniz her t�rl� bilgiye nas�l ula�aca��n�z�, donan�m�n bunu nas�l yapt���n� da
anlayarak ��reneceksiniz.
_________________ _________________ _________________
Giri�
�lk olarak belli bir donan�ma ve yaz�l�ma sahip olmal�s�n�z.
Standart paralel porta (yaz�c� portu) sahip, �zerinde GNU/Linux ko�an ve gcc ile glibc bulunan bir bilgisayara sahip oldu�unuzu varsay�yoruz.
Ayr�ca HD44780 uyumlu LCD ekrana, paralel port kablosuna ve e�er parlakl��� de�i�tirmek istiyorsan�z potentiometer'e
gereksiniminiz bulunuyor.
G�r�nt� i�in standart +5V'luk bir g�� ba�lant�s� gerekecek (
disk-s�r�c�, sabit-s�r�c�, vb i�in ayr�lm�� kaynaklardan birisini kullanabilirsiniz).
LCD ekrana ba�land���n�zda bunun nas�l �al��t���n� bilmelisiniz.
Normalde bu yaz�n�n konusu bu olmamas�na ra�men programa yard�mc� olacak bile�enlerini anlataca��m.
Son olarak epeyce kullan��l� ekran ��kt�lar� alaca��z. Bunu LCDInfo isimli k���k program �zerinden anlataca��m.
Bu program HD44780'in pek �ok �zelli�ini destekliyor ancak bu an i�in �ok fazla ��kt� vermiyor.
Bu program hen�z alfa s�r�m�nde ve zaman bulduk�a bu program� geli�tirece�im.
E�er daha �nce C ile program yazmad�ysan�z biraz C �zerine okumay� d���nmelisiniz. Sizi benim de �u anda oldu�um gibi
en az�ndan ba�lang�� seviyesinde varsay�yorum.
Nas�l ba�lan�lacak ?
�lk olarak LCD �zerindeki farkl� pinlere ve bunlar�n ne yapt���na bakal�m.
Pin 1'ye VSS denir ve GND' ye gitmeye yarar.
Pin 2'ye VDD denir ve +5V'luk g�� destek pinidir.
Pin 3'e VLC denir ve potentiometer ba�lanarak parlakl�k i�in karar vermeye yarar.
Pin 4'e RS denir ve ekran�n instructions ya da data'y� getirmesi bu pine ba�l�d�r.
Pin 5'e R/W denir ve LCD'nin sending ya da receiving yapt���n� denetler.
Pin 6'e Enable denir. Bu al�aktan y�kse�e ya da tekrar al�a�a gitti�inde LCD 4,5 ya da 7-14 okur.
7-14 pinleri data bus line'd�r ve DB0-DB7 olarak adland�r�l�r.
Bunlar LCD'ye ana data bitlerini g�nderirler ve ekranda nereye ne yaz�ld���n� denetlerler.
15 ve 16 pinleri yaln�zca ekran �zerindeki arka �����, +5V 'u ve pin 15 ile +5V aras�ndaki 3.8 Ohm'la GND'ye kar��l�k gelir.
Yaz�c� portu �zerinde nereye ba�lant� yap�laca��n� sa� taraftaki �ekil ile g�stermeye �al��t�m.
�zerine klikleyerek daha b�y�kce g�rebilirsiniz.
E�er ekran parlakl���n� de�i�tirmek isterseniz �emata g�zatabilirsiniz. Ben basit�e pin 3 ve pin 1'i GND'ye ba�lad�m ve bu bende �al��t�.
e�er sizde garip renkler olu�uyorsa potentiometer eklemeyi d���nmelisiniz.
PC'den g�� getirirken l�tfen dikkatli olun. E�er g�c� yanl�� kablodan getirirseniz, +12V gelecektir ve bu da LCD'nizi bozacakt�r.
�stedi�imiz kablo k�rm�z� olan�. Sar� +12V ve siyah ise GND'dir.
E�er do�ru kabloyu ba�lad�ysan�z bilgisayar� ilk a�t���n�zda LCD ilk sat�rda (ve e�er varsa ���nc�de) siyah� g�stermeli.
LCD nas�l �al���r ?
LCD siz s�yleyinceye kadar bi�ey yapmaz, basit�e do�ru y�kselme ve d���� tan�mlan�ncaya kadar bekler (bu biz enable pinine y�ksek de�eri
verdi�imizde ve sonra pin d���k de�eri geri al�rken ge�en s�rede beklemedir.)
Bu noktada ekran hangi verinin i�lendi�ini okur ve sonras�nda bilbiyi al�r ya da g�nderir.Son olarak
data bitleri g�nderir ya da al�r.
Bu yaz�da LCD'den bilgi almayaca��z. Dolay�s�yla R/W pini yazma anlam� ta��yan d���k de�erde olacak.
RS pini de karakterlerin yaz�lmas� d���nda d���k de�erde olacak. Her�ey d���n�lm�� bir yap�da.
Bu program� ger�ekten kolay yap�yor.
Bunu bilirsek ekran� a�makla ve bilgiyi almaya haz�r hale getirmekle ba�lamak isteriz.
Bu i�lemin ger�ekle�me s�recinde, biz ekrana bir fonksiyon setiyle ya da benzeri bir �ekilde a��l dedi�imizde yap�l�r.
E�er g�� kablosunu bilgisayar i�inden getirdiyseniz g�� herzaman a��k olmal� aksi durumda bu yapman�z gereken ilk �ey.
Sonraki "Function set" nas�l bir ekrana sahip oldu�unuza ba�l�.
Anlamay� kolayla�t�rmak i�in fonksiyon setini kullan�rken ne yapt���m�z� tam olarak a��klayaca��m.
DB2 Karakter Font bitidir ve low olmal�d�r bu 5x7 dot matrix anlam�na gelir.
BD3 Display Lines bitidir ve high olmal�d�r bu 2 �izgi anlam�ndad�r. E�er ekranda 4 �izgiye sahipseniz ne olur?
�nemsenecek bir durum yok, ekran belle�inde birinci ve ���nc� �izgiler ayn�d�r yani "high" kullanmal�s�n�z.
DB4 Data Length bitidir ve 4 ya da 8 DB oldu�una karar verir. E�er benim �emadaki gibi ekrana ba�land�ysan�z
bu DB'yi high yapmal�s�n�z.
Sonra DB5'i high yaparak ekrana bunun ger�ekten bir "Function Set" yap�s� oldu�unu s�ylemeliyiz. Sonra
RS ve R/W'nin low ve y�kselme ve d�����n "enable" oldu�undan emin olmal�y�z.
Zamanlamay� elle denetleyin, yaln�zca mikrosaniye i�in dondurdu�umuzu varsay�yorum ki bu gerek duydu�umuzdan daha fazla.
Kaynak Kod
Burada LCDInfo program�n�n par�alar�ndan bahsedece�im. Bu sayede HD44780 aray�z�n�n nas�l �al��t���n� daha kolay anlayabilirsiniz.
LCDInfo program�n� sayfan�n sonunda ya da do�rudan bu adresten (iolcd.c ve lcdinfo.c) indirebilirsiniz.
Yukar�daki yap�y� C program� ile yazmak i�in ne gerekiyor ? �nan�n bana bu �ok kolay.
Ad�m ad�m kodu anlataca��m ve C'ye ba�lang�� seviyeinde bile olsan�y anlayacaks�n�z.
�lk olarak baz� ba�l�k dosyalar� ve fonksiyonlar tan�ml�yoruz.
(bilgi i�in kayna�a g�z at�n). Sonra e�lenceli k�s�m geliyor.
#define D_REGISTER 0
#define I_REGISTER 2
#define WRITE_DATA 8
#define BASE 0x378
int main(void)
{
ioperm(BASE,3,1);
[CUT]
}
Buras� paralel porta eri�im hakk� sa�layan ana fonsksiyondaki ilk yap�. BASE 0x378 ya da benzeri olmal� ve
"3" par�as� 0x378, 0x379 ve 0x380'e eri�ebilece�imiz anlam�na geliyor ki bu temelde t�m yaz�c� portudur.
�� adres olmas�n�n nedeni portun data status ve control aras�nda b�l�nmesidir.
Bunun bizim i�in anlam� �nce data pinini sonra control pinini kur ve bunu bir komutla yapam�yoruz.
Yapaca��m�z sonraki �ey yukar�daki fonksiyon setini a��klamak.
void function_set(void)
{
outb(56, BASE);
Bu DB pinini 5x7 dot matrix'e kurar, 2 �izgi vs.
outb(I_REGISTER + WRITE_DATA, BASE + 2);
Bu RS ve R/W pinlerini y�nlendirmeye ve yazmaya kurar. Ben genel de�i�kenler tan�mlad�m ; I_REGISTER ve WRITE_DATA ve
bunlar 2 ve 8' e�it.
Sonra y�kselmeyi ve d����� tan�ml�yoruz.
outb(ENABLE + I_REGISTER + WRITE_DATA, BASE + 2);
usleep(0);
outb(I_REGISTER + WRITE_DATA, BASE + 2);
}
Bu kod basit�e y�kselmeyi tan�mlar ard�ndan bekler ve d��meyi tan�mlar.usleep(0); komutu ger�ekten ideal olan� de�il ama ekran i�in
zamanlama kodunu bitirmedim.
Belki baz�lar�n�z RS ve R/W'nin yap� i�inde d���k olmalar� gerekti�ini s�yledi�imde kod i�inde neden
on oldu�unu merak edebilirsiniz. ��nk� 1, 14 ve 17 pinleri "hardware inverted" dir. Bunun anlam� e�er pin14 "off" ise
bu yaz�c� portu ile ili�kilidir, pin y�ksek de�erdedir.
Kolay oldu�unu s�ylemi�tim, �yle de�il mi ?
Karakterleri nas�l g�r�nt�leriz ?
Belki ekran�n�da yaz� gibi baz� basit �eyleri g�r�nt�lemek istiyorsunuz.Problem de�il.
Kod (komut k�s�mlar�) karakter ��kt�s� ve fonksiyonlar i�in ayn�d�r. Yaln�zca baz� de�i�kenleri de�i�tirmeliyiz.
RS'yi y�nlendirmeye kurmak istemiyoruz ancak veriye birlikte ba�lamak istiyoruz. Bunu print_character() fonksiyonu
a�a��daki gibi yapar :
void print_character(int character)
{
outb(D_REGISTER + WRITE_DATA, BASE + 2);
outb(character, BASE);
outb(ENABLE + D_REGISTER + WRITE_DATA, BASE + 2);
usleep(0);
outb(D_REGISTER + WRITE_DATA, BASE + 2);
}
G�rebildi�iniz gibi "I_REGISTER" '� "D_REGISTER"'a ve "56"'y�
"character"'e de�i�tirdik ancak bu ne anlama geliyor ? E�er karakter kodlar�na bakarsan�z bunu anlayacaks�n�z.
Yaln�zca karakter fonksiyonuna gereksinimimiz var (C kulland���m�zdan beri ilk olarak tam say� yapma zahmetine girmemize bile gerek yok
) ve karakterler ekranda toplanacak.
Bu kod ile ile temel bir LCD program yap�s�na sahipsiniz , kullan�n ve diledi�iniz �eyi g�r�nt�leyin, bo� ekran belle�i,
aktif http ba�lat�lar� vs...
Baz� �rnekler bu adreste bulunuyor : LCDInfo program� bir GNU/Linux bilgisayarda proc dosya sistemi i�indeki baz� �eyleri
g�r�nt�l�yor.
Kaynaklar
Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz
Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
2002-09-23, generated by lfparser version 2.31