Forgot your password?
No account? Register one!
September 5, 2009
Product BOB-09816 |
about 2 years ago
Are you providing power to the microphone?
Product COM-08653 |
about 3 years ago
Upon further thinking and research, I’ve (and a friend) devised the best plan to use this thing while taking only ONE (yes 1) analog input. You make a resistor ladder of sorts (see picture 1 below) between the pads and sample the last pad with respect to gnd with one analog input. The nature of what pads short out and how they short makes this non-trivial. I ran a simulation with 1,000,000 different combinations of resistors to optimize the different readings on the analog input. The resistor values and expected analog input readings are given on the second image.
Picture of Resistors (SMD 603s) on the Pads: the red wire is +5V, purple is analog out, black is ground.
So, looks like it’ll be easier inverting the output, using negative logic (note the slash in front of the outs). These are the outputs, 0=0000, 1=0001… 9=1001, *=1010, #=1011. And otherwise (no buttons being pressed) = 1111. I’ll be checking this in awhile, but I checked the hand work several times and believe this to be right.
edit: due to the formatting, I can’t write it correctly. Replace the ‘ “ ’ with shift+8, the multiply symbol.
CHIP ID ATF16V8BQL;
Pin 1 Clk ; Clock pin
Pin 2 p1 ; pad 1
Pin 3 p2 ; pad 2
Pin 4 p3 ; pad 3
Pin 5 p4 ; pad 4
Pin 6 p5 ; pad 5
Pin 7 p6 ; pad 6
Pin 8 p7 ; pad 7
Pin 12 /out0 ; output 0
Pin 13 /out1 ; output 1
Pin 14 /out2 ; output 2
Pin 15 /out3 ; output 3
out0 = p1"p4 + p1"p2 + p3"p7 + p5"p7 + p1"p6 + p3"p4
out1 = p1"p4 + p2"p3 + p3"p7 + p1"p7 + p1"p6 + p5"p6
out2 = p1"p4 + p2"p3 + p1"p2 + p2"p5 + p1"p6 + p5"p6 + p3"p4 + p4"p5
out3 = p1"p4 + p2"p3 + p1"p2 + p2"p5 + p3"p7 + p1"p7 + p5"p7 + p3"p6
I haven’t seen anyone else talk about interfacing this with a PLD, so I thought I’d suggest it. You can get a PLD like the “ATF16V8BQL-15PU” for $1.60. Use the 7 outs of the keypad as ins for the PLD, make a truth table, and have the PLD output a 4 bit (HEX) number for each (Carnaugh maps may help, but I’m just gonna use maxterms). This would be much simpler to interface with an arduino than using another MCU in the middle. Here’s code that I wrote that I haven’t tested yet, but it should work. You do need a IC programmer.
Ok, it’s late, and I realized that I’m going to have to write it out and look check it and what not to make sure it works, I’ll reply to this later. I really do think this is the best method to decode this keypad though. It’s a static decode, thus logic circuits should be used, not MCUs. Problems will arise if two buttons are pressed, but whatever.
No public wish lists :(