问题:
在很多MCU/ARM/DSP中,IO都是真正的双向IO.
一般由方向(输出输入模式)和读写等控制寄存器组成
如LPC2138的IODIR,IOSET,IOCLR,IOPIN等。
而在应用中有时需要IO去模拟1-Wire,I2C,SPI等总线时序,
故其数据线是需要双向IO的,这样双向IO在读时序的写'1'过程时
是不可以在输出模式下输出高电平的,因为这样将会与接口设备发生“线与”
虽然可以用二极管来阻止“线与”的发生,但破坏了双向的设计要求。
如出现“操作不慎会输出大电流?”
wswh2o 发表于 2008-12-5 16:25 侃单片机 ←返回版面 | |
楼主: 2138的io如果不是开漏输出是不是不能模拟IIC | |
|
故应该在总线上外接上拉电阻,在输出‘1’时将其变为输入模式,利用外部
上拉电阻来输出‘1’。此时的IO就相当于“开漏”IO.
这样控制软件的编写也非常简单:
1.输出寄存器永远写‘0’
2.读IO不变,还是输入模式。
3.写IO时,写‘0’为输出模式,写‘1’为输入模式。
这样原本应该控制IOSET,IOCLR的变为了控制IODIR。
所以:
hotpower 发表于 2008-12-5 18:03 侃单片机 ←返回版面 | |
3楼: IO设置为输入模式就是“开漏输出” | |
|
这种双向IO转准双向IO的方法在一些键扫描的应用尤为重要,
因为这些IO一般都串联电阻防止IO线与,可能是需要双向,故不能
加二极管来防止线与的发生。
当键扫描有效时,假设扫描行‘0’,非扫描行‘1’,(读IO)输入中断上拉‘1’
那么有键压下时,扫描行‘0’,非扫描行‘1’的“抽头”处实际是
2个串联电阻的分压处,
故读IO得到是大约1/2VCC,这只是理论上的,考虑动态电阻,有些芯片可能
会测试到键压下,但可能是时好时坏,很不稳定,当多键压下是就测不到键压下了。
我遇到过别人设计的这样的电路,考虑时单向扫描,将其电阻换为二极管才算
解决。
虽然这个问题不是问题,但也要特别注意。
文章评论(0条评论)
登录后参与讨论