stm32 ve 4 wire resistive ts bağlantısı

Başlatan blcouz, 19 Şubat 2024, 10:49:25

blcouz

Bir kaç gündür başlıkta yazdığı gibi nucleo 64(f446) ya arduino uno shield olarak tasarlanmış bir ekran bağlamaya çalışıyorum. Sorun şu dokunmatiği hiç bir şekilde çalıştıramıyorum. Şuanda aslında dokunmayı algılama kısmındayım .
Bir app note ta gördüğüm algoritmayı uygulamaya çalışıyorum fakat sonuç alamıyorum. Algoritma  şu şekilde X+ ve X- yi GND ye bağla Y+ ve Y- yi input ve pull up olacak şekilde ayarla eğer dokunma gerçekleşirse Y+ ve Y- den okuduğumuz dijital değer 0 olacaktır fakat ne yaptıysam da Y+ ve Y- de bu şekilde bir değişim yakalamayadım. Aslında arduino da kendi kütüphanesi var fakat ben stm32cube ide üzerinde çalışıyorum(Ekranda yada dokunmatiğinde problem yok). Aslında basit gibi görünen bu işlemde ben neyi yanlış yapıyor olabilirim bir fikriniz varmı.
Kullandığım shield :




Kullandığım Kart :
https://www.st.com/en/evaluation-tools/nucleo-f446re.html

Yazdığım kod:







kimlenbu

Kullandığınız ekran ne ? Genelde Resistive touch, kontrolcü çipi ile birlikte gelir, siz sadece registerları okuyup interrupt'ları algılarsınız. Ham şekilde sürülen ekran olduğuna emin misiniz ?

blcouz


alikeskinkilic

#3
Alıntı yapılan: blcouz - 19 Şubat 2024, 10:49:25Bir kaç gündür başlıkta yazdığı gibi nucleo 64(f446) ya arduino uno shield olarak tasarlanmış bir ekran bağlamaya çalışıyorum. Sorun şu dokunmatiği hiç bir şekilde çalıştıramıyorum. Şuanda aslında dokunmayı algılama kısmındayım .
Bir app note ta gördüğüm algoritmayı uygulamaya çalışıyorum fakat sonuç alamıyorum. Algoritma  şu şekilde X+ ve X- yi GND ye bağla Y+ ve Y- yi input ve pull up olacak şekilde ayarla eğer dokunma gerçekleşirse Y+ ve Y- den okuduğumuz dijital değer 0 olacaktır fakat ne yaptıysam da Y+ ve Y- de bu şekilde bir değişim yakalamayadım. Aslında arduino da kendi kütüphanesi var fakat ben stm32cube ide üzerinde çalışıyorum(Ekranda yada dokunmatiğinde problem yok). Aslında basit gibi görünen bu işlemde ben neyi yanlış yapıyor olabilirim bir fikriniz varmı.
Kullandığım shield :




Kullandığım Kart :
https://www.st.com/en/evaluation-tools/nucleo-f446re.html

Yazdığım kod:







Eğer arkadaşın dediği gibi bir sürücü ile gelmedi ve 4 kablo ile okuyor ve bunlardan hangisinin x+ hangisinin x- olduğunu biliyor ve buna rağmen x+ yı gnd ye bağlıyorsanız problem buradadır.ayrıca bir sürücüsü yoksa değer dijital değil analog değer okursunuz yani kanalı ADC modülü ile okumalısınız.daha önce kullandığımdan değil de işin bana mantıklı gelen tarafı Y den gelen tarafı ayrı okuyup y eksenindeki koordinatı bulur X ekseninde gelen kordinatı okuyup x eksenini bulursunuz yani x- yi gnd ye bağlayın y- gibi siz nedense x- ile x+ yı birbirine bağlayıp onuda gnd ye bağlamışsınız bence ürünün bilgi sayfasına bir bakın

19 Şubat 2024, 14:06:22
bence şöyle hayal etmelisiniz iki ayrı direnç var x direnci ve y direnci bir bacağını pull up yada down yaparak gerilim bölücü yapıp birleşim yerinden değişen dirence göre analog çıkış alırsınız aynı iki ayrı pot kullanıyormuş gibi.sonrasında map fonksiyonu ile ekranınızın ölçüsüne göre limitleri verirsiniz x ve y koordinatı gelir size
Hep meraktan


blcouz

@alikeskinkilic hocam ilk aşamada dokunma gerçekleşip gerçekleşmediğini algılamak için uğraşıyorum eğer bu aşamayı geçebilirsem adc işine bakacağım. Ne kadar gerekli olup olmadığı tartışılabilir belki ama şuanki hesehim dokunulup dokunulmadığını algılamak.

mehmet

X+ -> GND
X- -> Vcc
Y+ -> input
Y- -> ADC okuma
şeklinde deneyin öncelikle...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr


blcouz

#8
Arduino Uno kartı ile kendi kalibrasyon uygulamasını çalıştırarak Aşaıdaki çıktıyı aldım.
TouchScreen.h GFX Calibration
Making all control and bus pins INPUT_PULLUP
Typical 30k Analog pullup with corresponding pin
would read low when digital is written LOW
e.g. reads ~25 for 300R X direction
e.g. reads ~30 for 500R Y direction

Testing : (A1, D7) = 34
Testing : (A2, D6) = 24
ID = 0x9486

cx=914 cy=956 cz=460  X, Y, Pressure
cx=914 cy=570 cz=499  X, Y, Pressure
cx=918 cy=198 cz=599  X, Y, Pressure
cx=553 cy=953 cz=348  X, Y, Pressure
cx=564 cy=195 cz=586  X, Y, Pressure
cx=220 cy=947 cz=239  X, Y, Pressure
cx=198 cy=564 cz=438  X, Y, Pressure
cx=196 cy=195 cz=558  X, Y, Pressure

*** COPY-PASTE from Serial Terminal:
const int XP=6,XM=A2,YP=A1,YM=7; //320x480 ID=0x9486
const int TS_LEFT=938,TS_RT=180,TS_TOP=968,TS_BOT=179;

PORTRAIT  CALIBRATION     320 x 480
x = map(p.x, LEFT=938, RT=180, 0, 320)
y = map(p.y, TOP=968, BOT=179, 0, 480)

LANDSCAPE CALIBRATION     480 x 320
x = map(p.y, LEFT=968, RT=179, 0, 480)
y = map(p.x, TOP=180, BOT=938, 0, 320)

blcouz

Bugün de olmadı başarabilirsem yazarım. hi-z olayı galiba tam olarak olmuyor. emin değilim

blcouz

#10
Pinler doğru fakat TFT nin RD pini bir şekilde olaya dahil oluyor. Sebebini bilmediğim halde eğer RD pinini VCC ye bağlarsam sorun çözülüyor. O vcc ye bağlı değilken dokunmadığımda 3.3V olması gereken Y+ pininden 1.2 V alıyordum onu vcc ye bağlayınca düzeldi.

21 Şubat 2024, 18:46:26
Teşekkür ederim ilgilendiğiniz için.