Bir zamanlar pic ile nokia 3310 lcd kullanımı populerdi uzun sürede güncel kalacağı kesin bu konu hakkında detaylı Türkçe kaynak 3310-lcd bağlantı özellik bilgileri C dili ile örnek açıklamalı kodlar proteus model, library dosyaları ve nokia 3310 lcd üzerinde şekil oluşturmak için kullanılan FastLCD programının kullanımı….
Hazırlayan: Fırat Deveci (FxDev) – İyi hazırlanmış değerli bir kaynak emeği geçen kişilere teşekkürler
Nokia 3310 LCD Kullanımı
Nokia 3310 ekranı aslında Philips firmasının PCD8544 tabanlı 48×84 pixellik bir grafik lcd’dir. Seri iletişim protokolü kullandığı için zaman problemleri yaşanması giderilmiştir.
Pin Tanımlamaları
1) VDD : +2,7V’tan +3.3V değerleri arasında voltaj uygulanmalıdır. Yüksek voltaj değerleri LCD’nin kolaylıkla yanmasına neden olabilir.
Voltaj devresi için aşağıdaki devre kullanılabilir;
2) SCLK : SCE pini sıfırken, seri iletişimin saat darbeleri buradan alınır.
3) SDIN : Seri data giriş ucudur, datalar SCLK’nin yükselen kenarlarında işlenir.
3) D/C’ : Kontrol pinidir, bilgi data mı yoksa komut mu onu anlamaya yarar. Alınan bilgi bu pin ‘0’ iken komut, ‘1’ iken veridir.
4) SCE : Seri iletişimi aktif etme ucudur, herhangi bir bilgi gönderilmek istendiğinde ‘0’ yapılmalıdır.
5) GND : Toprak ucudur.
6) Vout : Kontrast ucudur, toprak ucuna 1-10 mikro farad arasında kondansöterle bağlanmalı.
7) RES : Reset ucudur, başlangıçta o yapılmalıdır, yoksa LCD zarar görebilir.
Zaman Diyagramları ve İletişim
Seri iletişim diyagramda da görüleceği üzere oldukça basittir.
-Öncelikle SCE pini ‘0’ yapılmalı.
-D/C’ pininden gönderilecek bilginin komut ya da data mı olduğu seçilmeli (data için ‘1’, komut için ‘0’ olmalı)
-Daha sonra SCLK’nın her yükselen kenarında 1 bit bilgi gönderilmelidir.
Aşağıdaki C rutini bu işlemi yapmaktadır;
void nokia_write_byte(char bytefornokia) // Seri veri gönderme rutini, datasheet'ten bire bir alıntı. { char i; for(i=8;i>0;i--) { nok_sclk=0; DelayUs(2); if((bytefornokia & 0x80)==0) nok_sdin=0; else nok_sdin=1; nok_sclk=1; DelayUs(2); bytefornokia = bytefornokia << 1; } }
Komut göndermek için
void nokia_write_command(char nokia_command) { nok_dc = 0; // Komut gönderimi için D/C=0; nok_sce = 0; // Chip aktif nokia_write_byte(nokia_command); nok_sce = 1; // Chip pasif }
Veri göndermek için
void nokia_write_data(char nokia_data) { nok_dc = 1; // Data gönderimi için D/C=1 nok_sce = 0; // Chip aktif nokia_write_byte(nokia_data); nok_sce = 1; // Chip pasif }
Bu fonksiyonlar kullanılabilir.
Hafıza Yapısı ve Komutlar
LCD’nin hafıza yapısı 6x8x84 bit şeklindedir. (48x84) X ekseninde 0’dan 83’e kadar adresleme yapılabilirken, Y ekseninde 0’dan 5’e kadar adresleme yapılabilir. (Kaynak: Datasheet)
Komutlar:
İlk yükleme değerleri için aşağıdaki işlemler yapılmalıdır;
1) İlk önce LCD pasif yapılmalı. Bunun için SCE=1 olmalı.
2) Daha sonra LCD’ye zarar vermemek için 10ms kadar RES=0 olmalı ve daha sonra RES=1 yapılmalı.
3) Sonra sırayla aşağıdaki işlemler uygulanır
- 0x21: Tanımlanmış komutlara erişim açılıyor
- 0xC8: Kontrast voltajı ayarlanıyor.(Direk VSS’e bağlı)
- 0x13: LCD bias ayarlanıyor (1:48 modunda)
- 0x20: Yatay mod, X otomatik artacak, komutlara erişilmiyor.
- 0x09: LCD açılıyor
- DDRAM temizleniyor, böylece önceden kaydedilmiş kayıtlar siliniyor.
- 0x08: Tüm LCD segmentleri açılıyor.
- 0x0C: LCD normal moda çalıştırılıyor.
Bu işlemler aşağıdaki fonksiyon kullanılarak yapılabilir.
void nokia_init(void) { nok_dc=1; // Bilgiler DDRAM'de tutuluyor, Address counter ise otomatik artacak nok_sce=1; // Chip pasif DelayUs(200); nok_res=0; //Başlangıçta res=0 olmak zoruna, aksi halde LCD'ye zarar gelebilir DelayMs(10); nok_res=1; nokia_write_command(0x21); // LCD'ye komut yazılıyor. nokia_write_command(0xC8); // Vop V: 0xC8 (for 3V) nokia_write_command(0x13); // LCD (1:48) modunda (bias) nokia_write_command(0x20); // Soldan sağa x birer artırılarak yazılıyor // 0x22 kullanılsaydı, yukarıdan aşağı yazıcaktı. nokia_write_command(0x09); // Displayi aktif hale getir DelayMs(50); nokia_clean_ddram(); // DDRAM temizleniyor, aksi halde eski yazılmış karekterlerle karıştırılabilinir DelayMs(10); nokia_write_command(0x08); // Display temizleniyor DelayMs(10); nokia_write_command(0x0C); // Display normal moda dönüyor }
LCD’ye Yazı Yazmak
6x8x84bit büyüklüğünde DDRAM’i istediğimiz verilerle doldurursak, doluluk oranına göre ekranda şekiller oluşur. Örneğin ilk ayarları yaptıktan sonra 0xFF değerini LCD’ye veri olarak gönderdiğimizde ekranın 0x8 lik alanında düz bir çizgi görürüz. Aynı şekilde 0x9F gönderdiğimizde de bir pixel genişliğinde İ harfi görürüz.
LCD’de yazı yazdırmak için önceden ASCII dizisi tanımlayıp, istediğimiz şekilde harfleri çağırıp kolaylıkla yazdırabiliriz. (Bunun için sonda verilen 3310 kütüphane kodlarına bakmak yeterlidir)
LCD’de Şekil Oluşturmak
Bunun için yine aynı şekilde diziler oluşturulmalı ve bu dizinin boyutu 84x6=504 bit boyutunu geçmemelidir. Bu tanımlamayı yapmak teker teker elle çok zor olacağı için FastLCD gibi programları kullanmak işinizi daha da kolaylaştıracaktır.
FastLCD Kullanımı
Programın ara yüzü aşağıdaki gibidir ve öncelikle boyut ayarından genişlik 84, yükseklik ise 48 yapılmalıdır.
Memory yapısı 6x8x84 olduğu için karakterlerimizin boyutunu 6x8’lik seçmek uygun olacaktır.
Ayarlar yapıldıktan sonra istenilen şekili çizebilirsiniz.
Daha sonra bunu yukarıdaki menüde yazan BAS seçeneğine basıp, nokia3310’u seçip özellikle save as kısmından image seçilmelerek kaydedilir.
Daha sonra kaydedilen dosya notepad++ gibi bir programla açılır ve &h olan kısımlar 0x ile değiştirilir.
Değiştirilen dizi aşağıdaki gibi tanımlanır;
const int fxdev[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF0,0xF8,0x78, 0x38,0x78,0xF8,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF, 0xFF,0x07,0x01,0x00,0x00,0x00,0xC0,0xFB,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0, 0xE0,0xE0,0xFF,0xFF,0xFF,0x78,0x78,0x3C,0x3E,0x1F,0x1F,0x0F,0x07,0x00,0x00,0x00, 0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x00,0x00,0x00, 0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xC0, 0xF0,0xF0,0xF0,0x70,0x70,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0xC0,0x00,0x00, 0x00,0x00,0x00,0xE0,0xFC,0xFE,0x7E,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x81,0xC1,0xC1,0xE1,0xFF,0xFF,0xFF,0x70,0x78,0x78,0x78,0x38,0x3C,0x3C, 0x3C,0x00,0x00,0x00,0x07,0x0F,0x3F,0xFF,0xFC,0xF0,0xF8,0xFC,0x7F,0x1F,0x0F,0x07, 0x01,0x00,0xFE,0xFF,0xFF,0x07,0x03,0x83,0xF3,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0xFB,0x79,0x3E,0x3F,0x1F,0x0F,0x07,0x00,0x00,0x01,0x0F, 0x3F,0xFF,0xFE,0xF0,0x80,0xF0,0xFE,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xE0,0xF8,0xFC,0x7E,0x3F,0x0F,0x87,0xC3,0xF1,0xFF,0xFF,0x7F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xFC,0x7F,0x3F,0x1F,0x07,0x0F,0x1F, 0x7F,0x7E,0x78,0x70,0x00,0x00,0x7F,0x7F,0x7F,0x3E,0x1F,0x1F,0x0F,0x07,0x1F,0x7F, 0x7F,0x7C,0xF0,0xF0,0xF0,0xE0,0x01,0x03,0x07,0x0F,0x1F,0x1E,0x1E,0x3C,0x3C,0x3C, 0x78,0x78,0x78,0x70,0x00,0x01,0x0F,0x3F,0x7F,0x7F,0x7F,0x1F,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x1F,0x1E,0x1F,0x1F,0x0F,0x07,0x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
Daha sonra yapılması gereken ise bu diziyi DDRAM’e yazmaktan ibarettir. Onu da mainde aşağıdaki gibi yapabilirsiniz;
for(i=0;504>i;i++)
nokia_write_data(fxdev[i]);
Proteus simülasyon görüntüsü şekildeki gibidir. İletişimde zamanlama problemi olmadığı için, gerçekte de sorunsuz çalışmaktadır Bu şekilde ekranınıza istediğiniz her şeyi yazdırabilirsiniz…
3310.h Dosyası
/* www.FxDev.org * 3310 LCD Kullanım Klavuzu * nokia_init(); ile LCD'nin ilk ayarlarını yap. * nokia_clean_ddram(); ile LCD nin DDRAM'i silinir. * nokia_write_command(0x20); şeklinde komut gönderilir. * nokia_write_data(0x01); şeklinde data gönderilir. * nokia_write_byte(0xFE); ile bir byte'lık bilgi gönderilir. * nokia_gotoxy(2,3); ile lcd'de belirli bölgelere gidilebilir. Sınır: (0,0) dan (83,5) tir. * nokia_contrast(0x0F); ile kontrast ayarı yapılır. * nokia_printchar("Deneme"); şeklinde yazı yazdırılır. * nokia_print(i+48); şeklinde sayı yazdırılır. * lcdpixel (3,4); şeklinde pixe belirtilir. * www.FxDev.org */ #define nok_res RD0 #define nok_sce RD1 #define nok_dc RD2 #define nok_sdin RD3 #define nok_sclk RD4 extern void nokia_init(void); extern void nokia_clean_ddram(void); extern void nokia_write_command(char nokia_command); extern void nokia_write_data(char nokia_data); extern void nokia_write_byte(char bytefornokia); extern void nokia_gotoxy(char ynokia, char xnokia); extern void nokia_contrast(char contrast); extern void nokia_printchar(const char *s); extern void nokia_print(char charsel); extern void lcdpixel (char x, char y) ;
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/07/05 Etiketler: 3310 lcd proteus, 3310 model library, fastlcd kullanımı, lcd şekil çizme, lcd yazı yazma, nokia lcd kullanımı
7110’da tamam, onun için bir kullanım kılavuzu hazırlamadım ama iletişim kısmı dahil neredeyse her şey aynı…
Onunla ilgili bir .gif dosyası hazırladım, onu yarın ilgili sitelerde görebilirsiniz 😉
benim elimde siemens a70 telefonun ekranı var bacak bağlantılarını vs buldum ama lcd ye ne şekilde görüntü aktaraccağımı bilmiyorum. kullanım bakımından 3310 ekranından çok daha iyi bir ekran kendi içinde backlight ı var. acaba burdaki yöntemlerle o lcd ye de görüntü aktarabilirmiyim. bu konuda bana yardımcı olabilirmmisiniz şimdiden teşekkürler.
Eğer datasheet’i verirseniz bir göz atma şansımız olabilir…
Güzel Paylaşım. Ellerine Sağlık.
İyi günler
bende 7110 ekranı var ama onu 89c51 ile kontrol etmek istiyorum keil c ile yardımcı olabilirmisiniz ?
yazınızdan yararlanarak assembly ile ekranı çalıştırdım. ancak kontrast fazla ayarlamayı yapamadım vout da 1 uF kondansatör var bias ve kontrast ayarını nasıl yapacağım ??
Güzel paylaşım olmuş merak edip denedim.Xc8 e uyarladım baya zamanımı aldı yolun başındayım daha 😀 breadboardda denemek kaldı bir tek.
merhaba simülasyon dosyaları library v3. olduğundan proteus 7.10 da library v4 olduğundan çevirmen gerekir diyor. nasıl çevirebilirim. proteus başka bir çevirici ile çevirin diyor yardımcı olmuyor. bu konuda yardım edebilir misiniz. Teşekkürler.