打印
[AVR单片机]

Attiny84 I2C与AD5272 I2C通讯问题

[复制链接]
1609|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
anstxfw|  楼主 | 2014-12-22 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Atitiny84 I2C的程序是采用atmel官网上的例程,但是会出现这样一种情况,Attiny84无法拉高SCK,而AD5272是从机,不控制SCK的,总线上又没有其他设备,上拉电阻是10K。大家是否遇到过这种情况。

相关帖子

沙发
airwill| | 2014-12-22 19:30 | 只看该作者
I2C 从机, 有可能会锁定 SCK 低电平, 这是 I2C 协议允许的, 那是在从机忙碌, 来不及响应主机命令的时候出现的.

使用特权

评论回复
板凳
anstxfw|  楼主 | 2014-12-24 09:23 | 只看该作者
MCU程序里面会有一段不断检测SCK是否释放的程序,以至于程序就死在这里,因为SCK始终是无法拉高,我只是发一个修改参数的命令过去,从机不至于一直忙碌吧。

使用特权

评论回复
地板
yarn.z| | 2015-11-16 12:02 | 只看该作者
这是AVR单片机自作聪明的所谓“真”IO口而不是准IO口,输出电流高达40mA。在与外围芯片通信时,只要通信协议里外围芯片有拉低CLK发繁忙信号,或者拉低SDA发复位总线信号。若刚好遇到AVR端口处在DDRXn=1,PORTXn=1时就相当40mA直接对地输出了,时间稍长端口就会被锁住,不论你怎么拉高都不行,只有断电。发高电平时,要么加限流电阻,要么端口设置成DDRXn=0,PORTXn=1,发低电平再切换成DDRXn=1,PORTXn=0。这是我在做项目外围芯片端口被烧掉几片后总结的。尤其在电池供电系统里要特别注意,若外围芯片不在电池供电范围,被断电一般芯片断电后为了安全端口都会对地连接,若AVR处于电池供电状态,端口处于DDRXn=1,PORTXn=1时,大电流会流向被断电的外围芯片。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

64

帖子

0

粉丝