Arkadaşlar benim projem dokunmatik ekran aracılığıyla çizdiğim birşeyi okuyarak rs232 ile bilgisayara atmam gerekiyor. bu glcd üzerindeki datayı okuyup atma işlemini çözemedim yardımcı olabilir misiniz??
Konu başlığını yanlış vermişsin. "Touchpad Kullanımı" veya "Dokunmatik Ekrandan Veri Okumak" gibi birşey olmalıydı. Bu şekilde değiştirirsen yardım alman kolaylaşır.
Mesela ben KS0108 sürücülü bir 128x64 GLCD'nin hafızasından nasıl veri okunacağını biliyorum ve senin "128x64 glcd veri okumak" başlığını görünce belki yardımcı olabilirim diye atladım hemen. Ancak malesef dokunmatik ekranlar hakkında hiçbir fikrim yok.
dokunmatikten aldıgın analog veriyi 10 defa değişkene ekle sonra bunların ortalamasını al
aldığın ortalamayla elde eetigin verileri pc ye aktar
yazdıgın pc programıda bu noktalarla dot matris dizilimi tamamlasın
yani cizdigin veriyi glcd den degil üzerindkei touch screen denen folyodan analog ollarak okuyup digitale cevirip (mcu ile) öyle bilgisyara aktaracaksin
ayrica microchipin hazir entegreleri mevcut arastirmani tavsiye ederim
https://320volt.com/pic-ile-dokunmatik-panel-grafik-lcd-kullanimi-mikro-c/ (https://320volt.com/pic-ile-dokunmatik-panel-grafik-lcd-kullanimi-mikro-c/)
Burada rezistif dokunmatik panellerle ilgili yazmış olduğum bi yazı var.
genelde touch pad okumak için r c şarj devresi kullanılıyor önce iki eksenin kondansatörleri bir transiatör yardımıyla boşaltılıyor daha sonra dolma zamanı sayılıyor
Tagli arkadaşım banada zaten GLCD deki lazım ks108 den nasıl okuma yapabilirim?? bana o lazım zaten. f_machine bende ordan yardım aldım zaten ama ekrana dokunduğum noktayı çizdirtmek istiyorum kalibra de edemedim o konuda bana yardımcı olabilir misin??
Yazdığın iki şey birbirinden farklı. Bu başlıkta iki farklı okuma şekli, daha doğrusu kaynağı anılıyor:
Bunlardan birincisi KS0108'in hafızasındaki veri. Bu veri zaten ekrana yazı yazılırken KS0108'in içindeki hafıza alanına işlemci tarafından yükleniyor. Ancak bazı durumlarda veriyi bu hafızadan geri okumak gerekebiliyor. Aklıma gelen en basit örneği, ekrandaki resmin veya gösterilen her neyse onun tersini almak. Yani yanan pikselleri söndürüp sönenleri yakmak. Benim nasıl yapılacağını bildiğim okuma şekli bu.
İkincisi ise GLCD'nin üstüne iliştirilmiş touchpad denen ve yanlış bilmiyorsam 4 adet kablosu olan ince katmandan, üzerine dokunulduğu zaman neresine dokunulduğunu anlamak için gerekli okumayı yapmak. Bu işlemin KS0108 entegresi ve onun veri hafızası ile hiçbir ilgisi yok. İlk mesajından anladığım kadarıyla sen nereye dokunulduğunu anlamak istiyorsun. Bu durumda KS0108'in hafızasından veri okumana gerek de yok. Mesele şu ki benim dokunmatik yüzeyden veri okunması hakkında bir bilgim yok, ama zaten arkadaşlar kaynak göstermişler.
Burada mikroe nin örnek kodu var önce ekranı kalibre ediyor.Sonrada dokunulan noktaları ekrana çiziyor.
/*
* Project name:
TouchPanel (Demo for working with TouchPanel Controller)
* Copyright:
(c) Mikroelektronika, 2009.
* Revision History:
20081218:
- initial release;
- 20090720 - modified by Slavisa Zlatanovic;
* Description:
This code works with TouchPanel and GLCD. Two digital output and
two analog input signals are used for communication with TouchPanel.
* Test configuration:
MCU: PIC16F887
http://ww1.microchip.com/downloads/en/DeviceDoc/41291F.pdf
Dev.Board: EasyPIC6
http://www.mikroe.com/en/tools/easypic6/
Oscillator: HS, 08.0000 MHz
Ext. Modules: GLCD 128x64, Touch Panel
http://www.mikroe.com/en/tools/components/
SW: mikroC PRO for PIC
http://www.mikroe.com/en/compilers/mikroc/pro/pic/
* Notes:
- Turn on GLCD backlight switch SW8.8.
- Turn on TouchPanel Controller switches SW9.5, SW9.6, SW9.7 and SW9.8.
- Turn off PORTA LEDs SW9.1.
*/
// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections
// Touch Panel module connections
sbit DRIVE_A at RC0_bit;
sbit DRIVE_B at RC1_bit;
sbit DRIVE_A_Direction at TRISC0_bit;
sbit DRIVE_B_Direction at TRISC1_bit;
const char READ_X_CHANNEL = 0; // READ X line is connected to analog channel 0
const char READ_Y_CHANNEL = 1; // READ Y line is connected to analog channel 1
// End Touch Panel module connections
bit write_erase;
char pen_size;
unsigned int x_coord, y_coord, x_coord_old, y_coord_old, x_coord_diff, y_coord_diff;
long x_coord128, y_coord64; // Scaled x-y position
int cal_x_min, cal_y_min, cal_x_max, cal_y_max; // Calibration constants
char write_msg[] = "WRITE"; // GLCD menu messages
char clear_msg[] = "CLEAR";
char erase_msg[] = "ERASE";
const unsigned int ADC_THRESHOLD = 900; // Threshold value for press detecting
// Returns 1 if TouchPanel is pressed, 0 otherwise
char PressDetect() {
unsigned adc_rd;
char result;
// PRESS detecting
DRIVE_A = 0; // DRIVEA = 0 (LEFT drive off, RIGHT drive off, TOP drive on)
DRIVE_B = 0; // DRIVEB = 0 (BOTTOM drive off)
Delay_ms(5);
adc_rd = ADC_Read(READ_Y_CHANNEL); // READ-Y
result = (adc_rd > ADC_THRESHOLD); // if logical one is detectet
// Debouncing, repeat detecting after 2ms
Delay_ms(2);
adc_rd = ADC_Read(READ_Y_CHANNEL); // READ-Y
result = result & (adc_rd > ADC_THRESHOLD);
return result;
}
unsigned int GetX() {
unsigned int result;
// Reading X
DRIVE_A = 1; // DRIVEA = 1 (LEFT drive on, RIGHT drive on, TOP drive off)
DRIVE_B = 0; // DRIVEB = 0 (BOTTOM drive off)
Delay_ms(5);
result = ADC_Read(READ_X_CHANNEL); // READ-X (BOTTOM)
return result;
}
unsigned int GetY() {
unsigned int result;
// Reading Y
DRIVE_A = 0; // DRIVEA = 0 (LEFT drive off, RIGHT drive off, TOP drive on)
DRIVE_B = 1; // DRIVEB = 1 (BOTTOM drive on)
Delay_ms(5);
result = ADC_Read(READ_Y_CHANNEL); // READ-X (LEFT)
return result;
}
void Calibrate() {
Glcd_Dot(0,63,1);
Glcd_Write_Text("TOUCH BOTTOM LEFT",12,3,1);
while (!PressDetect());
// Get calibration constants (reading and compensating TouchPanel nonlinearity)
cal_x_min = GetX() - 10;
cal_y_min = GetY() - 10;
Delay_ms(1000);
Glcd_Fill(0);
Glcd_Dot(127,0,1);
Glcd_Write_Text("TOUCH UPPER RIGHT",12,4,1);
while (!PressDetect()) ;
// Get calibration constants (reading and compensating TouchPanel nonlinearity)
cal_x_max = GetX() + 5;
cal_y_max = GetY() + 5;
Delay_ms(1000);
}
void Initialize() {
DRIVE_A_Direction = 0; // Set DRIVE_A pin as output
DRIVE_B_Direction = 0; // Set DRIVE_B pin as output
ANSEL = 3; // Configure AN0 and AN1 pins as analog inputs
ANSELH = 0; // and other AN pins as digital I/O
TRISA = 3;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
Glcd_Init(); // Initialize GLCD
}
void main() {
Initialize();
Glcd_Fill(0x00); // Clear GLCD
Glcd_Set_Font(font5x7, 5, 7, 32); // Choose font
Glcd_Write_Text("CALIBRATION", 30, 2, 1);
// Delay_ms(1500);
Glcd_Fill(0);
Calibrate();
Glcd_Fill(0);
Glcd_Write_Text("WRITE ON SCREEN", 20, 5, 1) ;
Delay_ms(1000);
Glcd_Fill(0);
Glcd_Fill(0);
Glcd_V_Line(0,7,0,1);
Glcd_Write_Text(clear_msg,1,0,0);
Glcd_V_Line(0,7,97,1);
Glcd_Write_Text(erase_msg,98,0,0);
// Pen Menu:
Glcd_Rectangle(41,0,52,9,1);
Glcd_Box(45,3,48,6,1);
Glcd_Rectangle(63,0,70,7,1);
Glcd_Box(66,3,67,4,1);
Glcd_Rectangle(80,0,86,6,1);
Glcd_Dot(83,3,1);
write_erase = 1;
pen_size = 1;
x_coord_old = 0;
y_coord_old = 0;
while (1) {
if (PressDetect()) {
// After a PRESS is detected read X-Y and convert it to 128x64 space
x_coord = GetX() - cal_x_min;
y_coord = GetY() - cal_y_min;
// When lifting pen from the touchpanel surface GetX and GetY readings
// (after correct PressDetect reading) may be incorrect
x_coord_diff = abs(x_coord - x_coord_old); // Compare with old values
y_coord_diff = abs(y_coord - y_coord_old);
x_coord_old = x_coord; // Save old values
y_coord_old = y_coord;
if ( (x_coord_diff>50) || (y_coord_diff>50) ) // If difference is too big then ignore the reading
continue;
x_coord128 = (x_coord * 128l) / (cal_x_max - cal_x_min);
y_coord64 = (64 -(y_coord *64) / (cal_y_max - cal_y_min));
if ((x_coord128 < 0) || (x_coord128 > 127))
continue;
if ((y_coord64 < 0) || (y_coord64 > 63))
continue;
// If clear is pressed
if ((x_coord128 < 31) && (y_coord64 < 8)) {
Glcd_Fill(0);
// Pen Menu:
Glcd_Rectangle(41,0,52,9,1);
Glcd_Box(45,3,48,6,1);
Glcd_Rectangle(63,0,70,7,1);
Glcd_Box(66,3,67,4,1);
Glcd_Rectangle(80,0,86,6,1);
Glcd_Dot(83,3,1);
Glcd_V_Line(0,7,0,1);
Glcd_Write_Text(clear_msg,1,0,0);
Glcd_V_Line(0,7,97,1);
if (write_erase)
Glcd_Write_Text(erase_msg,98,0,0);
else
Glcd_Write_Text(write_msg,98,0,0);
}
// If write/erase is pressed
if ((x_coord128 > 96) && (y_coord64 < 8)) {
if (write_erase) {
write_erase = 0;
Glcd_Write_Text(write_msg,98,0,0);
Delay_ms(500);
}
else {
write_erase = 1;
Glcd_Write_Text(erase_msg,98,0,0);
Delay_ms(500);
}
}
// If pen size is selected
if ((x_coord128 >= 41) && (x_coord128 <= 52) && (y_coord64 <= 9))
pen_size = 3;
if ((x_coord128 >= 63) && (x_coord128 <= 70) && (y_coord64 <= 7))
pen_size = 2;
if ((x_coord128 >= 80) && (x_coord128 <= 86) && (y_coord64 <= 6))
pen_size = 1;
if (y_coord64 < 11)
continue;
switch (pen_size) {
case 1 : Glcd_Dot(x_coord128, y_coord64, write_erase); break;
case 2 : Glcd_Box(x_coord128, y_coord64, x_coord128 + 1, y_coord64 + 1, write_erase); break;
case 3 : Glcd_Box(x_coord128-1, y_coord64-1, x_coord128 + 2, y_coord64 + 2, write_erase); break;
}
}
}
}
benim anlamadigim mcu bilgiis olmayan arkadaslar niye cok büyük projelerin altina giriyor gecenlerdede bir tanesi cosfi yapacak amcam mcu bilmiyor
arkadasim sana soracagim sey öncellikle elektronik bilgin varmi bölümün ne ona göre sana tavsiyelerde bulunalim eger bölümün bilgisyar ise
yelkenci arkadasin kullandigi modülü kullan derim elektronik bilgi gerektirmez
https://www.picproje.org/index.php/topic,32062.msg227292/topicseen.html#msg227292
yok ben elektronik bilyiorum ama pic v.s mcu ögrencem dersen
projen icin önce lcd ve dokunmatik ekrani temin et
http://www.elektrovadi.com/LCD-DOKUNMATIK-PANEL,LA_182-2.html
tabi elektronik kisim icin bir prototyp baski devre hazirlaman gerekecek öncesinde isis de semani ciz
hani bilgin nedir ne degildir bunlari yazda bizde yönlendirelim birde lütven p.m ile degil kolay gelsin
Elektronik ve haberleşme mühendisliği okuyorum. Mikroişlemci ve denetleyici bilgim var biraz ama daha önce sadece basit projelerde bulunduğum için bu çeşit bir proje zor geldi. Bitirme projem çok ağır o yüzden stresliyim dokunmatik ekran işini hallettikten sonra imza tanımaya geçmem gerekiyor. bu yüzden öncelikle imza atıp ardından seri portla bilgisayara yollayıp matlab ile yapay sinir ağları yardımıyla traninge başlayacağım. Çok vaktim kalmadıığı için sizden bu kadar çok yardım talep ettim. 8086 6802 8051 gibi işlmeci ve mikrodenetleyicileri assembly olarak gördüm. Ama c ile detaylı projelerde zorlanıyorum işte. Teşekkür edeirm yinede edebileceğiniz yardımlar için kusura bakmayın
bu arada dokunmatik ekranım ve glcd im var zaten devreyi kurdum ondada sıkıntı yok dookunduğum yerdeki voltajları görebiliyorum
o zaman sorun nedir devreyi kurmusunuz dokundugunuz yerdeki voltaji görüyorsunuz geriye ne kaldi bu bilgiyi seri portla aktarmak gerisinide artik bilgisyarda halledeceksiniz veya programi gelistirmek size kalmis bir sey yaniliormuyum ?
İşte problem sadece voltajı ölçebiliyorum dokunduğum yerdeki pikselleri yakamıorm. ADC 10 bitlik benim ekranım ise 128x64. Burdan işin içinden çıkamadım işte ya biliyorum çoksoru sordum ama ordaki matematik oyununu nasıl çözerim bilmiyorum
dediğim gibi yapacaksın aldığın ölçümlerin doğru olması için 10 defa örnekleme yapacaksın aldığın değeri ve bu değerlerin ortalamasını alıp dokunduğun noktayı belirliyeceksin
eğer dokunmatik ekranlı bir pda kullandıysan onlardada bu sistem mantığı vardır cihaz açılırken touch'un 4 köşesine ve ekran ortasına belirlenmiş noktaya dokunursun, böylece kalibre etmiş olursun
ekrandaki nokta bilgisinide seri haberleşme kullanarak pc'ye aktarmanda zor olmasa gerek?
bu arada eğer 2 ay kadar bir vaktin varsa ben de benzer bir proje yapacağım yaptıktan sonra sana yollarım
touch için sürücü devresiyi halledebildin değil mi?
Alıntı yapılan: sinansinan09 - 21 Mart 2011, 14:52:27
dediğim gibi yapacaksın aldığın ölçümlerin doğru olması için 10 defa örnekleme yapacaksın aldığın değeri ve bu değerlerin ortalamasını alıp dokunduğun noktayı belirliyeceksin
10 değil de 8 örnekleme yaparsan PIC sana duacı olur. Bölmeyi sağa kaydırarak yapmak gerekiyor tabi.
Tamam ben hallettim sürücü devre 2 tane pnp transistörle halloluyo zaten. Dokunduğum yerleri yakabiliyorum çözümünü merak eden arkadaş olursa yardımcı olabilirim oldukça basit bir işlem ama bu sfer başka bir problem çıktı önüme donanımsal bir hatamıdır bilemiyorum. benim dokunduğum yerlerdeki pikseller güzelce yanıyor problem yok da ekranın sağ köşesinde kendi kendine sanki basılmış gibi pikseller yanıyor onu çözemedim threshold değerle alakası varmı bilmiyorum maximum düzeye getirdim gene olmadı bu konuda fikri olan varmı
ekranda voltajlari gösteren programi kendinizmi yazdiniz hazirmi ?
belliki hazir
neyse adc degerleri alindiktan sonra program büyük olasilikla ekrana gösterme alt programina gidiyordur siz öncellikle x ve y ekseninin 0 oldugu andaki voltaji okuyun sonra 128x64 deki voltaji okuyun sonra bu arada alinan degerlere göre ekrana yazdirma(voltajin) bölümünde bir kisim daha ekleyerek biraz matematiksel islem yaparak( artik mühendisiniz bunun denkelimini v.s bulursunuz) okunan voltajin hangi pixele denk geldigini hesaplayin ve o noktaya pixel yazdirma komutu gönderin hani ben böyle uygulama yapmadim ama yapcak olsam bu benim izleyecegim yöntem olurdu
her seyden önce madem elinizde bir program varda niye burda paylasmiyorsunuz forumdan belki birisi cikip geri kalani bitirecek veya yardimci olacakdir en azindna ben tahmin etmek yerine programa bakarak konusurdum !!
son mesajlarini görmeden yukardakini yazmis oldum problemi halletmisin
ama yine sorun burda forumda vatandas ödevi icin soru soruyor ama sorunu hallediyor cözümü yazmiyor niye pm cekilmesini veya crapdeno üstad bize bi yardimci olsana denmesi bekleniyor !! yanlismiyim crapdeno arkadas ?
Hayır öyle kasti bir düşüncem olmadı :s ben ilk kez forumda dolanıyorum bilmiyorum forum nasıl kullanılır. Evet voltaj ölçme kısmını netten aldım adc hakkında eksiğim vardı mantığını anladıktan sonra da geri kalan problemi çözmek zor olmadı. Kodu ve devreyi f_machine arkadaşımın https://320volt.com/pic-ile-dokunmatik-panel-grafik-lcd-kullanimi-mikro-c/ (https://320volt.com/pic-ile-dokunmatik-panel-grafik-lcd-kullanimi-mikro-c/)
linkinden aldım zaten o kısmı aynı pikseli yakma kısmını anlatayım öncelikle 0-5 volt arasını 10 bitlik adc ile ölçeklendiriyor devre ve ters işlem yaparak bu kod sayesinde değdiğimiz nokttadaki adc değerine karşılık gelen voltajı buluyoruz. Fakat benim ekranım 128 e 64 lük idi. yani adc 10 bit benim x eksenim 7 bit y eksneim 6 bit. Bende burdaki kalibrasyonu yapabilmek için dokunmatik ekran üzerindeki köşe noktalarının geriimlerini ölçtüm ve ona göre yeniden kalibre ettim. Bazı arkadaşalrım niçin direk x ekseni için 1024/8=128 y ekseni için 1024/16=64 yapmadık diye sorabilir. O şekilde olmuyor çünkü benim gözlemlediğim voltajlar maximum 4.60 civarı minimumlar ise 0.4 civarı bişi çıkıyordu dolayısıyla baştan kalibre etmem gerekti. Tam koduda altta paylaşıyorum ama dediğim sorun devam ediyor nedense dokunmadığım yerlerdende piksel yanması alıyorum problem nerdedir bilmiyorum o konuda hala sıkıntım var
unsigned int x_koordinat(void );
unsigned int y_koordinat(void );
unsigned char basma_kontrol(void );
unsigned int adc_deger;
unsigned char ch;
long gerilim;
// Glcd module connections
char GLCD_DataPort at PORTD;
sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;
sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections
void main() {
PORTA = 0x00;
TRISA = 0x03; // RA0 i RA1 are analog inputs
ANSEL = 0x03;
ANSELH = 0; // Configure other AN pins as digital I/O
PORTC = 0 ;
TRISC = 0 ; // PORTC is output
Glcd_Init(); // Glcd_Init_EP5
Glcd_Set_Font(FontSystem5x7_v2, 5, 7, 32); // Choose font size 5x7
Glcd_Fill(0); // Clear GLCD
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);
glcd_dot((x_koordinat()/6.812)-10,(y_koordinat()/11.67)-15,2); // bu kısımda kendim kalibre ediyorum
}
}
unsigned int x_koordinat() {
unsigned int sonuc;
TRISA.F0=0; // porta 0. bit çıkış
PORTA=0; //porta yı temizle
PORTC.F1=1; // Y+ yüksek empedans
PORTC.F0 = 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
PORTC.F1 = 0; // Y+ +5v
PORTC.F0 = 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=900; //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
PORTC.F1=0; // Y+ +5v
PORTC.F0=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
}
dediğim gibi kodun voltaj ölçme kısmı f_machine dostumdan alıntıdır. Tekrara teşekkürler
kodu incelemedim ama programa baslarken ekrani temizle sonra programa basla belki faydasi ollabilir
bu arada eline saglik kolay gelsin