PIC 18 ile Rezistif Dokunmatik Panel Kullanımı – MikroC

This post is also available in: English Azerbaycan Türkcesi Русский


Dokunmatik Panel Kütüphanesi Kullanımı Genel

Dokunmatik Panel Sürücü Devresi

Pin Tanımlaması

Video Anlatım

  1. Fonksiyonlar
  2. Örnek Kodlar

DOKUNMATİK PANEL KÜTÜPHANESİ KULLANIMI

Bu bölümde kütüphanede bulunan fonksiyonlar tek tek açıklanacaktır. Anlaşılamayan noktaları ve hata bildirimlirini ” Soru-Cevap” forumuna yapabilirsiniz

Önemli Notlar:

  • Rezistif dokunmatik paneller direnç esasına göre çalışır
  • Bu kütüphane 4 tel çıkışlı rezistif dokunmatik panelleri kontrol etmek amacı ile C dili ile MikroC derleyicisinde yazılmıştır
  • Kontrol için PIC18 ailesi mikroişlemci seçilmiştir
  • Sürücü olarak MikroElektronika firmasının devresi kullanılmıştır.
  • Tavsiye olarak , her açılışta kalibrasyon yapılmak istenmiyorsa hesaplanan sapma
    payları “Eproma” kayıt edilebilir böylece her açılışta oradan değer okunur ve
    sürekli kalibrasyon yapılmasına gerek kalmaz
  • Dokunmatik kütüphane videosunda göreceğiniz “yazı yazma” ve “pixel “ fonksiyonları kendi yazmış olduğum kütüphaneye aittir. Bu sebeple standart mikroc kütüphanesi kullanıyorsanız o kütüphanenin fonksiyonlarını yazmalısınız ya da buradan indirerek benim kütüphanemi kullanabilirsiniz( MikroC GLCD EKRAN KÜTÜPHANESİ – (SAP1024B – T6963C))
  • ÖNEMLİ! – Analog Dijital çevrim ile ilgili olarak referans gerilimi besleme gerilimi olduğu için bu hatta yaşanacak parazitler hesaplamalara negatif olarak yansıyacaktır bu sebeple besleme devrenizi parazitlerden arındırmanız gereklidir ya da bu devreyikullanabilirsiz.(+5v -5v 3.3v SWITCH MOD REGULATOR)

 

DOKUNMATİK PANEL SÜRÜCÜ DEVRESİ

rezistif 4 tel dokunmatik panel devresi
rezistif panel sürme devresi
4 Pin FPC konnektör
4 Pin FPC konnektör
rezistif panel sürme devresi
rezistif panel sürme devresi

Devre İçin Gerekli Parçalar

  • 1 ADET – 4 Pin FPC konnektör ( dokunmatik panel çıkışı için) – mutlaka kullanılmalı jelatin uç lehim yapılmamalıdır
  • 2 ADET – 100 nf Polyester Kondansatör
  • 2 ADET – 47K Direnç
  • 8 ADET – 1K Direnç
  • 2 ADET – 10K Direnç
  • 3 ADET – BC546 Transistör
  • 2 ADET – BC556 Transistör

 

PIN TANIMLAMASININ YAPILMASI

Kütüphanedeki fonksiyonların Dokunmatik Panel  ile iletişim kurup onu kullanabilmesi için bir takım portların ayarlanması ve bağlantının buna göre yapılması gerekir. Pin bağlantıları ile ilgili aşağıdaki kodları inceleyebilirsiniz

Pin Tanımlama Kodları
//DOKUNMATİK PANEL PİNLERİ//////////
sbit surucu_a at RA5_bit; //surucu_a pini
sbit surucu_b at RB4_bit; //surucu_b pini
sbit analog_x at RA0_bit; //analog port ucu pini
sbit analog_y at RA1_bit; //analog port ucu pini

sbit surucu_a_Direction at TRISA5_bit; //surucu_a pini
sbit surucu_b_Direction at TRISB4_bit; //surucu_b pini
sbit analog_x_Direction at TRISA0_bit; //analog port ucu pini
sbit analog_y_Direction at TRISA1_bit; //analog port ucu pini

Yukarıda bulunan surucu_a , surucu_b , analog_x ve analog_y  uçları devre şemasında belirtilmiştir.

 

1-)FONKSİYONLAR

1A-)   D_PANEL_INIT   Fonksiyonu

Amacı :

Inıt fonksiyonu, kullandığımız dokunmatik panelin yazılım tarafından analiz edilmesini sağlar bu sebeple burada kullanılan panelin genişliği,yüksekliği belirtilir

Ayrıca dokunmatik panel için PIC in hangi analog kanalından okuma yapılacaksa onlarda belirtilir.

Ana Fonksiyondur mutlaka en başta çağırılmalıdır

Kullanımı:

D_PANEL_INIT(unsigned int Genislik , unsigned int Yukseklik ,unsigned char x_analog_kanali,unsigned char y_analog_kanali) – şeklindedir

-Genislik: Kullanılan panelin pixel olarak genişliğini ifade eder

-Yükseklik : Kullanılan panelin pixel olarak yüksekliğini ifade eer

-x_analog_kanali : PIC in hangi analog kanalı kullanılacaksa (ÖR: AN1 ise 1 yazılır) yazılır

-y_analog_kanali : PIC in hangi analog kanalı kullanılacksa (ÖR: AN0 ise 0yazılır) yazılır

Örnek:
D_PANEL_INIT(240,128,0,1) – Yukarıda pin tanımlamasına bakıldığında X in analog kanalı AN0 ve Y nin analog kanalı AN1 olduğu görülür

 

1B-)   D_PANEL_X_OKUMA  ve   D_PANEL_Y_OKUMA   Fonksiyonları

Amacı:

X ve Y düzleminde okuma yapar ancak büyük bir fark olarak direk kordinatları okumaz dokunulan noktada dokunmatik panelden ölçülen ham analog (işlem
görmemiş) değerleri okur
Dokunulan alanın değerlerini “float “değerinde geri döndürür.

Kullanımı:

D_PANEL_X_OKUMA( ) – şeklindedir parametre almaz

D_PANEL_Y_OKUMA( ) – şeklindedir parametre almaz

 

1C-)   D_PANEL_DOKUNULDU_MU   Fonksiyonu

Amacı:

Panele dokunulup dokunulmadığını sorgular, dokunulmuşsa 1 ,dokunulmamışsa 0 değerini geri döndürür

Kullanımı:

D_PANEL_DOKUNULDU_MU(unsigned int hassasiyet) – şeklindedir

-hassasiyet : “hassasiyet” parametresi okunması istenen tavan değeri belirtir örneğin; “hassasiyet =10 ” ise 10 degerinin üstüne çıkılırsa dokunulmuş sayar böylece dokunma hassasiyeti ayarlanabilir

Örnek:

Eğer panele dokunulduysa işlemleri gerçekleştir

if(D_PANEL_DOKUNULDU_MU(50)==1)//hassasiyet 50 ayarlandı değer 50 yi aşarsa 1 değer geri dönecektir
  {
    işlem
  }

 

1D-)   D_PANEL_KALIBRASYON_NOKTA_1-2-3-4   Fonksiyonları

Amacı:

Dokunmatik paneli kalibre eder.

Kalibrasyon için gerekli dört noktadan değer toplar. Her fonksiyon başarılı olarak sona erdiğinde 1 değeri geri döndürür. Bu değer kalibrasyon hesaplamalarında

kullanılacak ham değerlerdir

Kullanımı:

D_PANEL_KALIBRASYON_NOKTA_1( ) – şeklinde kullanılır parametre almaz

D_PANEL_KALIBRASYON_NOKTA_2( ) – şeklinde kullanılır parametre almaz

D_PANEL_KALIBRASYON_NOKTA_3( ) – şeklinde kullanılır parametre almaz

D_PANEL_KALIBRASYON_NOKTA_4( ) – şeklinde kullanılır parametre almaz

Örnek:

en ideal kalibrasyon ölçüleri

NOT: Bu fonksiyonlar aşağıdaki gibi bir harici fonksiyon içinde kullanılmalıdır. Çünkü kullanıcıya dokunması gereken noktalar oluşturulmalıdır. Bu noktalar oluşturulurken hangi ekran kütüphanes kullanılıyorsa onun fonskiyonları ile noktalar oluşturulmalıdır.

Fonksiyon main in üstünde tanımlanmalıdır.

void kalbire_et()//herhangi bir isim verilebilir kalibrasyon zamanı bu isim ile çağırılacak
{
do{
SAP1024_YAZI_YAZMA(1,8,"1.Noktaya Dokunun");//SAP1024B GLCD kutuphanesi ile oluşturulmuş yazı
SAP1024_PIXEL((GENISLIK_D*20)/100,(YUKSEKLIK_D*80)/100,1);//SAP1024B GLCD kütüphanesi ile dokunulması istenen piksel aktifleştiriliyor
}while(D_PANEL_KALIBRASYON_NOKTA_1()!=1);//dokunulan noktanın verisi alınıyor
sap1024_lcd_temizle();

do{
SAP1024_YAZI_YAZMA(1,8,"2.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*20)/100,(YUKSEKLIK_D*20)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_2()!=1);
sap1024_lcd_temizle();

do{
SAP1024_YAZI_YAZMA(1,8,"3.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*80)/100,(YUKSEKLIK_D*20)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_3()!=1);
sap1024_lcd_temizle();

do{
SAP1024_YAZI_YAZMA(1,8,"4.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*80)/100,(YUKSEKLIK_D*80)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_4()!=1);
sap1024_lcd_temizle();
}

 

1E-)   D_PANEL_KALIBRASYON_HESAPLAMA   Fonksiyonu

Amacı:

Kalibrasyon değerlerinin elle girilip herseferinde kalibrasyon işleminin yapılmaması için kullanılır

Kullanımı:

D_PANEL_KALIBRASYON_HESAPLAMA( ) – şeklinde kullanılır herhangi bir parametre almaz

NOT: Kalibrasyon otomatik olarak yapıldı ise çağırılmasına gerek yoktur. Her seferinde kalibrasyon işlemine vakit ayrılmak istenmiyorsa aşağıda belirtilen global değişkenlerin değerleri okunur not alınır yada harici bir belleğe yazılarak buradan geri çağırılırsa tekrar kalibrasyon hesabı yapılmasına gerek kalmaz.

sapma_a
sapma_b
sapma_c
sapma_d

Bu değişkenler global olarak tanımlanmışlardır ve “float” tipindedirler.

 

1F-)   D_PANEL_KONUM_X   ve    D_PANEL_KONUM_Y   Fonksiyonları

Amacı:

Dokunulan noktanın GLCD deki tam olarak kordinatını verir. Örnek olarak 240×128 bir ekranda sol üst köşeye dokunulunca x=0 y=0 değerini verirken sağ alt köşeye dokununca x=240 y=120 değerini veri

Kullanımı:

NOT: İki fonksiyon ham analog değerlerin işlenmiş halini bize verir. Küsüratların gözükmemesi için “int” olarak değer döndürür.

D_PANEL_KONUM_X( )
D_PANEL_KONUM_Y( )

 

1G-)   D_PANEL_KORDINAT_KONTROL   Fonksiyonu

Amacı:

Kolaylaştırıc fonksiyon olarak tasarlandı. Amacı lcd de oluşturulacak bir butonun kordinatlarının kolayca belirlenmesidir.

Örnek olarak başlangıç pozisyonu (10,10) olan ve boyutu 30×30 px olan (genişlik x yükseklik) resmimizin değerlerini parametrelere giriyoruz. Bu bilgilere göre

fonksiyon sınırları tespit eder . Sınırların içerisinde bir noktaya dokulursa 1 değeri gönderir dokunulmuyorsa 0 degeri gönderilir . Bu şekilde eklediğimiz bir

butonu bilgilerini ve konumunu girerek rahatça kullanabiliriz.

Kullanımı:

D_PANEL_KORDINAT_KONTROL(unsigned char simge_x,unsigned char simge_y,unsigned char simge_genislik_px,unsigned char simge_yukseklik_px) -şeklindedir.
-simge_x: ekranda görütlenecek simgenin sol üst başlangıç noktası x değeri

-simge_y: ekranda görütlenecek simgenin sol üst başlangıç noktası ydeğeri

-simge_genislik_px: ekranda görüntülenecek simgenin genisliği piksel olarak

-simge_yukseklik_px: ekranda görüntülenecek simgenin yüksekliği piksel olara

Örnek:

/*x,y(100,100) konumundan başlayarak 10px X 10px boyutunda bir bölge belirlenmiştir.
Bu bölgeye dokunulduğu anda koşul işler ve içeriğindeki işlemleri gerçekleştirir*/
if(D_PANEL_KORDINAT_KONTROL(100,100,10,10)==1)
{
   işlemler
}

 

2-)ÖRNEK KODLAR

2A-)   Basit dokunmatik tahta yapımı

Dokunmatik Tahta Kodları
while(1)
{
x1=D_PANEL_KONUM_X();//dokunulan noktanın x konumunu verir
y1=D_PANEL_KONUM_Y();//dokunulan noktanın y konumunu verir

if(D_PANEL_DOKUNULDU_MU(50)==0)//panele dokunuldumu?
{
SAP1024_PIXEL(x1,y1,0);
}

SAP1024_PIXEL(x1,y1,1);
delay_ms(5);
}

 

2B-)   Buton Örneği

Buton Örneği ve Konum Yazdırma Kodları
while(1)
{
if(D_PANEL_KORDINAT_KONTROL(100,100,10,10)==1)
{
SAP1024_YAZI_YAZMA(5,14,"resme bastin");
delay_ms(500);
SAP1024_LCD_TEXT_TEMIZLE();
}

inttoSTR(D_PANEL_KONUM_X(),yazi);
SAP1024_YAZI_YAZMA(5,8,yazi);

inttoSTR(D_PANEL_KONUM_Y(),yazi);
SAP1024_YAZI_YAZMA(5,10,yazi);
}

2C-) Tam Program

Tüm Program Kodları
char SAPTRIS at trisd;//data portları
char SAPDATA_giris at portd;
char SAPDATA_cikis at latd;
sbit SAP1024_RD at RC1_bit ; //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE at rc2_bit ; //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD at Rc3_bit ; //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST at Rc4_bit ; //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS at Rc5_bit ; //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR at RC0_bit ; //GLCD wr UCU BAĞLANTI PİNİ
sbit SAP1024_RD_Direction at TRISC1_bit; //GLCD RD UCU BAĞLANTI PİNİ
sbit SAP1024_CE_Direction at TRISC2_bit; //GLCD CE UCU BAĞLANTI PİNİ
sbit SAP1024_CD_Direction at TRISC3_bit; //GLCD C/D UCU BAĞLANTI PİNİ
sbit SAP1024_RST_Direction at TRISC4_bit; //GLCD RST UCU BAĞLANTI PİNİ
sbit SAP1024_FS_Direction at TRISC5_bit; //GLCD FS UCU BAĞLANTI PİNİ
sbit SAP1024_WR_Direction at TRISC0_bit; //GLCD FS UCU BAĞLANTI PİNİ

//DOKUNMATİK PANEL PİNLERİ//////////
sbit surucu_a at RA5_bit; //dokunmatik panel surucu_a pini
sbit surucu_b at RB4_bit; //dokunmatik panel surucu_b pini
sbit analog_x at RA0_bit; //dokunmatik panel analog port ucu pini
sbit analog_y at RA1_bit; //dokunmatik panel analog port ucu pini

sbit surucu_a_Direction at TRISA5_bit; // surucu_a pini
sbit surucu_b_Direction at TRISB4_bit; // surucu_b pini
sbit analog_x_Direction at TRISA0_bit; //analog port ucu pini
sbit analog_y_Direction at TRISA1_bit; //analog port ucu pini

void kalbire_et()
{
do
{
SAP1024_YAZI_YAZMA(1,8,"1.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*20)/100,(YUKSEKLIK_D*80)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_1()!=1);
sap1024_lcd_temizle();

do
{
SAP1024_YAZI_YAZMA(1,8,"2.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*20)/100,(YUKSEKLIK_D*20)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_2()!=1);
sap1024_lcd_temizle();

do
{
SAP1024_YAZI_YAZMA(1,8,"3.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*80)/100,(YUKSEKLIK_D*20)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_3()!=1);
sap1024_lcd_temizle();

do
{
SAP1024_YAZI_YAZMA(1,8,"4.Noktaya Dokunun");
SAP1024_PIXEL((GENISLIK_D*80)/100,(YUKSEKLIK_D*80)/100,1);
}while(D_PANEL_KALIBRASYON_NOKTA_4()!=1);
sap1024_lcd_temizle();
}
void main()
{
char yazi[8];
int x1,y1;

//GENEL PORT AYARLARI
ADCON0=0x09;
ADCON1&=0xF0;
cmcon|=7;
//------------------

SAP1024_INIT(240,128,8);
ADC_Init();
D_PANEL_INIT(240,128,0,1);
kalbire_et();
SAP1024_DORTGEN(100,100,110,110,1,1);
while(1)
{
x1=D_PANEL_KONUM_X();
y1=D_PANEL_KONUM_Y();

if(D_PANEL_DOKUNULDU_MU(50)==0)
{
SAP1024_PIXEL(x1,y1,0);
}
SAP1024_PIXEL(x1,y1,1);
delay_ms(5);

if(D_PANEL_KORDINAT_KONTROL(100,100,10,10)==1)
{
SAP1024_YAZI_YAZMA(5,14,"resme bastin");
delay_ms(500);
SAP1024_LCD_TEXT_TEMIZLE();
}

inttoSTR(D_PANEL_KONUM_X(),yazi);
SAP1024_YAZI_YAZMA(5,8,yazi);

inttoSTR(D_PANEL_KONUM_Y(),yazi);
SAP1024_YAZI_YAZMA(5,10,yazi);
}
}

“DOKUNMATİK PANEL KÜTÜPHANESİ KULLANIMI” VİDEO DERS


Gerekli Dosyalar


Dokümanlar

 

ERCAN KOÇLAR Hakkında

Çalışmalarım çocukken başladı kolonyalı kağıtları yakmak, ilaçları birbirine katmak gibi değişik deneylerim vardı. Kimya kitabında elektroliz ile suyun hidrojen ve oksijene ayrıldığı ve hidrojenin yandığını yazıyordu, o zamanlarda aklım almıyordu sudan nasıl yanan....Devamını okumak için tıklayınız ;)

One thought on “PIC 18 ile Rezistif Dokunmatik Panel Kullanımı – MikroC

Comments are closed.