İki tuşa aynı anda basma

Başlatan blueboard, 07 Ocak 2015, 11:08:28

blueboard

Ete Hocam,size göre basit ama benim içinden çıkamadığım bir sorun var.Özetle şöyle:
Tuş kontrolünde tuşlar RB0 ve RB1 pinlerine bağlı ve tuşlara basılınca ilgili  pinler LOW oluyor.Normalde RB0 low olduğunda RC.1 high oluyor, RB.1 low olduğunda ise RC.2high oluyor. Ben aynı zamanda RB.0 ve RB.1 tuşlarına aynı anda basıldığında ise RC.3 pini high olsun istiyorum. Forumda bu konu ile ilgili benzer bir şey yazmışsınız ama ben mantığını çözemedim.

Sizin bu işleyiş ile yazdıklarınız şunlar:
"Tuş kontrolünde iki tuşun aynı anda basılması ile ayrı ayrı basılmaları farklı olaylardır ve bu basit bir mantıkla kolaylıkla yakalanabilir.
Tuşlar PORTB.4 ve PORTB.5 de bağlı iseler ve tuşlara basılınca ilgili pinler LOW oluyor ise;
TUSLAR=(PORTB & %00110000)>>4  ,  komut satırı ile tuşların durumu okunabilir.
TUSLAR=3 ise hiç birisi basılmamış
TUSLAR=2 ise yalnızca PORTB.4 basılı
TUSLAR=1 ise yalnızca PORTB.5 basılı
TUSLAR=0 ise her ikiside basılı demektir.

Geriye basılan tusa göre işlem yaptırmak kalır."
Bu mantığa göre benim sorunun çözümü nasıl olur? Tuslar= var byte şeklinde tanımlama yapıyorum. Tuslar değerinin 0-1-2-3 'e göre tespitini nasıl yapıyoruz? Teşekkürler.

ete

Senin sisteme göre düşünürsek;
TUSLAR=PORTB & %00000011
Hiç bir tusa basılmamış ise TUSLAR=3 dür. (Pullup lardan dolayı)
PORTB.0 daki tusa basılmış ise TUSLAR=2 dir (Portb.0=LOW olacak ve PORTB.1=HIGH da kalacağı için)
PORTB.1 deki tusa basılmış ise TUSLAR=1 olacaktır. benzer sebeplerden dolayı
Her iki tuşa birden basılmış ise TUSLAR=0 olacaktır.

Ete

blueboard

#2
Ete Hocam, yardımınız için teşekkür ederim. Müsadenizle son bir şey sormak istiyorum. Size gönderdiğim örnekte son dört bit kontrol ediliyordu ve sanırım bundan dolayı "(PORTB & %00110000)>>4" olarak  verilmişti. Benim sistemde ise ilk dört bit kontrol edileceğinden     
"TUSLAR=PORTB & %00000011<<4"  şeklinde mi yazmam gerekiyor.Teşekkürler.

ete

8 bitlik port üzerinde kontrol edeceğin 2 pinin yerine bağlı olarak kullanım şekli değişiyor bu sistemin.
Oradaki örnekde PORTB.4 ve PORTB.5 de bağlı iki pin e buton bağlı idi. Bu durumda formül;
TUSLAR=(PORTB & %00110000)>>4 şeklinde kullanmış idim. Sebebi şu.
PORTB.4 ve PORTB.5 deki iki pinin değeri tuşa basılmadığı zaman 32+16=48 dir. Bunu 4 bit sağa kaydırırsan 48 değeri yerine 3 okursun. Anlaşılması kolay olsun diye okumadan sonra bitleri kaydırarak anlaşılmasını kolaylaştırmış oldum.
Bit kaydırma kullanmasaydım ;
- Tuşlara basılmamış ise TUSLAR=48
- PORTB.4 deki tuşa basılmış ise TUSLAR=32
- PORTB.5 deki tusa basılmış ise TUSLAR=16
- Tusların ikisinede basılmış ise TUSLAR=0 olacak idi.

İlk 4 bit yada son 4 bit diye bir şey yok. Yapman gereken tus olarak kullanılan bitleri ayıklamak onuda %00000011 yapmaktadır Tuslar hangi bitlerde bağlı ise onları HIGH yapıyorsun yanızca. Bu durumda İki tusa birden basılmış ise PORTB=%00000000 olacak bununla %00000011 sayısını AND işlemine tabi tutarsak
%00000000
%00000011
--------------
%00000000  elde edilecektir.  Bu iki tuşa birden basılmış durumu yansıtır.
PORTB.0 daki tuşa basılmış ise;
%00000010
%00000011
--------------
%00000010  yani 2 sayısını göreceğiz demektir.

Umarım anlamışsındır.

Ete



blueboard

Teşekkür ederim.Şimdi çok daha iyi anladım.

Powered by EzPortal