D

16F877A, Keypad & LCD Uygulaması Yardım

Başlatan developer, 16 Aralık 2012, 09:17:14

developer

Merhaba arkadaşlar,

Uzun zamandır pic ile uğraşmıyordum, ancak bir arkadaşa lazım olduğu için yardımcı olmak istediğimde bir problem ile karşılaştım. Linkteki devre isis'de sorunsuz bir şekilde çalışmasına rağmen, uygulamada sanki keypadden sürekli 1-4-7 ve * tuşlarına basılıyormuş gibi sırası ile ekrana basıyor. Uygulamanın bu kısmı yalnız keypadden okunan değerleri ekrana basan bir uygulama. portb'nin dahili dirençlerini kullanmadım, onun yerine kendim pull-down yaptım. Acaba atladığım bir yer mi var? Yardımcı olabilir misiniz?
(Dil olarak pic basic proton kullandım. proteus verisyonu 7.8 )

Not: Elimdeki keypad'e uygun olsun diye yerleşimi farklı yaptım, yani tuş yerleşimi

1 2 3
4 5 6
7 8 9
* 0 #

gibi düşünülmelidir.

https://dl.dropbox.com/u/82483868/Devre.rar

Mucit23

Ufak Tefek hataların dışında programında problem yok.

Anlamadığım bir nokta neden sütünlara seri 3k3 direnç bağlamışsın. Buna gerek yok kaldır at onları.

Gerçekte çalışmamasının birkaç sebebi olabilir.

1-) 1,4,7 ve yıldız tuşları bir şekilde basılı kalmış, veya başka biryerde kısa devre gibi birşey var.
2-) RB0 pinine sürekli bir yerden 1 gidiyordur.

Bu iki durumdan biri olursa sürekli ekranda o dediklerini görürsün. Bu kısıma yoğunlaş bence..
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

developer

Mucit23 öncelikle teşekkür ederim,

1-) keypad takılı olmasa bile aynı hata devam ediyor. Dolayısı ile keypad basılı değil. Devredeki kısa devreleri de kontrol ettim sıkıntı yok. Hatta pic'i çıkarıp elle taradım, o zaman sıkıntı yok.

2-) rb0'a sürekli 1 gelse bile diğer tuşlara dokunmadan birşey olmaması gerekiyor diye düşünüyorum

Mucit23

Olabilecek olası arızalar bunlar.

keypad takılı olmadığındada sürekli 1,4,7 ve * tuşları ekrana basıldığına göre kartında bir problem olduğu ortada.

Kartını göremiyorum gerçi. Bendeki proteus eski versiyon
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

developer

Baskı Devreye ait resim ektedir, 3,3k'ları söktüm, ancak basılan hali buydu.

ete

İsis şemasında ve programda tuş takımı giriş pinleri olarak PORTB.0- PORTB.1 - PORTB.2 ve PORTB.3 kullanmışsınız. Ancak baskılı devrede PORTB.4 - PortB.7 arasını giriş pini şeklinde bağlamışsınız. Terslik burada.
Programı değiştirip PortB.4-PortB.7 arasını giriş yapın ve tuş taramasınıda ona göre değiştirin düzelir.

Ete

developer

ETE hocam çok teekkür ederim öncelikle. Sorunu çözmek için devredeki tüm dirençleri çıkardım, daha sonra 3,3k olanları kısa devre yaptım, 10k'lar açık devre olacak şekilde düzenledim. Dahili pull-upları aktif hale getirdikten sonra taramayı 0'a göre yaptım ve düzeldi. Hem yardımın için hemde yayınladığın örnekler için teşekkürler.(Diğer foruma cevap yazdım ama burada da benzer bir sorun yaşayan arkadaş olursa diye paylaşmak istedim.)

Hattuşa

s.a.
ETE hocam yine ben  ;D
kusura bakmayın durmadan soru sorarak kafa karıştırıyorum.
malum AD9850 ile sinyal generatoru uygulaması ile ilgili bir çalışma yapıyorum. sorunum şuan için keypad ile ilgili, ben butonlarla keypad yaptım ve devreye taktım, butonlar resimdeki gibi bağlandı işlemciye, sitelerde araştırma yaparken kimisi dirençlerle pullup yapmış kimisi direk bağlamış (bende direk bağladım) ancak butonlardan dolayı yazılım saçmalıyor sanki butonlara sürekli basılmış gibi. benim merak ettiğim keypadlarda çalışma mantığı nasıldır, klasik butonlar gibi pullup dirençleri gerektirir mi?

ete

Tuş takımı bir buton gurubudur. Bu nedenle tek butona uygulanan kurallar tuş takımı içinde geçerlidir.
İşin mantık yanını düşünürseniz işlemcinin  bir tuşa basılıp basılmadığını algılamasını istiyoruz.
Peki işlemci nasıl algılayabilir.? bir defa algılama pini giriş olarak ayarlanacak. Pin belirli bir konumda duracak (yani float veya yüzer konumda olmayacak, kısaca ya LOW da yada HIGH da bekleyecek) tuşa basılınca algılama pini konum değiştirecek.
Bütün temel prensip budur. Algılama pini hangi konumda beklesin derseniz daima HIGH da beklesin (pullup lı olma durumu) tercih edilmelidir. Zira işlemcilerin dhili pullup larından yararlanmak mümkün oluyor.
Bir tuş takımında yatay satırlar ve diket sütunlar mevcuttur. Bir birlerinin üzerinden geçen çizgiler gibi düşünün. çakışma noktalarına birer buton yerleştirip o noktada butona basılınca iki hattı kısa devre edeceğinizi varsayın. Gerçektede bu olmaktadır zaten.
Ya yatay satırları yada dikey sütunları giriş pini yaparsınız fark etmez. Fark eden tarama şeklidir. Sonuçta tuşları teker teker taram gerekiyor. Bunu yapmadan önce de giriş yapmadığınız hattın çaprazında olan hatları sırası ile boşta bekleyen algılama pininin tersi olan değeri ile yükleyip girişlerin hangisinin bu değere ulaştığına bakarsınız.
Örnekle açıklamak daha doğru galiba. Elimizde Yatay1, Yatay2, Yatay3 ve Yatay4 pinleri olsun. Ayrıca Dikey1, Dikey2 ve Dikey3 şeklinde çapraz uçlarımız olsun. Hepsi birer işlemci pinine bağlanacaktır. Yatayları giriş pini yapalım istersen.
Bunlar pullup lı olarak HIGH da beklesinler. Bu hatlardan birisi LOW olduğunda tuşlardan birine basıldığını anlayacağız.
Bunu yapmak için dikey hatları (dikeyler çıkış pini) sırası ile LOW'a çekeceğiz. Once bütün dikeyleri HIGH yapmak gerekir.
Bu konumda tuşa bassanız bile işlemci algılamayacaktır. Zira kendiside Highda bekliyor zaten.
Şimdi Dikey1=0 yapıp,
- Yatay1=0 olmuşmu sorgulayacağız. Olmuş ise 1 nolu tuşa basılmıştır.
- Yatay2=0 olmuş ise 4 nolu tuşa basılmıştır.
- Yatay3=0 olmuş ise 7 nolu tuşa basılmıştır.
- Yatay4=0 olmuş ise (*) tuşuna basılmıştır.
Şimdi dikey1=1 yapıp yerine Dikey2=0 yapacağız.
AYnı kontrolleri yeniden yapıp bu sefer 2. dikey hatta denk gelen tuşların basılıp basılmadıklarını anlayacağız.
Olay bu mantıkla devam edecektir.
Umarım anlaşılır.
Ete

Hattuşa

hocam tşk ederim, bu konu ile ilgili son bir soru daha sormak istiyorum, portb pullups u aktif ettiğimizde dirençle gnd yemi çekiyoruz yoksa high mi yapıyoruz

ete

Sorunu anlamadım. Ne direnci? kimi GND ye mi çekiyoruz gibi soruları benim sormam lazım.
Pullup = Bir pinin  direnç ile +5V ta  bağlanmasıdır.
Pulldown=Bir pinin direnç ile GND ye bağlanmasıdır..

Dahili pullup ları akltive ettiğin zaman otomatikman pinler HIGH konumuna geçeceklerdir. Hepsi bu. Ayrıca dışarıdan direnç falan bağlamaya gerek olmadan bu iş yapılıyor biliyorsun.

Genelde OPTION_REG.7=1 dediğin zaman pullup lar aktive olurlar. Yalnızca PORTB de dahili pullup dirençleri vardır.
Bası işlemcilerde farklı pullup aktivasyonu olabilir.

Ete


ibocakir06

Hocam benim de bir sorum olcaktı. Pıc deney setimde 5 tane ıdc 10 giriş var fakat elimdeki tuş takımının 8 tane cıkışı var(4x4 membran)
Araştırdım fakat tuş takımını karta nasıl bağlayacagımı bulamadım yardımcı olur musunuz ?

ete

#12
Idc dediğin ADC olsa gerek. Yani 5 analog 5 digital girişin var demek. Olaya giriş bazında bakarsan tuş takımını bağlayamazsın. Bağladanda çalıştıramazsın. Elindeki girişlerin hangi portlara ait olduğunu bilmen gerekir. Genelde ben portb7 den başlayarak yukarı doğru bağlarım. Elindeki tuş takımının 4 pini giriş 4 pini çıkış pinlerine bağlanacaktır. Gerekirse kesmede kullanabilmek için giriş olanları ( mesela yatay pinlerini) Portb.7-PortB.6-PortB.5 ve PortB.4 pinlerine bağlarım. Diğer 4 pin nereye olsa bağlanır. Ama müsait ise portb.3-portb.2-portb.1 ve portb.0 pinlerine bağlanabilir. Bu durumda sen 5 ad. Adc pininden 4 adedini digital giriş yapabilir ve yatay pinleri oraya bağlayabilirsin. 4 adet dikey pinde diğer 5 adet digital pinlerden 4 adedine bağlanabilir.
Ete

ibocakir06

Hocam deney setinin kullanım klavuzundan IDC10 yazıyordu ondan oyle yazdım bende. Bilgiler için teşekkür ederim

pwm3434

Ete hocam bu keypad analog çıkışlı. Dijital çıkışlı olanları da var mıdır. Tuşların durumlarını çıkışına yazıp seri haberleşme yapan üniversal modellerde var mıdır. Kolay gelsin.

Powered by EzPortal