??? 09/15/06 23:49 Read: times |
#124387 - AND gate, INT0 |
Well, since this board has been so helpful to me in improving my inexperienced code- writing, I thought maybe I could find a bit of hardware help as well. Keep in mind that I'm a newb at both circuitry and C, embedded systems, and pretty much anything else that might be discussed on this board. Here's the deal:
In another post ( http://www.8052.com/forum/read.phtml?id=123471 ) I posted some code which was the serial output portion of a keypad scanner I'm working on. The keypad scan works pretty well, aside from some hardware difficulties. I'm relying on a port pin to generate INT0, which wakes up the chip from idle mode and scans the keypad. All my Columns are low, Rows are high. My interrupt pin is also High. Pressing a button connects a column to a row and brings the row low, etc. The software works fine. I'm using a couple of TI CD4082BE AND gates to bring the interrupt pin low when any button is pressed, aka one of the rows goes low. The AND gate works. Whenever a button is pressed, the output of the gates does in fact go low. But, alas, the interrupt is not generated. It acts like it doesn't want to pull the interrupt pin "low enough" to work. Regarding the input pin: I thought that being Push-Pull or Open-Drain didn't matter when a pin is used as an input. That doesn't APPEAR to be the case here. The pin I'm using for INT0 is configured as Push-Pull in the crossbar. This works great If I go around the gate and use jumper wires to simulate a button being pressed by connecting a column to a row and the INT0 pin simultaneously. Never fails. Here's where it gets weird. If I configure the pin as Open-Drain, it WILL work with the AND gates in place, generate the interrupt and scan the keypad, but a BUNCH of weirdo stuff happens. Wrong key decoding, interrupts generated without a button being pressed, etc. I've been fumbling with this on my own for a while now, and I bet I'm either missing something that I don't know about/understand within the IO setup, or I'm going about this the wrong way from a hardware standpoint. At any rate, that was kind of a long post for a silly problem. I look forward to any help you all may have to offer. Thanks, Mark |