原创 双向IO转准双向(开漏输出)IO的软件控制

2008-12-9 00:23 5584 6 6 分类: MCU/ 嵌入式

问题:


2138的io如果不是开漏输出是不是不能模拟IIC


在很多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设置为输入模式就是“开漏输出”


输出0---设置为输出模式,拉低IO
输出1---设置为输入模式,外部上拉为1

这种双向IO转准双向IO的方法在一些键扫描的应用尤为重要,


因为这些IO一般都串联电阻防止IO线与,可能是需要双向,故不能


加二极管来防止线与的发生。


当键扫描有效时,假设扫描行‘0’,非扫描行‘1’,(读IO)输入中断上拉‘1’


那么有键压下时,扫描行‘0’,非扫描行‘1’的“抽头”处实际是


2个串联电阻的分压处,


故读IO得到是大约1/2VCC,这只是理论上的,考虑动态电阻,有些芯片可能


会测试到键压下,但可能是时好时坏,很不稳定,当多键压下是就测不到键压下了。


我遇到过别人设计的这样的电路,考虑时单向扫描,将其电阻换为二极管才算


解决。


虽然这个问题不是问题,但也要特别注意。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条