Tek Bir Analog Giriş ile 64+ Buton Sürmek...

Başlatan alayli, 14 Temmuz 2004, 16:36:22

alayli

Dostlar Merhaba;

Zaman zaman aklıma gelen ama denemeye fırsat bulamadığım (daha doğrusu üzerinde uzun uzun düşünemediğim) bir olay var.

Olay şu:

PIC'in sadece tek bir analog giriş pinini kullanarak çoklu buton sürmek... Düşününce teorik olarak 8 bit ADC'si olan bir PIC ve metal film dirençler yardımı ile 255 ayrı buton kontrolü mümkün görünüyor. Temel mantığımız farklı gerilim bölücüler ile analog girişe uygulanan gerilimi butonlar vasıtasıyla değiştirip bunu PIC'e okutup karar vermek üzerine kurulu. Hadi biz çözünürlüğü biraz aşağı çekelim pratikte 64 adet gibi bir rakama ulaşabiliriz gibi geliyor bana. Hatta bırakın 64'ü 32 buton bile bir çok uygulama için yeter de artar bile...

Benim hızlıca düşündüğümde aklıma ilk gelen şu soru var;

Birden fazla butona basılırsa ne olacak?

Yine aklıma ilk gelen cevaplar:
1-Hangi butonlara basıldığına göre ne olacağı değişir,
2-Basılı olan butonların kombinasyonu başka bir butonun simulasyonunu yapar,
3-Basılı olan butonların kombinasyonu ADC'de ölü bir değere isabet eder.

Sonuncusu en iyi ve işimize gelen ihtimal. Öyle bir düzenek hazırlayalım ki birden fazla butona basıldığında gerilim bölücülerin çıkışındaki gerilime tekabül eden dijital değer PIC tarafından işleme tabi tutulmasın.

Kullanıcıya; bir defada sadece tek bir butona basmasını tembih edip, "Aksi durumda cihaz sapıtırsa sorumluluk kabul edilmez!.."  :D demek en iyi çözüm gibi görünse de bu konudaki değerli fikir ve yorumlarınızı merakla bekliyorum.

Not: Bu tarz uygulamalara eskiden deck teyplerde ve bazı araba teyplerinde rastlamıştım. Ama birden fazla butona basıldığında aletler tepki vermiyor idi. Yani bu olay mümkün. Ama nasıl? Gelin cevabı birlikte bulmaya çalışalım.
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

cozturk

ya her butona basıldığında analog değere ilaveten bir buton basıldı bilgisi üretilecek. bu 1se diğerleri  okunmaz. ama bu olmaz. Ya da her halde ilk önce sadece 1i basılır. çünkü insanın reaksiyon süresi mSden daha hızlı değil. İlk okunandan sonra tuş bırakılana kadar artık okuma yapılmayacak.
http://www.elecdesign.com/Articles/ArticleID/3560/3560.html
http://www.reed-electronics.com/ednmag/index.asp?layout=article&articleId=CA286249

alayli

Bu küçük ama faydalı şema için teşekkürler cozturk. Anlatmak istediğim tam olarak da buydu. Ama daha fazla buton ve direnç içereni...

Ama diyelim ki kullanıcı çok hıyar... Cihaza enerji vermeden önce birden fazla butona bastı. Sonra enerji verdi. ADC yine olması gerekenden başka bir değeri okuyacak. Evet arkadaşlar yorumlarınız... Beyin fırtınasına devam...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

cozturk

enerji verilirken en az bir tuş basılı ise  prog. tuş bırakılana kadar bekleyecek. ya da başka bir iş yapacak. klavye okumayacak. ya da düdük çalacak. :D

DumrulBey

Merhaba,

Bence bu iş DTMF mantığıyla yapılabilir. Yani gerilimle beraber bir de frekans değerlerini karıştırırsak belli frekanslar aralığındaki bilgiyi kabul eder veya etmeyiz.

Bildiğimiz telefonlarda kullanılan tuş takımını incelerseniz, her sütun ve satıra düşen belli bir frekans olduğunu görürsünüz. Frekansların toplamlarıyla elde edilecek işaret bize veri olarak gelir. Bunların içinden tek tuş kombinasyonlarını kabül edersek birden fazla tuşa basma durumunu gözardı edilmesini sağlarız. Nitekim DTMF mantığı da aynı şekilde işliyor.

Aklıma bunun dışında her birim için transistör kullanmak geliyor. Mesela transistörlerin beyzine (baz) bir direnç ile bağlı düğmeler (button), o hattı iletime soksa. Ama düğmelerin ortak bacaklarına bağlı olan gerilim (~1 volt) tek bir transistörü iletime sokacak kadar olsa. Dolayısıyla birden fazla düğmeye basılınca, birden fazla transisör doyuma ulaşamayacatır.

Bunlar dışına başka aklıma bir şey gelmiyor. Ancak böyle pasif elemanlar ile uğraşılacağına hep söylerim, 2-3 milyon lira verip AT89C51 (Atmel 8051 mimari mikrodenetleyicisi) alırsanız, başka bir mikrodenetleyiciye seri iletişimle 32 adet girişli birim elde edebilirsiniz. Küçük bir hesapla her birimin maliyeti 100 bin bira olur ki bugün bu bedele birer tane transistör ve direnç ancak alıyorsunuz. Tabi giriş sayısı çoksa daha da mantıklısı FPGA (Field Programmable Gate Arrays) kullanmak.

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

fsan

Alıntı yapılan: "alayli"Kullanıcıya; bir defada sadece tek bir butona basmasını tembih edip, "Aksi durumda cihaz sapıtırsa sorumluluk kabul edilmez!.."  demek en iyi çözüm gibi görünse de bu konudaki değerli fikir ve yorumlarınızı merakla bekliyorum.

usta buttonlar kaliteli tipten olursa belki su sekilde olabilir:

sistemi yaptiktan sonra buttonlara tek tek basip elde ettigin degerleri (mesela bir LCD ekranda) okuyup ögrendikten sonra (mesela eeproma) kayit et. (her button icin ayri bir deger)

sistem calisirken buttondan gelen degeri sirayla (eepromdaki) kayit ettigin degerlerle karsilastir, (deger +/- Xx) uyum yoksa, "YANLIS BUTTON" yazdirirsin..

belki konuyu yanlis anlamis olabilirim ama buda benim fikrim :)

Veli B.

Üstat değer neyi kastettiğini tam anlayamadım. :(

fsan

@katana
kardes, yukarida cozturk arkadasin verdigi semada "KEY" yazan yer PICin analog girisine baglaniyor.. buttonlardan birine basilinca bu giristeki olusan gerilimi ADC ile okutmak.. (voltmeter gibi)

Yahoo! Groups da  "Yıldırım Ak" arkadasin "Tek porttan 16 lı Tuş takımını okuma" adinda yaptigi güzel bir örnek var  burada biryerlerde de olacakti ama bulamadim..

http://groups.yahoo.com/group/PicProjeUP1/files/ - (Tusoku.zip)

hamit

evet arkadas bu mantıklı bır olay bole bır sıstemı bende kullanmıstımm
ama bırde su gercek varr ne kadar metalfılm dırec te kullansanız bır hata olayı var..

ısı faktoru ortam gurultusu sebeke pıclerı daha bır çok faktor bunlara bır tolarans la bakmak lazım

bunu ne kadar asagıya çekebılızz toleransı asagıya cektıkce rısk artıyor ama su bır gercek 250 mılıvoltun altına ındıgınız zaman ne yaparsanız yapın sorunlar çıkıyor...

bu yuzden su anolog olayıı çogu arkadaslara sac baş yolduruyorr

en dogrusu dırek dıjıtal bılgı 1 veya 0 zaten bu dıgıtal olayıda bu yuzden bu kadar gelışmedımı...

bırılerı acımıs artıkk bızım halımıze  ( tabii kendım ıcın konusuyorumm) sacımızı basımızı yoluyoruz yıllardır analogla hep sorun hep sorun

analogta bır hassas calısma yapın ve 10 adet ayrı kartı mote edın bakalım kactanesı dırek sonuc verecek ben cok yaptım her karta ayrı ozen gostermek zorundasınız .......

ama nede olsa o bızım goz arımız gozde bırakmadı bızde artık yaaa

bence analog'u gerektıgı kadar kullanın dıgıtal'in yetersız kaldıgı ender durumlarda bırıkıtane entegre devreden kacmayınn....

ama vaktınız varsa anologla bolca urasın belkı çok acız kaldıgınız durumlarda sızın can sımıdınız olabılırr..

herkeze selamlar ve ıyı çalısmalar

Erol YILMAZ

Analog tus takimi olayini bende kullandim.
Hersey Proteus taki gibi olmuyor. Araligi genisletmek gerekiyor.
Cok tus kullaniliyor ise bu is biraz zor.
Bence, cok tus kullanilacak ise 54 serisi ile tarama yaptirilip gerektigi zaman bilgi 232 gibi gonderilmeli.

fsan

Alıntı yapılan: "Erol"Bence, cok tus kullanilacak ise 54 serisi ile tarama yaptirilip gerektigi zaman bilgi 232 gibi gonderilmeli.

dogru arkadas, mutlaka 64 button olacaksa bunlari bir matrix seklinde baglayip ROW/COL scan metodu ile yapmakdaha iyi olur..

bu linkte görüldügü gibi..
http://www.elabinc.com/ede1188.pdf

böyle bir seyi linkteki entegreden örnek alarak bir (16f84) ve 74hc164 ile kendimizde yapabiliriz istersek..  
(keypad baska bir sisteme baglanacaksa bir interrupt signal da uretmek gerekir)

cozturk

Arkadaşlar, nasıl artık lcd displayleri sürmeye uğraşmıyor, dışarıdan bir protokol ile kumanda ediyorsak, sanırım bu tip klavyeler için de hap gibi bir çip vardır. Yoksa da preprogrammed pic yaypıp satmak yakışır. Ya da pc klavye çsistemi çok ideal. bunu picle okumak zor değilmiş. Projeye pc klavye bağlasak da olur. Fakat duvarda durması gerekiyorsa?

z

Analog giriş yerine digital tek bir pin ilede çok sayıda butonu okuyabilirsiniz.

555 yada bir başka basit bir devrenin OSC frekansını belirleyen R yada C değerleri butonlarla değiştirilir ve OSC nin ürettiği pulsların süresi basılan tuşa göre değişmiş olur.

İşlemcinizin basılan tuşu öğrenmesi için pulsların peryodunu ölçmesi yeterli olacaktır.

İnternette gezerken 555 ile bu tip bir çalışmayı gördüğümde çok hoşuma gitmişti. Özellikle klavye ile işlemcinin uzak olduğu uygulamalarda bu yöntem, kablo sayısının azalmasından dolayı avantajlı hale geliyor.

Harici bir çip kullanmadan da bu iş yapılır. İşlemci portundan sıra ile 1 ve 0 çıkartır ve RC devresinin gecikmesinden dolayı bir başka pinle bu sinyal gecikmeli olarak okunur. Gecikme süresi tespit edilerek basılan tuş anlaşılır.

İster ADC isterse bu yöntemi kullanın, çok sayıda tuş okumada
elbette sıkıntı çıkacağı açıktır.

Örneğin 8 bit ADC ile birer bit artımlara neden olacak 255 adet direnç değeri kolaylıkla yanlış ölçümden dolayı hatalı tuş algılamasına neden olacaktır. Bu nedenle de direnç değerleri arasında belirgin farklılıklar oluşturup 8 bit lik 256 alanına aralıklar koyup örneğin 64 yada 32 tuş okumakta fayda var.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

alayli

Dostlar;

Katılımınız ve değerli yorumlarınız için teşekkürler. Yorumlarınızı şöyle bir değerlendirdiğimde galiba şu sonuçlar ortaya çıkıyor.

1- Böyle bir ihtiyaç varsa analog girişli butonlara hassas uygulamalarda pek güvenmemek lazım.

2-Bu tarz bir uygulama için proje maliyetini çok arttırmayacak ise veya projenin getirisi yüksekse bu işe özel extra analog (hassas ve kaliteli butonlar)  veya dijital component (özel klavye IC vb.) kullanmak lazım.

3-0-5 volt arası bir analog okumada çözünürlüğü mümkün mertebe düşük tutmak sistemin başarısını ve güvenilirliğini arttıracaktır.

Ama ben yine de bazen bu analog girişin çok yararlı olabileceğini düşünüyorum. Mesela;

Önceden yapıp bitirdiğiniz 22 I/O'ya sahip 16F7x veya 126F87x üzerine kurulu bir projeniz var. Bu projede tüm pinleri kullanmışsınız. Sonradan bir takım ek özellikleri bu projeye eklemek yani ÜR-GE yapmak niyetindesiniz. Bu bağlamda sisteme n (1,2,3) adet buton eklemeniz gerekti ve kullandığınız PIC'in program ve data hafızası ile ilgili bir sorununuz yok.  Ama giriş-çıkış pinleriniz yetmiyor. Sanırım böyle bir durumda 33 pinli bir PIC kullanmak yerine bu başlık altında tartıştığımız sistemi kullanmak daha mantıklı olacaktır.

64+ buton olayı bana gerektiği için değil beraberce tartışalım diye rastgele yazılmış bir şeydi. Bu konuda da yanlış anlaşılma olmasın...
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

rf

KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/