Buton

Başlatan vale9, 27 Nisan 2007, 08:20:06

vale9

48 tane butonum var ve bunların hangisinin basıldığını minimum maliyetle pic'e vermek istiyorum. Ben 6 tane 8 bit encoder kullandım, tabi 3 tane de or kapıpısı gitti. 9 adet 74xx entegre yapıyor. Ve 6 bit çıkışı pic'e veriyorum.

Daha pratik bir çözüm önerisi olan varmı?
Hayat 1'ler ve 0'lardan ibarettir.

Ersin

74LS165 kullan.Cogu compilerlar da bu entegre ile ornegi bulunmakta.

M_B

Arkadasım 8255 Entegresi de kullanabılırsın.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

ete

Bana kalırsa 3 adet 74150 kullanarak bu işi halledebilirsin.
Yapacağın iş 48 adet butonu her birinde 16 adet giriş olan 3 adet 74150 nin girişlerine bağla. 3 adet çıkışı ya bir or kapısına ve onun çıkışınıda pic'e ver yada doğrudan pic pinlerine bağla.
3 adet 74150 nin chip select uclarını pice gir. ABCD uçlarınıda pice gir.

0-15 arası say her sayıda ;
- 1. 74150 yi seç ve çıkışına bak şayet bu devreye bağlı butonlardan biri basılmış ise çıkış değişecektir. Sayı değeri sana buton numarasını verecektir.
- değişen bir şey yok ise 2. devreyi seç ve çıkışa bak aynı şeyleri 3. devre içinde yap.
- 15 sayısı içinde yaptıktan sonra tekrar baştan devam et. Böylece işlemi bitirmiş olursun.

Kullanılan pinlere bir bakar isek;
4 adet ABCD sayacı için
3 adet çıkışlar için
3 adet ship select için
olmak üzere toplam 10 adet pin gerekli. O halde 1 adet 16F628 bu iş için yeterli olur sanırım.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

cuneytsezmis1

bana kalsa 6 adet 74540 kullan derim.giriş ve çıkış pinleri hem sıralı.yada hiç başka entegre kullanmadan her butona 1n4148 kullanıp butonları matris bağlayarak ta çözebilirsin.her ikisinde de taratma mantığını ve bir değişkene yükleyerek halledebilirsin.tabi ete hocanın dediğinden biraz(1,5 katı) fazla pin kullanırsın.ama başka malzeme kullanmazsın.
6x8=48 giriş için 14pin

girişler için toplam 14 pin eder.
kolay gelsin.

vale9

Arkadaşlar teşekkür ederim. pic'i birçok şeyi yönetmesi için kullanıyorum, o yüzden tarama yaptıramam. Bahsettiğim devrede herhangi bir butona basıldığında interrupt veriyor ve pic de gidip hazır 6 bitlik veriyi alıyor. Bu işi 74148 yada  4532 ile yapıyorum.

74150'nin 16 bitlik olması avantaj ama mux tipinde olduğu için sürekli tek tek taratmam gerekiyor.

74165 hem 8 bitlik, hem de yine sürekli okuma yapmam gerekecek. Keza 74540 da öyle olacak sanırım.

8255'i de kullanmayı öğrenene kadar çok vaktim gidecek. Projeyi haftaya tamamlamam lazım :(

Napiyim ben şimdi?
Hayat 1'ler ve 0'lardan ibarettir.

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

cuneytsezmis1

sevgili vale9 , 48 butona interrupt nasıl yaptırıyosun öğrenmek maksadıyla soruyorum.

XX_CİHAN_XX

Alıntı yapılan: "cuneytsezmis1"sevgili vale9 , 48 butona interrupt nasıl yaptırıyosun öğrenmek maksadıyla soruyorum.
en basityöntem butonları diyot ile rb0 da toplamaktır.Herhang bşr butona basıldığı anda rb0 a giden buton sinyali interrupt oluşturur ve böylece istediğin kadar sayıda butonu tek kesmeden kontrol edebilirsin.Tabi kesme vektorunde butonları okumak için yukarıda bahsedilen yardımcı entgreler kullanmak gerekir.Ama interrupt mantığı dediğim şekilde kullanılabilir.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

vale9

4532 veya 74148 entegresinin "gs" isimli çıkışları var. 8 pinden birine basıldığında bu pinin lojik seviyesi değişiyor. 6 tane entegrenin gs çıkışlarını bi or kapısına verirsen oluyor. ;) Yada cihan'ın dediği yöntemle benimkini birleştirelim.

6 tane gs çıkışına or kapısına girmek yerine diyotlarla rb0 ucuna girince oluyor.
Hayat 1'ler ve 0'lardan ibarettir.

cuneytsezmis1

XX_CİHAN_XX hocam teşekkürler.kolay gelsin.