LCD Kullanımı: Yazığımız programlardan elde edeceğimiz neticeleri görsel olarak takip edebilmek amacı ile Pic’lere muhtelif büyüklüklerde LCD ekranlar bağlandığını biliyorsunuz. Şimdi Pic ile LCD kullanımı konusunda detaylı bir uygulama yapacağız ve LCD kullanımını her yönü ile öğreneceğiz.
Önce biraz LCD leri tanıyalım. Bu konuda en çok kullanılan LCD 2 sıra ve her sırada 16 karakter yer alan LCD ler kullanılır. Bunların 4 sıralı olanları olduğu gibi her sırada karakter adedi 40 ‘a kadar olanlarda mevcuttur. LCD ler standart olarak 14 bacaklı (pinli) ekranlardır. Bacak numaralarına göre fonksiyonları aşağıda belirtilmektedir.
1. Nolu Pin : GND bacağıdır.
2. +5V giriş bacağı
3. Kontrast ayara bacağı olup genelde 22 K lık trimpot’un bir bacağı GND ye diğer uç bacağı +5V’a ve orta bacağı da bu kontrast bacağına bağlanarak trimpot ile ekran koyuluk açıklık ayarı yapılır.
4. RS – Reset Bacağı
5. R/W yazma okuma set etme bacağı.
6. E – Enable bacağı.
7. D0 – Data Bacağı sıfır nolu bit.
8. D1 – Data Bacağı 1 nolu bit.
9. D2 – Data Bacağı 2 nolu bit.
10. D3 – Data Bacağı 3 nolu bit.
11. D4 – Data Bacağı 4 nolu bit.
12. D5 – Data Bacağı 5 nolu bit
13. D6 – Data Bacağı 6 nolu bit
14. D7 – Data Bacağı 7 nolu bit.
Bazı modellerinde 15. ve 16. cı bacaklarda mevcuttur. Bunlar back light denilen arkadan ekran aydınlatması için kullanılan Led ışığının voltaj besleme uçlarıdır. Bu uçlar ayrı verildiği gibi 15 ve 16. cı bacaklar olarak da verilebilir.
LCD nin kullanımı ile ilgili protokol’e biz burada girmeyeceğiz. Bu işi bize BASIC yapacak. Yalnızca LCD nin 8 adet (8 bitlik) Data giriş bacakları olduğunu ve istenirse LCD ile 8 yerine 4 bit üzerinden haberleşme yapılabileceğini belirtmek istiyorum. Aslında 8 bit’in tek seferde verilmesi yerine ince ilk 4 bit sonrada ikinci 4 bit verilerek 8 bitlik bilgi tamamlanmaktadır ve bu işi yine BASIC yapmaktadır. Faydası ile 8 adet yerine 4 adet Data bacağı kullanarak Pic’de bize 4 adet fazladan bacak bırakmasıdır ve bu yüzden kullanım açısından daima tercih edilmektedir.
LCD nin Pic ile birlikte kullanılması için bazı kurallar vardır. Bunların başında DEFINE komutu gelmektedir. Bu komut LCD nin hangi porta bağlı, Kaç data bacağı kullanıyor gibi bilgileri Pic’e vermekte kullanılır.
Kısa bir örnekle açıklayalım.
Vereceğimiz örnekte LCD tanımlama için kullanılması gereken tüm DEFINE komutlarını ve ne amaçla kullanıldıklarını göreceksiniz.
DEFINE LCD_DREG PORTB ‘LCD data bacakları hangi porta bağlı? Bu örnekte LCD Data bacaklarının PortB ye bağlı olduğu belirtiliyor.
DEFINE LCD_DBIT 4 ‘LCD data bacakları hangi bitten başlıyor? Bu örnekte Data bacaklarının PortB nin 4. bitinden itibaren başladığı belirtiliyor.
DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı Hangi Porta bağlı? Bu örnekte LCD Enable bacağının PortB ye bağlı olduğu belirtiliyor.
DEFINE LCD_EBIT 3 ‘LCD Enable Bacağı Hangi bite bağlı ? Bu örnekte LCD Enable bacağının PortB.3 (3.bit) e bağlı olduğu belirtiliyor.
DEFINE LCD_RWREG PORTB LCD RW Bacağı PortB de bağlı Bu örnekte LCD RW bacağının PortB de bağlı olduğu belirtiliyor.
DEFINE LCD_RWBIT 2 LCD RW Bacağı 2. bite bağlı Bu örnekte LCD RW bacağının 2 bite bağlı olduğu belirtiliyor.
Şayet LCD den geriye karakter okuması yapılmayacak ise RW bacağı daima GND ye bağlı durabilir. Bu durumda 1 bacaktan tasarruf edilebilir. İleride buna ait örnekler görülecektir. Burada komutun anlaşılması için biz bu bacağı da PortB ye bağlı kabul edeceğiz.
DEFINE LCD_RSREG PORTB ‘LCD RS Bacağı Hangi Porta bağlı ? Bu örnekte LCD RS bacağının B portuna bağlı olduğu belirtiliyor.
DEFINE LCD_RSBIT 1 ‘LCD RS bacağı Hangi Bite bağlı ? Bu örnekte LCD RS bacağının PortB.1 (1. bit) e bağlı olduğu belirtiliyor.
DEFINE LCD_BITS 4 ‘LCD 4 bit mi yoksa 8 bit olarak bağlı? Bu örnekte LCD nin PortB ye kaç data bacağı ile bağlandığını açıklıyor.
DEFINE LCD_LINES 2 ‘LCD Kaç sıra yazabiliyor Bu örnekte LCD nin Kaç sıra çalıştığı açıklanıyor.
Standart kullanımlarda buraya kadar olan DEFINE tanımlamaları yeterlidir. Ancak bazen yüksek frekanslı 10 MHz ve üzeri çalışma frekanslarında LCD ekranına yazılan karakterler hızdan dolayı izlenemez hale gelebilirler. Bunu önlemek için gerek komut verildikten sonra ve gerekse DATA verildikten sonra standart bir bekleme süresi tanımlanır ve karakterler izlenebilir hale gelir.
Bu komutlarda sırası ile
DEFINE LCD_COMMANDUS 1000 ‘1000 değer mikro saniye cinsinden gecikme süresi olup isteğe bağlı olarak artırılıp azaltılabilir. Komut sonrası gecikme süresini belirler.
‘DEFINE LCD_DATAUS 225 ‘Data bilgisinden sonraki gecikmeleri tanımlar.
Buraya kadar verdiğimiz örneklerle LCD nin Pic’e bağlantısını tanımlamış olduk. Program içinde LCD nin kullanımına ait bazı açıklamaları verdikten sonra örnek programımıza geçeceğiz.
LCD ye bir bilgi (emir) veya Data (karakter) göndermek için kullanılan komut; LCDOUT dır. Bu komut şayet LCDOUT $FE eklentisi ile birlikte kullanılır ise LCD ye bir komut gönderileceği anlamına gelir. Örneğin Ekranın silinmesi için LCDOUT $FE,1 komutunu verdiğimizde tüm ekrandaki bilgiler silinir. Program içinde sıklıkla kullandığımız bazı komutlar vardır. Bunlar, Yazma konumunu (imleç in yeri) ekranın en başına almak LCDOUT $FE,2 , Yazma konumunu (imleç in yerini) İkinci satır başına almak için LCDOUT $FE,$C0 gibi komutlar verilir. Ayrıca yazma konumunu ekranın herhangi bir yerine almak için ekran adresi kullanılır.
İlk satır birinci karakterin adresi $80, ikinci karakterin adresi $81, ve 7. karakterin adresi ise $86 dır. İkinci sırada bu adresler ilk karakter için $C0, ikinci için $C1 ve sırası ile $C2-$C3-$C4… şeklinde gitmektedir. Örnek olarak ilk sıra 7. karakterden itibaren “MERHABA” yazmak istersek şu komutu vermeliyiz.
LCDOUT $FE,$86,”MERHABA”
Öğrendiklerimizi artık bir programla kullanalım isterseniz.
Örnek Program 3a:
Ekranda ilk satırdan itibaren “BASIC DERSLERI” yazıp ikinci satıra ise “DERS No:3” ifadesini yazabileceğimiz programı gerçekleştirelim. Mikroişlemcimiz yine 16F84 olsun. LCD B portuna bağlı olacak ve 4 bit data bağlantısı olacaktır. Enable pini 3 nolu bit’e , R/ W pini 2 nolu bit’e ve RS pini ise 1 nolu bite bağlı olacaktır. İşte Programımız.
DEFINE LCD_DREG PORTB ‘LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT 4 ‘LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT 3 ‘LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTB ‘LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT 2 ‘LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTB ‘LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 1 ‘LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS 4 ‘LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 ‘LCD 2 sıra olarak çalışıyor.
TRISA=0 ‘A portu çıkış olarak ayarlandı.
TRISB=0 ‘B portu çıkış olarak ayarlandı.
LOW PORTB.2 ‘RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
PAUSE 200 ‘LCD nin kullanıma hazır hale gelebilmesi için gerekli süre
LCDOUT $FE,1 ‘Önce Ekranı siliyoruz.
LCDOUT “BASIC DERSLERI” ‘ilk sıra baştan itibaren yazdırıyoruz. Aslında bu komutu başka bir şekilde de yazabiliriz, şöyle
‘LCDOUT $FE,2,”BASIC DERSLERI”
LCDOUT $FE,$C0,”DERS No: 3” ‘ikinci satıra yazdırıldı.
End ‘Program sonu
Aynı programı RW bacağını direkt GND ye bağlıyarak da çalıştırabiliriz. Bu durumda ; LOW PortB.2 komutuna ihtiyaç yoktur.
Devre Şeması :
Ekran kullanımında en çok karşılaşılan şekillerden birisi sabit bir karakter dizisinden sonra bir değişkene bağlı olarak değer gösterme işi dir. Diyelim ki ortam sıcaklığını ölçüyorsunuz ve bunu ekranda gösteriyorsunuz.
Bu durumda ekranda “SICAKLIK : 23,3 oC” ibaresine benzer bir görüntü olacaktır. Genelde 23 değeri bir değişkende tutulur ve 0,3 değeri ise ayrı bir değişkende tutulur. Şimdi ISI=23 ve ONDA=3 olduğunu kabul ederek bunun ekranda gösterilme şeklini inceleyelim.
LCDOUT “SICAKLIK :” komutu ekrana SICAKLIK : ibaresini yazacaktır. Devamı için LCDOUT “ SICAKLIK : “,#ISI şeklinde bir ifade yazılır ise;
Ekrana çıkan şekli < SICAKLIK : 23 > olacaktır. Geriye ondalık kısmını yazdırmak kalıyor. Bunun için LCDOUT “SICAKLIK : “,#ISI,”,”,DEC1 ONDA ifadesini yazmamız gerekiyor.
#ISI komutundan sonra gelen virgül peşine ikinci bir komut geleceğini gösteriyor. Arkasında yer alan “,” ifadesi ekrana 23 rakamından sonra bir virgül koyacaktır. Peşinden gelen DEC1 ise sonraki gelen ifadenin Desimal bir sayı olduğunu ve 1 hanesinin yazılacağını gösterir. Daha sonraki ise zaten ONDA değişkeni olup
3 sayısını tutmaktadır. Sonuç olarak ekranda; SICAKLIK : 23,3 olarak görülür. Bu ifadelerin devamına derece işareti ve C karakterini ilave edince işlem tamam olacaktır. Ancak LCD karakterleri içinde derece işareti yoktur. Bunun nasıl oluşturulduğunu ileride göreceğiz. Şimdilik yalnızca C karakterini koymaya çalışalım. Komutun tamamı; LCDOUT “SICAKLIK : “,#ISI,”,”,DEC1 ONDA, “ C” şeklinde verilir.
Ekranda gösterilecek sayı formatlarını verdikten sonra ikinci örneğimize geçeceğiz. Sayılarımız Desimal , Hexadesimal ve Binary olarak gösteriliyorlardı. Bunları LCD de göstermek için aşağıdaki formatları kullanıyoruz.
Desimal Sayılar :
Sayıyı direkt olarak göstermek için başına # ilave edilir. #ISI gibi. Çok haneli sayılarda hane sayısını kısıtlamak için DEC komutu kullanılır. DEC1 tek hane, DEC2 iki hane DEC3 üç hane gösterir. Olmayan haneler yerine akrana sıfır çıkar. Örneğin ISI=23 ise ve biz ekrana DEC3 ISI yazmış isek ekrandaki görüntüsü 023 olarak izlenir.
HEX Sayılar.:
Değişken veya sayı başına HEX veya HEX1 veya HEX2 gibi ifadeler yazılır. Rakamlar gösterilecek hane sayısını ifade etmektedir.
Binary Sayılar:
Binary sayılar başların BIN (veya BIN1-BIN2 – BIN3..) ifadesi koyularak gösterilirler.
Proje 2b :
Bu örneğimizde değişkenlere bağlı sayıların ekranda gösterilmesi konusunu işleyeceğiz. PIC16F84 işlemci ve 2X16 LCD kullanarak Bazı sayı formatlarını ekranda izleyelim. Program önce bir SAYI değişkenini kullanacak ve sıfırdan başlayıp sayı değerini her seferinde bir artırarak oluşan yeni SAYI değerini üst satırda Desimal alt Satırda Binary olarak gösterecek. İkinci adımda ise Yine sıfırdan başlayarak bir SAYI değişkeni değeri 10’ar artırılacak ve elde edilen yeni değer üst satırda Desimal, alt satırda ise HEX olarak gösterilecektir. İzleyelim.
DEFINE LCD_DREG PORTB ‘LCD data bacakları PortB de bağlı DEFINE LCD_DBIT 4 ‘LCD data bacakları 4. bitten başlıyor DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı PortB de bağlı DEFINE LCD_EBIT 3 ‘LCD Enable Bacağı 3. bite bağlı DEFINE LCD_RWREG PORTB ‘LCD RW Bacağı PortB de bağlı DEFINE LCD_RWBIT 2 ‘LCD RW Bacağı 2. bite bağlı DEFINE LCD_RSREG PORTB ‘LCD RS Bacağı PortB de bağlı DEFINE LCD_RSBIT 1 ‘LCD RS bacağı 1. Bite bağlı DEFINE LCD_BITS 4 ‘LCD 4 bit olarak bağlı DEFINE LCD_LINES 2 ‘LCD 2 sıra olarak çalışıyor. TRISA=0 ‘A portu çıkış olarak ayarlandı. TRISB=0 ‘B portu çıkış olarak ayarlandı. SAYI VAR BYTE ‘Sayı değişkenini Byte olarak ayarladık . Maksimum 255 değeri LOW PORTB.2 ‘RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı. PAUSE 200 ‘ LCD nin kullanıma hazır hale gelebilmesi için gerekli süre LCDOUT $FE,1 ‘ Ekran silindi SAYI=0 ‘SAYI ilk değeri sıfır olarak verildi. ‘————-ANA PROGRAM BAŞLANGICI —————- BASLA: LCDOUT “ SAYI = “,#SAYI ‘ilk satıra Sayı Desimal olarak yazıldı LCDOUT $FE,$C0,” Binary = “,BIN SAYI ‘ikinci sıraya Binary olarak yazıldı. PAUSE 500 ‘500 ms bekliyoruz. SAYI=SAYI+1 ‘SAYI bir artırıldı. IF SAYI<100 THEN BASLA ‘SAYI mız 100 den küçük ise tekrar başla ‘bu satırda sayı=100 olacaktır . Burada sayı değişkenini tekrar sıfırlıyoruz. SAYI=0 ARA: LCDOUT “ SAYI = “,#SAYI ‘ilk satıra Sayı Desimal olarak yazıldı LCDOUT $FE,$C0,” Hex = “,HEX2 SAYI ‘ikinci sıraya Hex olarak yazıldı. PAUSE 500 SAYI=SAYI+10 ‘Sayı değeri 10 artırıldı IF SAYI<250 THEN ARA ‘sayı değeri 250 den küçük ise ARA’ ya git END ‘SAYI=250 olunca programı bitir.
Bu kadar LCD bilgisi yeterli olur sanırım. Birazda özel karakterlerin yaratılması işini inceleyelim. LCD lerde 8 adet yeni karakter yaratmamıza izin verilir. Karakterler 5 x 7 formatında oluşturulur ve 8 adet data halinde özel karakter hafızasına yerleştirilirler. Normalde LCD de Türkçe karakterlerin olmadığını biliyorsunuz. İşte bu karakterleri toplam 8 adet olmak şartı ile kendimiz oluşturup kullanabiliriz. Önce özel karakter hafıza adreslerini verelim sonra karakterlerin nasıl yaratıldığını açıklayalım.
LCD de 1 . karaktere ait adresin başlangıcı $40 dır. Bu adresten itibaren sırası ile 8 adet adrese 8 bitlik karakter dataları yerleştirilir ise bu karakterin numarası 0 (sıfır) olur ve datalara bağlı olarak yeni karakter ekranda gösterilir.
LCD de 2. karakter hafızası $48, üçüncü $50, dördüncü $58, beşinci $60, altıncı $68, yedinci $70 ve sonuncu da $78 adresinde yer almaktadır. Oluşturulacak karakterler soldan sağa 5 ve yukardan aşağıya 7 olmak üzere 5X7 matriks te oluşturulmaktadır. Son data (8.ci) daima sıfırdır.
Şimdi ilk Türkçe karakterimizi oluşturalım. Oluşturacağımız karakter Ö harfi olacaktır. Önce kendimize 5 x 7 ebadında bir matriks çizelim. Çizdiğimiz matriks içine ü harfini oluşturacak şekilde Kareleri kapatalım veya açalım. Sonuçta aşağıdaki sisteme göre dataların değerlerini satır satır hesaplayalım.
Görüldüğü gibi 1 olan bitlere karşılık gelen bit değerleri soldan sağa doğru toplanarak o sıraya ait data elde edilmektedir. İşte ilk sıradaki Binary değeri olan %10001 değeri nin Desimal karşılığı için 16 + 1 değerleri toplanarak 17 değeri bulunmaktadır.
İşte bu şekilde elde edilen datalar daha sonra programın başında bir yerde LCDye verilir. Nasıl mı şöyle; LCDOUT $FE,$40,0,17,0,17,17,17,31,0 Böylece sıfır nolu karakteri oluşturmuş oluyoruz. Data adedinin 8 adet olmasına dikkat ediniz. Son data daima sıfır olmalı.
Şimdi Derece işaretini oluşturalım
Hesapladığımız Data lar ise LCDOUT $FE,$40, 6,9,9,6,0,0,0,0 Şeklinde olacaktır.
Şimdi Derece işaretini 1. karakter olarak oluşturalım.
LCDOUT $FE,$48, 6, 9, 9, 6, 0, 0, 0, 0
Yeniden Karakter üretmeyi öğrendik. Şimdi bunların program içinde nasıl kullanıldıklarına bakalım.
Diyelim ki Sıcaklık göstergesi örneğimize geri dönelim ve ekrana; SICAKLIK : 23,3 oC şeklinde bir ifade yazmaya çalışalım. Derece işareti 1 nolu karakterimiz olduğunu varsayıyoruz.
Komut şöyle olacaktır;
LCDOUT “SICAKLIK : “,#ISI,”,”,DEC1 ONDA,” “,1,”C” ONDA isimli değişkeni verdikten sonra tırnak içinde 2 karakterlik boşluk bırakıyoruz. Daha sonra virgül koyup 1 yani 1. karakteri yazdırıyoruz. Sonra tekrar virgül koyup tırnak içinde C karakterini yazdırıyoruz. Buradan şu sonuç çıkmaktadır. Oluşturulan karakterler ekrana karakter numarası ile getirilirler.
İkinci örneğimiz 0 (sıfır) nolu karakterimizi ilk satır 5. haneye yazdıralım. LCDOUT $FE,$84,0 Buraya kadar LCD kullanımını her yönü ile öğrenmiş olduk. İleriki programlarımızda bol bol LCD kullanacağız ve bilgimizi geliştireceğiz.
Hazırlayan: Erol Tahir Erdal (ETE)
PICBasic Dersleri PIC Basic Pro ile PIC Programlama 3 Kod ve simülasyon dosyaları;
Şifre-Pass: 320volt.com
PICBasic Dersleri PIC Basic Pro ile PIC Programlama-4 Ders-4 Devam
Yayım tarihi: 2010/04/30 Etiketler: kılavuz ders, pic basic dersleri, PIC programlama, picbasic eğitim, picbasic pro
Elinize, emeğinize sağlık. Gerçekten kısa zamanda yol almayı sağlıyor dersleriniz. Fakat size sorum, özel karakterleri ekranda yazdıramadım.
Özel karakterlerin adresi olarak $00 – $F0 arasında olduğunu belirten bir tablo buldum. Örneğin $40 olan ilk özel biti yazdırmaya kalktığımda aşağıdaki linkteki tablodaki karakter çıkıyor. Bu sorunu nasıl aşabilirim? LCDOUT $FE,2,$00,0,0,0,0,4,17,31,0 şeklinde denediğimde ise ekran boş çıkıyor.
Şimdiden teşekkürler,
Bahsettiğim tablo:
Erol,
Ne yapmak istediğini anlayamadım doğrusu. Keniden has özel bir karektermi yazdırmak istiyorsun yoksa LCD nin karekter hafızasındaki (verdiğin tablo ona aittir) özel karekterlerden birisini mi yazdırmak istiyorsun acaba. Ben en iyisi her ikisinide anlatayıım sen seç istediğini.
LCD nin 8 ayrı özel karekter hafızası bulunmaktadır. Bu hafızalara kendi tasarladığı karekterleri yerleştirebilirsin. Tüm yapan gereken şey yukarıda anlatıldığı şekilde karekteri noktalar şeklinde oluştrmak ve data larını çıkartmak. Sonra bu dataları $40,$48,$50,$58,$60,$68,$70,$78 nolu adreslerden birisine yerleştirebilirsin. Yerleştirmek için yapman gereken tek şey
LCDOUT $FE,adres,data1,data2,data3,data4,data5,data6,data7,data8
şeklinde dataları vermekolacaktır. Yukarıda buna ait örneğide vermiştim. Sonra oluşturduğun karekteri yazdırmak için;
40 nolu adrese yerleşen karekter 0 (sıfır) ile,
48 nolu adrese yerleşen karekter 1 ile
…
78 nolu adrese yerleşen karekter ise 7 ile ekrana verilir.
Örnek vermek gerekirse 3 nolu karekteri yazdıralım; LCDOUT $FE,$C0,3 şeklinde kullanmanız yeterli olacaktır.
Gelelim LCD nin kendi karekterlerini yazdırmaya, LCDOUT $fe,$c0,karekter numarasını vermeniz yeterli olacaktır.
Tablodan bir örnek verelim, Satır başında E (1110) yazan satırda sağa doğru ok işareti görülüyor. Bu karekteri LCD de yazdırmak için
LCDOUT $FE,$C0,%11100111 veya LCDOUT $fe,$c0,231 yazmanız yeterli olacaktır. Dikkat ederseniz Satır başından %1110 değerini ve sütun başından da %0111 değerini alıp birleştirdim.
Kısaca harfin ASCI değerini verirseniz karekteri LCD ye yazdırırsınız.
Ete
Detaylı açıklamanız için teşekkür ederim. Kaçırdığım nokta, özel karakteri tanımladıktan sonra, yazdırmak için hangi karakterde tanımlamışsak onu yazmak “0,1,2,..” şekilnde.
hocam
özel karakterler aşağıdaki şekilde yazdırılıyor. Örneğin $40 no’lu yani 0. özel karatkerimiz
lcdout $FE, $80, 0
şeklinde yazdırılıyor.
sizin yazınızda 80 olması gereken ifade C0 olarak geçmiş oysa bildiğiniz gibi C0 ikinci satıra geç anlamı taşıyor
Kısacası
lcdout $FE, $C0, 0 değil lcdout $FE, $80, 0
ETE hocam elinize dilinize sağlık. elektroniği merak ediyordum. şimdi şimdi anlayabilmeye ve sevmeye başladım.
merhaba
site için teşekkürler.ilgililer için çok yararlı.
LCD de kursor`un bulunduğu adres nasıl okunur ? yani kursor un bulunduğu adres bilgisi nasıl bulunur. teşekkürler.
LCD de kursor konumunu ben kendim takip ederim. Konumu bilmem gereken programlarda konum değişkeni kullanırım. Dolayısıyla yerini sürekli bilirim daha doğrusu program bilir. Yoksa bildiğim kadarı ile kursor konumunu öğrencek yada verecek bir komut yok maalesef. LCD kontrolleri de buna elverişli değil. Zaten komut olmamasının sebebide muhtemelen LCD nin bu yapıya sahip olmamasıdır.
Ete
merhabalar.
hocam birşey rica etcektim nokia 3310 glcd kullanmak için include dosyalarını tanıtamadım mplab pbp kullanıyorum dosya yolunu belirtiyorum buluyor ancak include dosyası içinde hata veriyor lütfen yardım edin kafayı sıyıracağım kaç gündür yada siz en baştan anlatabilirmisiniz şimdiden teşekkürler hocam.
Hata include içinde ise ona yapacak bir şeyim yok maalesef.
Ya yeni bir include dosyası bulun yada dosyayı bir yere yükleyin içine bakalım.
Ete
include dosyasını c:pbp içindeki inc klasörüne atmam gerekiyor değilmi hocam?
İnclude dosyaları INC klasörnde değil BPB ana klasöründe yer almalıdır.
En çok kullanılanlardan birisi MODEDEFS.BAS dosyasıda orada yer almaktadır.
Ete
ete hocam pic basic ile grafik lcd sürmeye çalışıyorum belli bir yere kadar geldim fakat ekran için gerekli dataları bir liste oluşturup ordan alıyorum fakat liste çok büyük olduğu için belli bir yere kadar yazabiliyorum bunun için bir include dosyası oluşturup ordan okuya bilirmiyim.
teşekkür ederim
Include dosyası derleme anında ana programa dahil edilen program parçası anlamına gelmektedir. Dolayısıyla ha ana program içine yazmışsın ha ayrı bir program olarak include yapmışsın fark etmez. Tek dikkat edeceğin husus, etiket isimleri , değişken isimleri her iki programda farklı olmalıdır. Örnek olarak bir SAYI isimli değişkeni Include dosyasında kullanıp aynı ismi ana programda kullanmamalısın yoksa işler karışır.
Ben include etme işini pek kullanmadım desem yalan olmaz. Include işi aynı program parçasını farklı programlarda kullanıyorsan işe yarar. Böylece farklı programlarda aynı satırları yeniden yazmak zorunda kalmazsın. AMa yazacağın program tek ve o programa haz bir şeyse include etmenin bir avantajı yok bence.
Ete
teşekkür ederim hocam
Hocam merhaba,
Örnek program 3a’da devreyi çizip kodları yazmama rağmen “Logic contention(s) detected on net #00008” hatası veriyor. Nedir bu deyip baktım ve #00008’in LCD1-D7’ye karşılık geldiğini gördüm. Ancak hatayı hala çözemedim.Yardımcı olursanız sevinirim.
Logic Contention hatası bir pinin hem giriş hem çıkış olarak ayarlandığı durumlarda ortaya çıkmaktadır.
Genelde İsis RTC data pinine bu ikazı vermektedir. Aslında bri hata değil ikazdır. Önemsizdir. RTC lerin data bacakları yada aynı anda hem giriş hem çıkış çalışan diğer bacaklar bu şekilde değerlendiriliyor.
Ete
Teşekkür ederim, bir sorum daha olacak. Trimpodun orta bacağını VEE’ye bağlamamız gerekirken VDD’ye bağlandığını görüyorum. VEE’nin trimpoda VDD’nin +5V’a bağlanması gerekmiyor muydu? Ya da ben mi hatalı görüyorum?
Hocam yukarıda bahsettiğim gibi bağlantı yaptığım zaman de sistem çalışıyor. Aradaki farkı anlayamadım doğrusu. Örnek 3a’daki resimde VEE ve VDD çıkışlarını yer değiştirdiğim zaman sistem yine çalışıyor.
Saygılarımla.
öncelikle verdiğiniz bilgiler için teşekkürler. size bir sorum var ete hocam.
burdan öğrendiğim kadarıyla bi saat proğramı yazdım. sizin verdiğiniz saat proğramı vardı tmr0 kesmesiyle çalışan. ben ona röle bide tuş takımı ekleyip evde kullanıcam proğramı yazdım tuşlarıda ekledim yanlız ayar kısmında saat dakika arasındaki geçişlerde hangisinde olduğumu anlamak için bi yakıp söndürme yada belirleyecek bişey varmı acaba yada cursor felan mı koymak lazım hocam.şimdiden teşekkür ederim kolay gelsin.
Mic. Code. Studi icinde kursoru. Lcdout komutu uzerine getirin F1 tusuna basin. Boylece komtun aciklamasi ekrana gelecektir. Altta bir tablo goreceksin orada kuroru ac kapa komtlrini gorebilirsin. Ben yinede aciklayayim ne yapman gerektigini.
-once yaziyi yazacagin yere kursoru al. Kursor gorunmeyecek ama sen yazma yerini belirle. Mesela lcdout $fe,$c5
– sonra kursoru ac lcdout $fe,$0e (kafadan yaziyorum hatirladigim bu idi)
– 120 ms gecikme ver. Pause 120
– kursoru kapat. Lcdout $fe,$0c ve 100 ms gecikme ve pause 100
-simdi ne yazacak isen yaz.
Ete
Sağolun hocam kursör kullandım. Biraz gecikme yapıyo gibi geldi ama uygulamada sorun çıkaracakmı deneyince görücem.Size bir sorum daha var. “plc”de kullandığımız “sensörün ilk gördüğü an”ı burda picde nasıl yakalarız acaba bunun için bi komut varmı yada farklı bi mantık mı kullanmamız gerekiyor?
Bir sensör bilgisini mikroişlemci ile görmenin iki yolu vardır.
Birinci yolda bütün işini gücünü bırakır sürekli sensörü gözlemlersin. Bir çıkışveriyormu yada değişik bir şey veriyormu diye. Çünki görmek den neyi kast ettiğini tam olarak bilmiyorum. Genelde lojik olarak düşünürsek HIGH da bekleyen sensör çıkışının HIGH olması durumu yada tam tersini görme olarak kabul edebiliriz. Bu alternatifde işlemci başka işleri yapamayacaktır. Bu nedenle pek tercih edilenbir yöntem değildir. Zaman zaman program pek fazla iş yapmıyor ve sıklıkla sensör çıkışına bakabiliyor ise bu yöntem tercih edilebilir.
İkinci yöntemde ise KESME dediğimiz sistemi kullanarak bu işi yaparız. Kesme işlemcilerde son derece faydalı bir özelliktir. Sensör açısından ele alır isek, program normalde sensörle ilgilenmez. Yapacağı işlerle ilgilenir ama sensörde istenilen değişiklik olduğu anda sistem otomatik olarak Kesme etiketine atlar ve orada ne yapılması söylemiş ise onları yapar ve ayrıldığı yere geri döner. Bu ana programı meşgul etmeyen ideal bir sistemdir. Tamamen sizin programınızdan bağımsız geri planda çalışır ve kesme oluştuğunda işi gücü bırakıp kesme etiketine gider program.
Sizede böyle bir şey lazım bence.
Ete
ete hocam öncelikle merhaba. devrede neden potansiyometre kullandığımızı açıklayabilir misiniz? ben o kısmı pek anlamadım da. cevap için şimdiden teşekkürler.
Merhaba.
Bilgilerini paylasdığınız için teşekkür ederim.
Yukarıda lcd-nin 3. bacağının trimpotun orta bacağına bağlanması gerektiği yazılıyor, ama resimde VDD bacagı trimpotun orta bacağına birleşmiş durumda. Ben daha bu konularda yeni olduğum ve bir de türk olmadığım için belki de yalnış anlamışımdır.
İyi günler.
ete hocamızın verdiği tüm pic basic derslerini uygulamaya döküyor kart basıyor ve deniyorum. lcd konusunda ise kristalle uğraşmamak için 16f628a kullandım fakat ekran sadece ışıkları geliyor yazılar gelmiyor acaba nerede hata yapıyorum emeği geçen herkeze teşekkür ederim.
proje 2b demi hata alıyorsunuz
lcd ler genelde 16 pin’li oluyor. Çoğunda 1-16 pinler işaretli değil. Ben 3 günlük bir pic ci olarak epey uğraştım ve en stabil dizilimde
1-3-5-GND Birleştir
2 VDD 10K trimpotun orta ucundan (1-3 pinler VDD – VCC )
4-RS
6-E
11..14 : PIC
15-VDD backlite+
16-VCC backlite-
ne yapsanız çalışmıyorsa, ekranda dolu kutucuklar geliyorsa
1- MCLR pinine parmakla 1-2 dokunun pic uyanıyorsa MCLR bağlantısı boşta kalmıştır. (bunu tesadüfen ellerken öğrendim)
2- bağlantılarınız yanlıştır.
MCLR mevzusunu ilerleyen konu içinde yazacağım. beni çok uğraştırdı. Ama cevabı kendim buldum. Benim gibi acemilerin kabusu. Pic’i çakılanlar, donanlar, enerji kesilip gelince kalakalanlar bir sonraki derste acemi deneyimlerini paylaşacam…
1 no’lu bacağa (MCLR) dokun. Değişim varsa onu 100uF cap ve 1-5 k direnç ile Vdd ye bağla. Cap in diğer ucu GND ye… çalışacaktır
Selam;
Protusta 20×4 lcd kullanmaya çalışıyorum ama led ışıklarının olduğu 15. ve 16. pinleri bulamıyorum. Baskı devrede nasıl gösterebilirim. Yardımcı olan olursa sevinirim.
Şimdidenm teşekkürler.
çok saolun bu dersler çok faydalı oluyor ancak çok merak ettiğim bişey var bu konuda bir ip ucu verirmisiniz
DEFINE LCD_DREG PORTB ‘LCD data bacakları PortB de bağlı
DEFINE LCD_DBIT 4 ‘LCD data bacakları 4. bitten başlıyor
DEFINE LCD_EREG PORTB ‘LCD Enable Bacağı PortB de bağlı
DEFINE LCD_EBIT 3 ‘LCD Enable Bacağı 3. bite bağlı
DEFINE LCD_RWREG PORTB ‘LCD RW Bacağı PortB de bağlı
DEFINE LCD_RWBIT 2 ‘LCD RW Bacağı 2. bite bağlı
DEFINE LCD_RSREG PORTB ‘LCD RS Bacağı PortB de bağlı
DEFINE LCD_RSBIT 1 ‘LCD RS bacağı 1. Bite bağlı
DEFINE LCD_BITS 4 ‘LCD 4 bit olarak bağlı
DEFINE LCD_LINES 2 ‘LCD 2 sıra olarak çalışıyor.
yukarıdaki şekilde lcd bacak larını tanımlıyoruz
bu kadarı tamam
peki data bacaklarını tek tek tanımlayabilirmiyiz
örneğin D1 portb.4 gibi
Selam, ETE hocamız artık kendi sitesi üzerinden herkese yardımcı oluyor. Yeni dersleri takip edebilir sorularına cevap bulabilirsiniz.
http://etepic.com/