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)
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.
Ş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.
Şekil 2- Örnek Beş Nokta
Ş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.
Ş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
Yayım tarihi: 2009/06/13 Etiketler: dokunmatik panel kontrol, microchip pic projeleri, mikro c glcd uygulama, mikro c grafik lcd, pic dokunmatik lcd
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
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
ok ok dokunmatık pad bacaklarını buldummm…. 😉 😉 🙂
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ı?
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.
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
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)
merhaba sorduğun sorunun cevabını bende mmerak ediyorum şimdiye kadar bulmuşsundur muhtemelen ayrıca tezini bitirdiysen paylaşırsan sevinirim
Arkadaşlar burada kullandığınız dokunmatik paneli nereden aldınız? Karaköyde bir gün aradım bulamadım…
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
Paylaşım için teşekkurler.
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