Browse Source

changed all the internal links/anchors

Pat Beirne 1 month ago
parent
commit
b46a4a7c7e
1 changed files with 18 additions and 17 deletions
  1. 18 17
      keypad_to_microcontroller.md

+ 18 - 17
keypad_to_microcontroller.md

@@ -1,10 +1,10 @@
 # Keypad Scanning
 # Keypad Scanning
 
 
-There's a dozen ways to connect a keyboard to a microcontroller, and this paper attempts to enumerate many of them. [test link](#one-per-pin)
-There are similar articles on the internet [[see below](#ext_ref)], 
-but this paper introduces some new techniques: [row-grounded](#3x4-plus-ground-[new-design]), 
-[row-grounded-with-diodes](#3x4diodes), 
-[row-grounded-with-4-diodes](#3x4double_diodes)
+There's a dozen ways to connect a keyboard to a microcontroller, and this paper attempts to enumerate many of them.
+There are similar articles on the internet [[see below](#external-references)], 
+but this paper introduces some new techniques: [row-grounded](#3x4-plus-ground-new-design), 
+[row-grounded-with-diodes](#3x4-plus-ground-and-2-diodes-new-design), 
+[row-grounded-with-4-diodes](#3x4-plus-ground-and-4-diodes-new-design)
 
 
 Some articles focus on a full-function, unambiguous keyboard, 
 Some articles focus on a full-function, unambiguous keyboard, 
 where multiple key-presses can be detected. Something
 where multiple key-presses can be detected. Something
@@ -23,7 +23,7 @@ In this document, *n* refers to the number of keys that are in the keyboard. The
 that is being pressed during an explanation.
 that is being pressed during an explanation.
 
 
 
 
-## <a name="one_per_pin" /> One per Pin 
+## One per Pin 
 
 
 The simplest way to connect keys to a microcontroller is one key to one pin. 
 The simplest way to connect keys to a microcontroller is one key to one pin. 
 Connect the other side of the key to ground. 
 Connect the other side of the key to ground. 
@@ -40,7 +40,7 @@ This configuration has a few advantages:
 - there is no keyboard scan....which helps keep scan-noise out of the power supply; helpful in an audio environment
 - there is no keyboard scan....which helps keep scan-noise out of the power supply; helpful in an audio environment
 - can easily be set to wake-on-interrupt, which means that you can power down between keystrokes
 - can easily be set to wake-on-interrupt, which means that you can power down between keystrokes
 
 
-See [KeyBounce](#bounce) below.
+See [KeyBounce](#keyboard-bounce) below.
 
 
 Of course, this solution does not apply to a keyboard which has *rows* and *columns*.
 Of course, this solution does not apply to a keyboard which has *rows* and *columns*.
 
 
@@ -56,7 +56,6 @@ microcontrollers have an A/D converter, and that can be used to determine which
 
 
 A naive approach would be to simply use equal-valued resistors, and then each tap would be *k*/(*n*+1) of the supply voltage.
 A naive approach would be to simply use equal-valued resistors, and then each tap would be *k*/(*n*+1) of the supply voltage.
 
 
- <a name="3x4chain" />
 ### 3x4 Chain
 ### 3x4 Chain
 
 
 Sometimes a keyboard will be pre-wired as a grid, so you don't have access to the individual keys. You can still use 
 Sometimes a keyboard will be pre-wired as a grid, so you don't have access to the individual keys. You can still use 
@@ -109,7 +108,7 @@ See also [this article](https://github.com/sgmne/AnalogKeypad)
 
 
 ## Scanning
 ## Scanning
 
 
-### 3x4 Scanning <a name="3x4scan" />
+### 3x4 Scanning
 
 
 The simplest connection of a 3x4 keyboard is to simply use 7 GPIO pins, 4 for the rows, and 3 for the columns.
 The simplest connection of a 3x4 keyboard is to simply use 7 GPIO pins, 4 for the rows, and 3 for the columns.
 Enable input & pullups on the columns and rows. At scan time, assert each row pin, one at a time, as a low, and measure
 Enable input & pullups on the columns and rows. At scan time, assert each row pin, one at a time, as a low, and measure
@@ -136,10 +135,10 @@ This scheme can be configured for interrupt triggering
 columns are set to input+pullup+interrupt. 
 columns are set to input+pullup+interrupt. 
 Any keypress will then pull at least one column line low.  Once the 
 Any keypress will then pull at least one column line low.  Once the 
 interrupt is triggered, change to the logic described above, scan the keyboard 
 interrupt is triggered, change to the logic described above, scan the keyboard 
-[over the [debounce period](#bounce) and then restore they keyboard 
+[over the [debounce period](#keyboard-bounce) and then restore they keyboard 
 to the "ready-for-interrupt" configuration.
 to the "ready-for-interrupt" configuration.
 
 
-### 3x4 plus Ground [new design] <a name="3x4gnd" />
+### 3x4 plus Ground [new design]
 
 
 If you are really tight on pins, you can ground one of the rows and still get a functioning keyboard.
 If you are really tight on pins, you can ground one of the rows and still get a functioning keyboard.
 
 
@@ -161,7 +160,6 @@ The resulting 4 groups of 3 bits indicate the state of the keyboard; 1=open, 0=k
 
 
 Again, the same logic will allow you to manage a 4x4 keyboard with 7 GPIO pins.
 Again, the same logic will allow you to manage a 4x4 keyboard with 7 GPIO pins.
 
 
-<a name="3x4diodes" />
 ### 3x4 plus Ground and 2 Diodes [new design]
 ### 3x4 plus Ground and 2 Diodes [new design]
 
 
 Again, we can scrape off one more GPIO if we can add a pair of diodes to the row pins.
 Again, we can scrape off one more GPIO if we can add a pair of diodes to the row pins.
@@ -215,7 +213,6 @@ look for the symbol **FIVE_PIN**.
 This configuration is also interrupt-capable, by setting the row drivers to output-low, and the columns as 
 This configuration is also interrupt-capable, by setting the row drivers to output-low, and the columns as 
 input+pullup+interrupt.
 input+pullup+interrupt.
 
 
-<a name="3x4double_diodes" />
 ### 3x4 plus Ground and 4 Diodes [new design]
 ### 3x4 plus Ground and 4 Diodes [new design]
 
 
 As an extreme, you can decode a 3x4 keypad with only 4 GPIO pins, 
 As an extreme, you can decode a 3x4 keypad with only 4 GPIO pins, 
@@ -268,7 +265,7 @@ can happen.
 look for the symbol **FOUR_PIN**. Here is a working prototype. ![working](keypad.jpg)
 look for the symbol **FOUR_PIN**. Here is a working prototype. ![working](keypad.jpg)
 
 
 
 
-### Keyboard Debounce <a name="bounce" />
+### Keyboard Debounce 
 
 
 When a key is pressed, there is a short time during closure when the 
 When a key is pressed, there is a short time during closure when the 
 physical elements almost-touch, and the 
 physical elements almost-touch, and the 
@@ -301,8 +298,12 @@ One involves using an SPI output and a shift register
 <https://hackaday.com/2015/04/15/simple-keypad-scanning-with-spi-and-some-hardware/>   
 <https://hackaday.com/2015/04/15/simple-keypad-scanning-with-spi-and-some-hardware/>   
 This design requires an external chip ($0.10), 8 diodes and 4 resistors.
 This design requires an external chip ($0.10), 8 diodes and 4 resistors.
 
 
+### Interrupts
 
 
-### Reading DIP switches <a name="dip_switches" />
+
+
+
+### Reading DIP switches
 
 
 In some situations, it's helpful to read an array of DIP switches, 
 In some situations, it's helpful to read an array of DIP switches, 
 perhaps to read a configuration at power-on. In this case, 
 perhaps to read a configuration at power-on. In this case, 
@@ -325,7 +326,7 @@ and it's impossible to determine if the "5" key is pressed or not. Diodes are
 required at each junction to disambiguate.
 required at each junction to disambiguate.
 
 
 
 
-### External keyboard processor <a name="external_hardware" />
+### External keyboard processor
 
 
 With the current cost of processors, consider adding an external coprocessor to your project. 
 With the current cost of processors, consider adding an external coprocessor to your project. 
 
 
@@ -364,7 +365,7 @@ It's U$0.11, 16k flash, 2k ram, 6gpio, sop8.
 | scan with diodes   | 6 for 4x4, 5 for 3x4     | 1 | 2 diodes | 
 | scan with diodes   | 6 for 4x4, 5 for 3x4     | 1 | 2 diodes | 
 | scan with 4 diodes | 5 for 4x4, 4 for 3x4     | 1 | 4 diodes | 
 | scan with 4 diodes | 5 for 4x4, 4 for 3x4     | 1 | 4 diodes | 
 
 
-### External References <a name="ext_ref" />
+### External References
 
 
 An excellent overview of keyboard scanning directly from a microcontroller.  
 An excellent overview of keyboard scanning directly from a microcontroller.  
 <https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ApplicationNotes/ApplicationNotes/00003407A.pdf>
 <https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ApplicationNotes/ApplicationNotes/00003407A.pdf>