16 düğme sadece 8 kabloyla nasıl bağlanabilir?


9

İşte ürün. Bu fikri anlıyorum: Bu 16 düğme 4x4 matris kullanıyor. Satırlar için 4 satır, sütunlar için 4 satır ve 8 kablo var.

resim açıklamasını buraya girin

Fakat:

  1. Bu herhangi bir çoklayıcı olmadan nasıl çalışır?

  2. Bu, çoklu düğmelere doğru basıldığını algılayabilir mi? Düğmeler aynı satırı veya sütunu kullanıyor olsa bile? Örnek: (2,2) (2,3), (3,2) ve (3,3) konumlarındaki düğmelere aynı anda basılır.

  3. O nasıl çalışır?


7
Google'da 'tuş takımı çoğullama' veya benzeri bir şey ararken bulacağınız yaygın bir bilgidir. Bunu göndermeden önce ilk olarak denemedin mi?
TonyM

3
@TonyM Tabii ki birçok arama yaptım ve birkaç gün önce eve gelen birkaç çoklayıcı çip 74HC164 bile sipariş ettim. Bunu bulduğumda her şeyi bu çoklayıcı çip ile bağlamak üzereydim. Sonra "bu çoklayıcı olmadan nasıl çalışabilir" diye merak ediyordum.
17'de Basj

1
Soldaki cihazın içinde bir çoğullama kodu olmalıdır
Marcelo Espinoza Vargas

3
@TonyM Bunu işaret ettiğin için teşekkürler. Bir gizem yapmak yerine PDF'yi bağlayabilir misiniz;)? Belki tuş takımı vb. Dışındaki anahtar kelimelerle arama yaptım ve muhtemelen aynı şeyi bulamadım.
17'de Basj

1
@Basj: Birden fazla baskı yapmak sorun değil. Dört çizgiyi de birbiri ardına tararsınız. Satır 1'de bir düğmeye basılırsa, not edin. 3. satıra gelince, orada başka bir düğmenin basılı olduğunu görüyorsunuz, bunu da not ediyorsunuz. Sonunda, her iki düğmeyi de alırsınız. İnsanların düğmelere basabileceğinden çok daha hızlı tarama yapabildiğiniz sürece kaçırmayacaksınız.
Gabor

Yanıtlar:


24
Bu herhangi bir çoklayıcı olmadan nasıl çalışır?

Öyle değil. Tuş takımı panosunda sadece anahtarlar var, belki göremediğimiz bazı diyotlarla. Ancak, sol kartta bir işlemci varmış gibi görünüyor. Kesinlikle, ürün yazılımında çoklama yapılır.

Çoğullama algoritması şu şekilde çalışır:

  1. Bir satır yüksek, diğerleri düşük sürün.

  2. Sütun satırlarında pasif açılır pencereleri etkinleştirin.

  3. Hangi sütun satırlarının yüksek olduğunu görün. Bir sütun satırı ile bu sütun çizgilerinin kesişme noktalarındaki düğmelere basılır. Bu satırdaki diğer düğmeler serbest bırakılır.

  4. Sonraki satırı sırayla söyleyerek birinci adıma tekrarlayın.

Yukarıdaki işlem yeterince hızlı bir şekilde tekrarlanır, böylece tüm düğmeler bir insan gözlemciye hala anlık hisseden bir süre içinde kontrol edilir. Bu bağlamda "anlık" insan sınırı yaklaşık 50 ms'dir. Düşük uçlu bir mikro denetleyici bile 4x4 tuş takımını bundan daha kısa sürede tarayabilir.

Bu, çoklu düğmelere doğru basıldığını algılayabilir mi?

Muhtemelen evet. Bunun bir yolu, her düğmeyle seri olarak bir diyot koymak. Bunlar gösterdiğiniz tahtanın alt tarafında olabilir. Diyotlarda, yukarıda açıklanan algoritma çalışır.

Diğer bir yol, dirençleri hatlarla seri hale getirmek ve analog voltajlarını ölçmektir. Birden çok satır / sütun satırını birlikte kısaltan birden fazla düğme olsa bile, sonunda hangi düğmelere basıldığını anlayabilirsiniz. Bu, sadece diyotların kullanıldığı gibi dijital girişleri değil mikroda A / D girişlerini gerektirir.


1
Teşekkürler. Peki aynı anda birden fazla baskıya ne dersiniz? Not: sol kart bir RaspberryPi'dir.
17'de Basj

1
@Hayman neden böyle? Bir örnek verebilir misin? Diyot olmadığında (1,2), (2,2) ve (3,3) 'e neden aynı anda basılır? Belki küçük bir şemanız olur mu? Bu nokta gerçekten çok önemli olduğundan, belki de @Hayman'a özel bir cevap vermeye değer mi?
17'de Basj

8
+1 için "sol kart üzerinde bir işlemci var gibi". Çok sevdim.
Enric Blanco

3
@Basj onunla oynarsanız açıktır. Bir düğmeye her bastığınızda, bir sütuna bir satır bağlarsınız. Bir satır ve sütun her bağlandığında, kavşaktaki anahtar basıldığı şekilde kaydedilir. Ancak en az 3 tuşa basılırsa, bir satır ve bir sütun dolaylı olarak bağlanabilir .
hobbs

2
@Basj Bu resme bir göz atın . Kırmızı çizgiler yüksek bir mantık seviyesini gösterir. 'X' ile gösterilen 3 düğmeyi basılı tutarsanız, bunları izleyebilir ve sinyalin akacağı yolu görebilirsiniz. İlk olarak 1. sıra seçilir ve yüksek ayarlanır, 1,1 düğmesine basıldığında ilk sütun yüksek olur. 1,2 düğmesine basarak şimdi sıra 2'yi yükselttik. Şimdi 2. sıradaki herhangi bir düğmeye basarsak, başka bir sütunu yükseltiriz. Bununla ilgili sorun, μC'nin aptal olması, satır 1'i yüksek ayarladığını ve sütun 3'te yüksek gördüğünü biliyor, bu nedenle 1,3 düğmesinin yüksek olduğunu düşünüyor
Doodle

9

Diyot olmadan ... hayalet dikdörtgenler elde edersiniz.

Örneğin, örneğinizde (2,2) (2,3), (3,2) ve (3,3); bir dikdörtgen seçerek ironik bir örnek seçtiniz. Eğer varsa aslında tüm dörde bas, işe yarayacak. Ancak, dikdörtgenin herhangi bir üç köşesine basarsanız, dördüncü köşeye de basılmış gibi görünecektir .

Bu tuş takımı, kullanıcı kuralının her seferinde bir tuşa basıldığı klavye veri girişi için açıkça tasarlanmıştır. Örneğin, bir benzin istasyonu kredi kartı giriş tuş takımında "üst karakter" tuşu olmadığını fark edersiniz.

Bununla birlikte, S1'i bir shift tuşu ve S3'ü bir alt-shift tuşu yaptıysanız, kullanıcılar S13'e basarken her ikisini de makul bir şekilde tutabilecekse, S15'e de basıldığı görülecektir.


1
Gerçekten de, çoğu veri giriş klavyesinde aynı anda 2'den fazla tuşa basılması amaçlanmamıştır, bu nedenle sorun yoktur. Müzik klavyeleri başka bir hikaye, çünkü aynı anda birçok tuşa basılabilir. Birçoğunda diyotlar veya her bir tuşa bağımsız kablolama vardır. Ancak, bir kerede basılan birden fazla tuş için uygun bir uyarlaması olmayan, öngörülemeyen ve can sıkıcı sonuçlarla ikinci bir dükkanda (9 avro fiyatla) bir müzikal klavye buldum!
Level River St

Anahtarlı anahtarlar yerleşik diyotlu tipte olabilir veya altında gizli diyotlar olabilir.
rackandboneman

1

Sürekli tarama olmadan nasıl yapacağınız aşağıda açıklanmıştır:

  • Tüm sürücüleri yüksek olarak ayarla
  • Alıcı hatlarda pasif açılır pencereleri etkinleştir
  • Satırlardan birinin yükseldiğini (veya düzey değiştirdiğini) tespit etmek için pim değiştirme kesintisini ayarlayın
  • Bu olduğunda, tuş takımı taramayı etkinleştirin, her 10 ms'de bir
  • Normal tarama ve tuş basma işlemlerini yapma
  • Olaysız bir zaman aşımından sonra taramayı durdurun ve ilk madde işareti noktasında yeniden başlatın

0

Bunu çıplak Atmel AVR mikrodenetleyicilerinde Montaj Dili ile yaptım.
Basitlik için: Tuş Takımı Satırları: 4,5,6 ve 7 Arduino Pinlerini kullanın (AV4 pinleri PD4, PD5, PD6 ve PD7) Tuş Takımı Sütunları: Arduino Pinlerini 8, 9, 10 ve 11 kullanın (AVR pinleri PB0, PB1, PB2 ve PB3 ) Pull-up etkinken Row pin girişlerini yapın. Sütun pimlerini yapın Çıktı ve çıktı sıfırları. Tüm satır ve sütun iğnelerinde Pin Değiştirme Kesmelerini Etkinleştir. http://playground.arduino.cc/Main/PinChangeInterrupt Tuş takımındaki bir düğmeye basıldığında Satır iğnesi alçak olur. Kesme rutininin sıra pimlerini okuması ve hangi pimin düşük olduğunu bulması gerekir. Üst 4 bit üç ve bir sıfır olmalıdır. Bir uint8_t 8 bit değişkeni kullanıyorsanız, 4 biti sayının alt bitlerine koymak için 16 veya (var >> 4) ile bölebilirsiniz. Bitsel olarak VEYA | üst 4 biti 1s'ye ayarlamak için 240 ve bitleri DEĞİL olarak değiştirmek için ~ düğmesine basın, böylece düğmeye bastığınız satırı temsil eden tek bir bitiniz olur. Bu numarayı 0, 1, 2 veya 3 olarak
kaydedin. Pim yapılandırmasını değiştirin:
Pull-up etkinken Sütun pimleri girişlerini yapın. Satır pinlerini yapma Çıktı ve çıktı sıfırları. Sütun pimlerini okuyun ve hangi pimin düşük olduğunu bulun. Sayıyı sağa kaydırmanız gerekmediği sürece bu değerle benzer bir manipülasyon yapın. Var ^ 240 ve ^ var'dan sonra, tuşa basmanın açık olduğu sütunu temsil eden tek bir bitiniz var. Bağlantı noktalarını yeniden yapılandırmadan önce kesintileri devre dışı bırakmayı unutmayın, çünkü istenmeyen kesintileri tetikler. Yinelenen kesme işlemeyi önlemek için kesme yordamından ayrılırken kesme bayraklarını temizlemeniz gerekebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.