Tek Pin Analog Girişli Keypad

Başlatan hakerten, 26 Temmuz 2015, 14:55:39

hakerten

Arkadaşlar merhaba,

Tek pin üzerinden analog olarak 16 tuşlu keypad'i devreme entegre etmek istiyorum.  Montajını yaptım ve çalıştırdım da.  Her bir tuş üzerinden gelen analog değeri de 10 bit olarak ölçüp LCD'ye veriyorum.  Ancak sanıyorum çevresel elektrikten dolayı veya devremin girişindeki LM7805'e rağmen devremdeki diğer elemanlar yüzünden referans voltajında dengesizlik oluyor.  Bu nedenle her seferinde, bir tuş için okunan değer bir miktar farklılık gösteriyor.    Mesela 1 tuşu için zaman zaman 900 bazen 910 değeri alıyorum analog pinden.  Ben de bunu aşabilmek için her bir tuş için değer aralıkları tanımladım, her bir tuşu ayrı ayrı deneyerek uygun aralığı bulmaya çalıştım.  Ancak yine de değerler her seferinde farklı farklı gelebiliyor ve bazen verdiğim aralıklardan da farklılaşabiliyor.  Bunu aşabilmemin bir yolu var mıdır yoksa, bu tip uygulamalarda analog keypad yerine, ayrı bir PIC takıp direk olarak 8 pin üzerinden çalıştırmak mı daha anlamlı olur.  Amacım pinden tasarruf etmek aslında, ama eğer bu tür kullanımlarda analog keypad sonuç vermeyeceksa devreye ikinci bir PIC takıp da ilerleyebilirim.

Tavsiyeleriniz için şimdiden teşekkür ederim.

Hakan

İlyas KAYA

Şu şekilde kontrol edebilirsin
örneğin 1 butonu değeri 100 ile 120 arasında olsun.

if deger>100 and deger<120 then buton=1
if deger>123 and deger<130 then buton=2
...
..
.
gibi.

100 ile 120 arasında bir değer analog kanaldan okunur ise buton=1 olur
123 ile 130 arasında ise buton=2 olur.

Tüm butonlar bırakıldığında high mı low mu bilmiyorum . High i1024,  low ise 0 olur zaten buna göre buton bırakılmış mı bırakılmamış mı anlarsınız.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Hattuşa

ustam 900 iken 910 okuyorum diyorsunuz ya
yani 10 adc parazit var bu bir pic için büyük bir parazit ancak unutmamakda  gerekir ki 10 adc demek 10x0,0048 =0,048v
yani bu denli küçük voltaj farklılıkları sen butona basıp bıraktıkça oluşabilecek bir seviyedeki parazit bunu kesmek ne denli kolay olur düşündürücü

F®T

referans vdd ise picte vdd den besleniyor ise aynı değeri üretmezmi.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

İlyas KAYA

Dirençler %10 toleranslı ise bu değerler ufak tefek oynar. Ayrıca ortalama alma işlemi yaparsanız daha net olur.
Butona basar basmaz işlem yapmayın. Direnç üzerinden akım geçtiği için kısa bir süre verin ve ADC değerinin oturmasını bekleyin.
Dirençleri kaliteli direnç kullanmanız ve toleransını %1 olarak seçmeniz gerekebilir.
Ancak dediğim gibi aralıkları çok sık tutmazsanız aşağı ve yukarı kontrol ile bu aralıktaki değerlerde rahatlıklar çalıştırabilirsiniz.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

hakerten

Arkadaşlar tavsiyeleriniz için teşekkür ederim. Aralıkları ve dirençleri tekrar gözden geçireceğim.
Eğer becerebilirsem, 8 pin yerine tek pinle işlem yapabiliyor olmak güzel olacak.
Teşekkürler.

Hakan Erten

Hattuşa

ekteki buton devresine skoptan bakarsanız ne demek istediğimi anlarsınız? Adc okuma zamanı burdaki değişimin neresine göre yapılıyor?

hakerten

pro-tr çok teşekkür ederim bu faydalı paylaşımın için, gönderdiğin dosyaya ancak bakabildim.  Benim için çok açıklayıcı oldu gerçekten.  Şimdi, ADC'den gelen veriyi bir süre nasıl bekletebilirim ona bir bakayım.  Bir de kullandığım dirençler standart dirençler, açıkçası tolerans seviyelerini şu ana kadar hiç düşünmemiştim.   Uygulamada etkilerini görmüş oldum böylece. 

Teşekkürler.

Hakan

hakerten

Arkadaşlar tekrar merhaba,
Sanıyorum sorunu çözdüm. Bundan sonraki arkadaşlara tecrübe olması açısından yaptıklarımı paylaşmak isterim:
1 - Bir program yazarak, her bir tuşa basılı tutulduğu sürece oluşan ADC değerlerini min ve max olarak LCD'ye vererek, her bir tuşun aralığını en sağlıklı şekilde hesaplamaya çalıştım. Bu şekilde her bir tuş için, yaklaşık 3 birim civarı bir min-max sapması olduğunu gördüm.  Daha sonra bu min-max değerlerine göre her bir tuşu yazılım içinde tek tek tanımladım.   
2 - Ancak problem şuydu ki, mesela 1 numaralı tuşa bastığımda, min-max değerleri  902-905 görünüyor.  Aradan birkaç dakika geçtikten sonra yine 1 numaralı tuşa bastığımda 899-903 görünüyor. 5-10 dk sonra tekrar denediğimde 940'lara falan çıkabiliyor. Daha sonra denediğimde 890'larda. Devreyi breadboard üzerinde kurmuş olmamdan kaynaklı olarak ortamda sanırım statik elektrik sorunu olabilir diye düşündüm.  Analog girişteki GND bağlantısını devrenin girişindeki eksi bağlantısına yakın tutmayı da denedim, ama yine sonuç alamadım. 
3 - Devremi PICKIT2 ile In-circuit-serial-programming (ICSP) modunda programlıyordum. Devrede pickit takılıyken, analog değerlerin yaklaşık 20-30 birim saptığını gördüm.  Dolayısıyla program aktarma işi bittikten sonra pickiti devreden ayırdım.
4 - Son olarak, (ki esas sorun bundan kaynaklı olabilir diye düşünüyorum), devremde elektrik kaynağı olarak ayarlı voltaj regülatörü kullanıyordum ve buradaki voltaj ayarı yaklaşık 5.5-6.0 voltta duruyordu.  Devre girişinde LM7805 olduğu için de her durumda 5v elektrik sağlamış olurum diye düşünerek, bu regülatör voltajının yeterli olduğunu düşünmüştüm.  Ancak ne zaman ki, regülatör voltajını 6.5 volta çıkarttım, o zaman analog okumaları tutarlı hale geldi.  Belki devredeki mevcut dirençler ya da LCD ekranın da voltajının devre üzerinden geliyor olması, bu tutarsızlığı yaratıyordu, bundan emin değilim.  Aramızda teknik açıdan daha güçlü olan arkadaşlar var, buna yorum getirebilirler belki, ama ben en azından uygulama tarafında bu tecrübeleri edinmiş oldum.

Eğer yarın sabah devreyi çalıştırdığımda analog okumalarda tutarsızlık görmezsem, sorunu çözmüşüm demektir. :).  Eğer sorunu çözmüşsem, artık başka bir konuya geçebilirim demektir. :)

Bu arada kısa bir bilgi notu da vereyim.  Şu an için breadboard üzerinde bir protoboard (geliştirme kartı) oluşturmaya çalışıyorum.  Displaylar, butonlar, motorlar, sensörler, analog girişler vb temel uygulamaların hepsini tek bir board üzerinde adım adım kurdum.  Bundan sonraki aşamada, birkaç birşey daha ekledikten sonra, bunu bir PCB'ye aktarmayı hedefliyorum.  PCB'ye aktarmadan evvel, bir de USB bağlantısı kurup, PIC to PC bağlantısı oluşturmak istiyorum. Bunu elimdeki mevcut 16F877A ile yapabilmeyi umuyorum.  Genelde forumlarda PIC to PC için 18F4550 tavsiye ediliyor ama umarım elimdeki 16F877A'larla da bunu yapabilirim. Bu konuda da tavsiyeleriniz varsa alabilirim.  Yani 18F4550'yle bu işin daha kolay olacağını anlıyorum, ama 16F877A'da da yapılabilir bir şey ise, biraz uğraşmak istiyorum.  Akabinde de Visual Basic üzerinde arayüz geliştirme konusuna doğru yönelmek istiyorum.

Destek olarak arkadaşlara ilgi ve alakaları için çok teşekkür ederim.

Hakan

kosantospa

usb için 4550 tavsiye edilmesinin sebebi dahili usb baglantısına sahip olması bildiğim kadarıyla 877lerde boyle bir ozellık yok. onun için ekstra eleman gerekıyor. farklı projeler var. ben 4550 ile usb bağlantılı bir şeyler yapmaya çalışmıştım fakat olmadı çok fazla ustunde duramadım. MikroC ve PIC18F4550 isimli kitapta anlatılıyor uygulamaları da mevcut fakat kıtapta pc tarafındaki kodlar c# ile yazılmış. kolay gelsin

Hattuşa

pic to pc işini işelmcinin RX, TX kanalından aşağı yukarı her işlemci ile yapabilirsiniz burada püf noktası converter entegren açıkcası ETE hocamın tavsiyesi ile direnç.netten FT232L modül almıştım, işimi görüyor tek sıkıntım aldığım modülün çıkışı mini USB olduğu için birde ara kablo kullanmak zorunda kaldım. ancak daha farklı kitlerin olduğunu ve kullanıldığınıda biliyorum. 4550 gibi dahili USB li piclerle çalışmadım çalışan arkadaşlar örnek verirlerse bizde bişeyler öğrenmiş oluruz. tabi birde bu işin PC tarafı var ki o kısmı henüz aşabilmiş değilim

hakerten

Arkadaşlar,

Konuyla belki ilgilenenler veya benzer bir sorunu yaşayanlar olabilir o yüzden yaşadığım sorunun devamını da yazmak istedim.

Daha önce bahsettiğim "tek pin girişli analog keypad" uygulamasında farklı zamanlarda farklı analog değerler okuma sorunumun çözülmemiş olduğunu farkettim.  Bunun üzerine internette biraz daha araştırma yaptım. Analog girişin voltaja bağlandığı noktaya en yakın yere bir decoupling kondansatör koymayı öneriyorlardı.  Elimdeki 10mF'lik kutuplu kondansatörü bir ucu breadboard'un artı girişine, diğerini eksiye girecek şekilde taktım.   Keypad kalibrasyonunu da baştan yaptım.  Şu anda son 1 saattir, oldukça tutarlı sonuçlar alıyorum.

Bilginize.

Hakan Erten

magic_gun

7805 seri regulatorun regulasyon yapabilmesi için giriş geriliminin min 8v olması gerekir diye dusunuyorum. giris gerilimini 10 v civarı tutarsan okudugun degerler adc hataları içinde kalacaktır,,,,
usb işlemleri hertürlü mcu için ETE ve pro tr hocamın dedigi  FT tarzı converterler ile yapılabilir
farklı bir bakış acısından neden extra komponent kullanayım ki internal usb destgi olan bir mcu kullanılabilir
saygılarımla
hayal etemeden basaramazsınız
u cnt achieve w/out dreamin

Powered by EzPortal