Elektronik / Mikrodenetleyici Projeleri/

PIC ile dokunmatik panel grafik lcd kullanımı mikro c

Sponsorlu Bağlantılar

Dokunmatik özellikli grafik lcd uygulaması için iyi bir örnek picroje forumunda paylaşımı yapan “”f_machine”” adlı üyeye teşekkürler

PIC ile DOKUNMATİK PANEL KONTROLÜ (Pic 18F4620)

dokunmatik-panel-128x64-grafik-lcd
Resim 1-Dokunmatik Panel ve 128*64 Grafik LCD

Bu yazıda,4 kablolu rezistif dokunmatik panel incelenecektir. Dokunmatik panel, dokunduğumuz noktaya uygun olarak bize analog çıkışlar üretir. Dokunmatik panelin alt ve üst tarafında iki film bulunur. (Şekil 1) Panele dokunduğumuzda, bu iki film birbirine temas eder.İki film arasında akım akışı olur. X koordinatını elde etmek için üst taraftaki film, Y koordinatını elde etmek için ise alt taraftaki film enerjilendirilir.Diğerinden adc ile değer okunur. Dokunduğumuz konumu tespit etmek için 2 adım izlenir.

1. Y uçlarından birine +5v,diğerine 0v verilir.X uçlarından biri yüksek empedans(hi-z) yapılır. X in diğer bacağından adc ile analog değer okunur.Okunan değer Y koordinatıdır.

2. X uçlarından birine +5v,diğerine 0v verilir.Y uçlarından biri yüksek empedans(hi-z) yapılır. Y nin diğer bacağından adc ile analog değer okunur.Okunan değer X koordinatıdır.

dokunmatik-panel-glcd-alt-ust-filmler
Şekil 1- Dokunmatik Panel Alt ve Üst Filmler

Ancak dokunmatik panel,biz panele dokunmasak dahi,bir çıkış üretir. Bu da yanlış ölçümlere sebep olur.Bunu engellemek için ise,ölçümden önce; X uçlarından birine +5v verilir,diğeri analog giriş yapılır..Y uçlarından biri yüksek empedans(hi-z) yapılır.Y nin diğer bacağından adc ile analog değer okunur.

Okunan değerVcc ye yakın bir değerse, panele dokunulmuş demektir.Daha sonra yukarıdaki 1. ve 2. adımlar takip edilerek X ve Y koordinatları belirlenir. Panelin, basılan örnek beş noktası (Şekil 2) ve bunlara verdiği X çıkışları(Şekil 3) aşağıda gösterilmiştir.

xelectrode-glcd-panel-cilis
Şekil 2- Örnek Beş Nokta

dokunmatik-panel-bitlik-adc-sonuclari
Şekil 3- 10 Bitlik Adc Sonuçları

Ayrıca,paneli kontrol etmek için bir sürücü devre kullanmak gerekir.(Şekil 4) Sürücü devredeki AN0 ve AN1 bacakları pic’in RA0 ve RA1 analog girişlerine bağlanır. Diğer 2 pin PORTA nın 2. ve 5. pinlerine bağlanır.

dokunmatik-panel-128x64-grafik-lcd-surucu-devre
Şekil 4- Sürücü Devre (transistörler BC556AP)

Şimdi konuyu daha iyi anlamak için bir örnek uygulama yapılacaktır. Program MikroC ile yazılmıştır.

//dokunmatik_deneme.c
//yazar: Serdar Güney
//pamukkale üniversitesi elektrik-elektronik mühendisliği
//Program dokunmatik panelin ürettiği analog çıkışı glcd de gösterir..
//29.04.2009

unsigned int x_koordinat(void );
unsigned int y_koordinat(void );
unsigned char basma_kontrol(void );
unsigned int adc_deger;
unsigned char ch;
long gerilim;
void main () {
ADCON1=0x0D; 			//RA0,RA1 ANALOG, GERİSİ DİJİTAL
PORTA = 0x00;
TRISA = 0x03; 			// PORTA.0 ve PORTA.1 giriş
PORTA=0x00;

Delay_Ms(100);

Glcd_Init(&PORTB,1,0,2,3,4,5, &PORTD); 	//glcd pinleri ayarla
Glcd_Set_Font(FontSystem5x8, 5, 8, 32);
Glcd_Fill(0x00); 						//glcd temizle
Glcd_Write_Text("X= ",10,3,1);
Glcd_Write_Text("Y= ",10,5,1);
for (;;) {

while (!basma_kontrol()); 				//panele dokunuldu mu?
gerilim = (long)x_koordinat() * 5000; 	// okunan değeri mv a dönüştür
gerilim = gerilim / 1023;				 // 0..1023 -> 0-5000mV
ch = gerilim / 1000; 					// voltu elde et
Glcd_Write_Char(48+ch,42,3,1); 			// voltu yazdır
Glcd_Write_Char('.',50,3,1);
ch = (gerilim / 100) % 10; 				// 0.1 volt değerlerini elde et
Glcd_Write_Char(48+ch,58,3,1);
ch = (gerilim / 10) % 10; 				// 0.01 volt değerlerini elde et
Glcd_Write_Char(48+ch,66,3,1);
ch = gerilim % 10; 						// 0.001 volt değerlerini elde et
Glcd_Write_Char(48+ch,74,3,1);
Glcd_Write_Char('V',82,3,1);

					//y koordinatı için aynı işlemleri tekrarla

gerilim = (long)y_koordinat() * 5000;
gerilim = gerilim / 1023;
ch = gerilim / 1000;
Glcd_Write_Char(48+ch,42,5,1);
Glcd_Write_Char('.',50,5,1);
ch = (gerilim / 100) % 10;
Glcd_Write_Char(48+ch,58,5,1);
ch = (gerilim / 10) % 10;
Glcd_Write_Char(48+ch,66,5,1);
ch = gerilim % 10;
Glcd_Write_Char(48+ch,74,5,1);
Glcd_Write_Char('V',82,5,1);

Delay_Ms(5);
}
}
unsigned int x_koordinat() {
unsigned int sonuc;
TRISA.F0=0; 				// porta 0. bit çıkış
PORTA=0; 					//porta yı temizle
PORTA.F2=1; 				// Y+ yüksek empedans
PORTA.F5 = 0; 				// X+ +5v
Delay_Ms(5);
sonuc=adc_read(1); 			// X koordinatını al
TRISA.F0=1; 				//porta 0.bit analog giriş
return sonuc;
}

unsigned int y_koordinat() {
unsigned int sonuc;
TRISA.F1=0; 				//porta 1.bit çıkış
PORTA=0; 					//porta yı temizle
PORTA.F2 = 0; 				// Y+ +5v
PORTA.F5 = 1; 				// X+ yüksek empedans
Delay_Ms(5);
sonuc = adc_read(0); 		// Y koordinatını al
TRISA.F1=1;
return sonuc;
}
unsigned char basma_kontrol(void ) {
unsigned int ADC_ESIK_DEGER=800;		 //esik deger (5V/1024)*(800)=3.9v

unsigned char sonuc;
TRISA.F1=1; // RA0 analog giriş
TRISA.F0=1; //RA1 analog giriş
PORTA=0; //portayı temizle
PORTA.F2=0; // Y+ +5v
PORTA.F5=1; //X+ yüksek empedans
adc_deger=adc_read(0); // y koordinatını al
sonuc = (adc_deger > ADC_ESIK_DEGER); 			// okunan değer eşik değerden büyükse sonuc=1
Delay_Ms(2);
adc_deger = adc_read(0); 					// hata olasılığı için işlemi tekrarla
sonuc = sonuc & (adc_deger > ADC_ESIK_DEGER);
return sonuc; 							//basıldıysa 1,basılmadıysa 0 olur
}

Uygulamaya Ait Fotoğraflar

dokunmatik-panel-128x64-grafik-lcd-uygulama1 dokunmatik-panel-128x64-grafik-lcd-uygulama2

  • Ö.Değer ÖZSU

    Eski KORG i30 marka/model orgumun dokunmatik ekranına yağmurla beraber su dolmuştu bir açıkhava konserinde.Ekranı bozduktan sonra nasıl onarabileceğimi anladım.Yenisine de 400 mark para saymıştım o dönem.Değiştirdim hallettim.Yazıyı görünce aklıma o geldi hemen.

    gevv eline sağlık bu güzel paylaşım için.Teşekkürler

  • ahmet

    slm f_machine…
    öncelikle ellerine sağlık süper bir proje
    paylaşım için teşekkurler…
    bende tam böyle birşeyle ilgileniyordum.
    ben menulu bır proje yapacagım bu dokunmatık pad bacakları ile ilgili bilgi verirmisin acaba…
    ve örnegin bizim beslememiz 5v tun bıraz altına dustugu zaman menulu bır devre yaptıgımızda bastıgımız noktayı gerılım değişimlerine ragmen
    yanlıs olarak okumadan nasıl yaparız bunu nasıl onlerız?
    tekrar ellerıne sağlık kolay gelsın

  • ahmet

    ok ok dokunmatık pad bacaklarını buldummm…. ;) ;) :)

  • Kaan

    Peki bunu lcd ekran olarak kullanabilirmiyiz?MEsela bi projede lcd ekran kullanılmış.Onu söküp,bu ekranı taksak.Dokunmatik bağlantılarınıda yapsak çalışırmı?

  • evliya songül

    Ellerin dert görmesin çok güzel bir projeye imza atmışsın renkli dokunmatik ekranlara bilgi yazdırma konusunda makalen varsa ve bizimle paylaşırsan çok seviniriz şimdiden teşekkürler.

  • Bahadır

    Arkadaşlar bu ürünleri satın alırken çok dikkatli olun 128×64 lcd nin ekranıyla, 128×64 dokunmatik panelin yüz ölçümleri birbirine uymuyor bazen

  • alper

    sayın gevv öncelikle paylaşımınız için teşekkür ederim.. bu konu ile ilgili bitirme tezim var da touchpanel kontrollü menü tasarımı ile uğraşıyorum… programınızdan anladığım : x koordinat ve y koordinat fonksiyonları, bildiğimiz gibi ÖR:(3,5) (45,20) gibi koordinat değerleri üretiyor değil mi? anladığım kadarıyla basma kontrolunden sonra bi if koyup if( (x>3)&(x5)&(y<20) ) ise yani ekranda bu bölgeye dokunursam şunları yapsın diyebilirmiyim direk?? bilgisi olan diğer arkadaşlardan da yardım bekliyorum. şimdiden teşekkürler… saygılar…

    (240×128 glcd ve buna uyumlu touch panelim var)

    • murat

      merhaba sorduğun sorunun cevabını bende mmerak ediyorum şimdiye kadar bulmuşsundur muhtemelen ayrıca tezini bitirdiysen paylaşırsan sevinirim

  • ilker

    Arkadaşlar burada kullandığınız dokunmatik paneli nereden aldınız? Karaköyde bir gün aradım bulamadım…

  • bulent

    merhaba konu ve anlatım için teşekkür ederim oldukça faydalı
    4 uçlu touchcreen var elimde uçalarını nasıl bulucam + ve – yi yanlış bağlarsam bozulurmu

    proton plus kullanıyorum volt ölçer gibi mi yoksa mvolt olarak pil ölçer gibi mi ölçmem gerekiyor.
    yani 128*64 ise 5/128 gibi mi somuç alıcam yardımcı olurmusunuz
    saygılar

  • CodeRun

    Paylaşım için teşekkurler.

  • ruzgar_2626

    Hocam gerçekten başarılı bir iş bende bu aleme yeni geldim ama pek bi bilgim yok bana önerebileceğin kaynak varsa çok sevinirim diğer arkdaşların yardımınıda beklerim tekrardan başarılar