Làm thế nào 16 nút có thể được kết nối chỉ với 8 dây?


9

Đây là sản phẩm. Tôi hiểu ý tưởng: 16 nút này sử dụng ma trận 4 x 4. 4 dòng cho hàng, 4 dòng cho cột và chúng tôi có 8 dây cáp.

nhập mô tả hình ảnh ở đây

Nhưng:

  1. Làm thế nào điều này có thể làm việc mà không có bất kỳ bộ ghép kênh?

  2. Điều này có thể phát hiện chính xác nhấn của nhiều nút? Ngay cả khi các nút sử dụng cùng một hàng hoặc cùng một cột? Ví dụ: các nút ở vị trí (2,2) (2,3), (3,2) và (3,3) được nhấn cùng lúc.

  3. Làm thế nào nó hoạt động?


7
Đây là kiến ​​thức phổ biến mà bạn sẽ tìm thấy với một tìm kiếm Google cho 'ghép kênh bàn phím' hoặc tương tự. Bạn đã không thử điều đó trước, trước khi đăng bài này?
TonyM

3
@TonyM Tất nhiên tôi đã làm, nhiều tìm kiếm, và tôi thậm chí đã đặt mua một vài chip ghép kênh 74HC164 đã đến nhà vài ngày trước. Tôi chuẩn bị kết nối mọi thứ với chip ghép kênh này khi tôi tìm thấy nó. Sau đó, tôi đã tự hỏi "làm thế nào điều này có thể làm việc mà không có bất kỳ bộ ghép kênh"?
Basj

1
Thiết bị bên trái phải có mã ghép kênh bên trong nó
Marcelo Espinoza Vargas

3
@TonyM Cảm ơn bạn đã chỉ cho tôi điều này. Bạn có thể liên kết PDF thay vì làm một bí ẩn;)? Có thể tôi đã tìm kiếm với các từ khóa khác ngoài bàn phím, v.v. và có lẽ tôi đã không tìm thấy điều tương tự.
Basj

1
@Basj: có nhiều lần nhấn không phải là vấn đề. Bạn quét tất cả bốn dòng lần lượt. Nếu một nút được tìm thấy được nhấn trong dòng 1, bạn lưu ý nó. Khi nói đến dòng 3, bạn tìm thấy một nút khác được nhấn ở đó, bạn cũng lưu ý nó. Cuối cùng, bạn nhận được cả hai nút. Miễn là bạn có thể quét nhanh hơn đáng kể so với mọi người có thể nhấn nút, bạn sẽ không bỏ lỡ nó.
Gábor

Câu trả lời:


24
Làm thế nào điều này có thể làm việc mà không có bất kỳ bộ ghép kênh?

Nó không. Bảng bàn phím dường như chỉ có công tắc, có thể một số điốt chúng ta không thể nhìn thấy. Tuy nhiên, bảng bên trái trông giống như nó có bộ xử lý trên đó. Hầu như chắc chắn, ghép kênh đang được thực hiện trong phần sụn.

Thuật toán ghép kênh hoạt động giống như thế này:

  1. Lái một hàng cao, những hàng khác thấp.

  2. Cho phép kéo xuống thụ động trên các dòng cột.

  3. Xem những dòng cột cao. Các nút tại các giao điểm của các dòng cột đó với một dòng hàng được khẳng định được nhấn. Các nút khác trên hàng đó được phát hành.

  4. Lặp lại quay lại bước một, khẳng định hàng tiếp theo theo thứ tự.

Quá trình trên được lặp lại đủ nhanh để tất cả các nút được kiểm tra trong một thời gian mà vẫn cảm thấy tức thời đối với người quan sát. Giới hạn con người của "tức thời" trong bối cảnh này là khoảng 50 ms. Ngay cả một bộ vi điều khiển cấp thấp cũng có thể quét bàn phím 4x4 trong thời gian ngắn hơn nhiều so với điều đó.

Điều này có thể phát hiện chính xác nhấn của nhiều nút?

Chắc là đúng. Một cách là đặt một diode nối tiếp với mỗi nút. Những người có thể ở phía dưới cùng của bảng bạn hiển thị. Với các điốt, thuật toán được mô tả ở trên chỉ hoạt động.

Một cách khác là bằng cách đặt các điện trở nối tiếp với các đường dây và đo điện áp tương tự của chúng. Ngay cả với nhiều nút rút ngắn nhiều dòng hàng / cột với nhau, cuối cùng bạn cũng có thể tìm ra nút nào được nhấn. Điều này đòi hỏi đầu vào A / D trong micro, không chỉ đầu vào kỹ thuật số như khi điốt được sử dụng.


1
Cảm ơn. Thế còn nhiều máy ép cùng lúc thì sao? Lưu ý: bảng bên trái là RaspberryPi.
Basj

1
@Hayman tại sao lại như vậy? Bạn có thể đưa ra một ví dụ không? Tại sao (1,2), (2,2) và (3,3) được nhấn cùng lúc là một vấn đề khi không có diode? Có lẽ bạn sẽ có một sơ đồ nhỏ? Vì điểm này thực sự quan trọng, có lẽ nó đáng để trả lời tận tình @Hayman?
Basj

8
+1 cho "bảng bên trái có vẻ như có bộ xử lý trên đó". Yêu lắm.
Enric Blanco

3
@Basj rõ ràng nếu bạn chơi với nó. Bất cứ khi nào bạn nhấn một nút, bạn đang kết nối một hàng với một cột. Bất cứ khi nào một hàng và một cột được kết nối, phím tại thanh ghi giao cắt được nhấn. Nhưng nếu ít nhất 3 phím được nhấn, một hàng và một cột có thể được kết nối gián tiếp .
hobbs

2
@Basj Có một cái nhìn vào hình ảnh này . Các đường màu đỏ chỉ mức logic cao. Nếu bạn giữ 3 nút được chỉ định bằng 'x', bạn có thể theo dõi chúng và xem đường dẫn tín hiệu sẽ chảy. Hàng đầu tiên được chọn và được đặt ở mức cao, bằng cách nhấn nút 1.1, điều này làm cho cột đầu tiên cao. Bằng cách nhấn nút 1,2, chúng ta đã tạo được hàng 2 cao. Bây giờ nếu chúng ta nhấn bất kỳ nút nào khác trên hàng 2, chúng ta sẽ làm cho cột khác cao. Vấn đề với điều này là μC bị câm, nó biết nó đặt hàng 1 cao và nó thấy mức cao trên cột 3, do đó, nó nghĩ rằng nút 1,3 là cao
Doodle

9

Không có điốt ... bạn sẽ có được hình chữ nhật ảo.

Ví dụ trong ví dụ của bạn (2,2) (2,3), (3,2) và (3,3); bạn đã chọn một ví dụ mỉa mai bằng cách chọn một hình chữ nhật. Nếu bạn thực sự nhấn cả bốn, nó sẽ hoạt động. Nhưng nếu bạn nhấn bất kỳ ba góc của hình chữ nhật, góc thứ tư cũng sẽ xuất hiện để được nhấn, mặc dù không.

Bàn phím đó rõ ràng có nghĩa là để nhập dữ liệu bàn phím, trong đó quy ước người dùng là một lần nhấn phím cùng một lúc. Chẳng hạn, bạn nhận thấy không có phím "shift" trên bàn phím nhập thẻ tín dụng của trạm xăng.

Tuy nhiên, nếu bạn tạo cho S1 một phím shift và S3 là một phím thay thế để người dùng có thể giữ cả hai một cách hợp lý trong khi nhấn S13, thì S15 cũng sẽ được nhấn.


1
Thật vậy, hầu hết các bàn phím nhập dữ liệu không có ý định nhấn nhiều hơn 2 phím cùng một lúc, vì vậy không có vấn đề gì. Bàn phím âm nhạc là một câu chuyện khác, vì nhiều phím có thể được nhấn cùng một lúc. Hầu hết trong số họ có điốt hoặc dây độc lập với mỗi phím. Nhưng tôi đã tìm thấy một bàn phím âm nhạc trong một cửa hàng đồ cũ (giá 9 euro) mà không có bất kỳ sự điều chỉnh thích hợp nào cho nhiều phím được nhấn cùng một lúc, với kết quả không thể đoán trước và gây khó chịu!
Cấp sông St

Các keyswitch có thể thuộc loại có diode tích hợp hoặc có thể có các điốt ẩn bên dưới chúng.
rackandboneman

1

Đây là cách thực hiện mà không cần quét liên tục:

  • Đặt tất cả trình điều khiển lên cao
  • Cho phép kéo xuống thụ động trên các dòng nhận
  • Đặt ngắt thay đổi pin để phát hiện một trong những dòng lên cao (hoặc thay đổi mức)
  • Khi điều này xảy ra, cho phép quét bàn phím, cứ sau 10ms
  • Quét bình thường và xử lý các lần nhấn phím
  • Sau khi hết thời gian không có sự kiện, dừng quét và khởi động lại ở điểm đầu tiên

0

Tôi đã thực hiện điều này với Ngôn ngữ hội trên các bộ vi điều khiển Atmel AVR trần.
Để đơn giản: Hàng Bàn phím: sử dụng Cột Arduino 4,5,6 và 7 (Chân cắm PD4, PD5, PD6 và PD7) Cột bàn phím: sử dụng Chân Arduino 8, 9, 10 và 11 (Chân AVR PB0, PB1, PB2 và PB3 ) Tạo đầu vào chân Row với kích hoạt pull-up. Tạo các chân cột Đầu ra và đầu ra cho chúng. Bật Ngắt thay đổi pin trên tất cả các chân hàng và cột. http://playground.arduino.cc/Main/PinChangeInterrupt Nhấn một nút trên bàn phím sẽ kéo pin Row xuống thấp. Thói quen ngắt cần đọc các chân hàng và tìm chân nào thấp. 4 bit trên phải là ba bit và một zero. Nếu bạn sử dụng biến 8 bit uint8_t, bạn có thể chia nó cho 16 hoặc (var >> 4) để đặt 4 bit ở các bit thấp hơn của số. Bạn có thể sử dụng bitwise OR | hoạt động với 240 để đặt 4 bit trên thành 1s và thao tác KHÔNG ~ bit để đảo ngược tất cả các bit để bạn chỉ có một bit được biểu thị cho hàng mà nút nhấn được bật. Lưu số này là 0, 1, 2 hoặc 3.
Chuyển cấu hình pin:
Tạo chân cột đầu vào với pull-up được kích hoạt. Tạo các chân Row Đầu ra và đầu ra 0 cho chúng. Đọc các chân cột và tìm pin nào thấp. Thực hiện một thao tác tương tự với giá trị này ngoại trừ bạn không phải chuyển số sang phải. Sau var ^ 240 và ^ var, bạn có một bit duy nhất để biểu thị cột, nhấn phím được bật. Hãy nhớ tắt các ngắt trước khi cấu hình lại các cổng vì nó có thể sẽ kích hoạt các ngắt không mong muốn. Bạn có thể phải xóa các cờ ngắt khi rời khỏi thói quen ngắt để ngăn việc xử lý ngắt trùng lặp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.