2

Trying to get a 4x4 keypad working with a PIC 18f4685.

I've turned on weak-pulls ups. Set the appropriate pins to either input/output but when I send a signal out I'm not getting it back on bits 6 & 7. It just gets zeros...

I've tried to debug using the PicKit3 but seems that it uses RB7 and crashes things when a button for that row is pushed. Of course that tells me that the signals must be getting through, to a point.

Is there anything else in particular that I need to set up in configuration for PORT B?

As always...your help is greatly appreciated.

4

3 回答 3

2

不确定您的原理图(草图可能会有所帮助),但 PIC GPIO 中的一个常见错误是未将 ADC 寄存器设置为数字输入。它们作为模拟输入退出复位。

查看PIC18F4685 数据表中的寄存器描述 19-2 。

ADCON1复位为 0x00。要将所有模拟引脚设置为数字 I/O,PCFG3:0需要设置为 1。

ADCON1bits.PCFG = 0x0F;
于 2012-05-24T14:08:50.927 回答
2

由于 EE 网站在您得到答案之前就如此粗鲁地关闭了您,我想我会来这里回答您的问题。

查看第 135 页的表 10-3,它列出了端口 B 引脚的所有功能。请注意,RB6 和 RB7 也是调试引脚,所以我不会使用它们。

另外,您是否正在写入 LATx 并从 PORTx 读取?在读取和写入同一个端口时,这样做很重要。如果您对 PORTx 进行读写,您可能会意外地从尚未有足够时间更改的输出中读取陈旧值,并且您的下一次写入将抹去您的预期值。这对没有 LATx 寄存器的 PIC 尤其有害。任何操作,即使是像 BSF/BCF 这样的按位操作,都会对整个端口寄存器进行读-修改-写操作,影响的不仅仅是您打算修改的位。请参阅此 EE 问题的答案:https ://electronics.stackexchange.com/questions/28744/interfacing-a-keypad-with-a-microcontroller

于 2012-05-24T18:42:12.240 回答
2

您能否展示使用您的代码设置三态寄存器(TRISB)以及您的阅读方式。在按下按钮之前和按下按钮期间,您是否使用数字万用表 (DMM) 检查了输入引脚的电压?它们是 10 美元,物有所值。

最后,您是否禁用了模拟引脚?在 PIC24 芯片上,您必须执行以下操作:

AD1PCFG = 0xFFFF

在数字输入读取将起作用之前。你的芯片上可能是一样的。

你能给我们你芯片的确切型号吗?

于 2012-05-25T01:26:49.583 回答