打印
[AVR单片机]

求助 关于AVR的twi读写问题

[复制链接]
6766|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cklgf|  楼主 | 2011-7-8 23:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cklgf 于 2011-7-8 23:56 编辑

关于AVR中twi的问题,请教一下大家。
现在我手上有一个由Mega8芯片做的小检测板,它作为twi主从通信中的从机(一对一通讯),即当它接收到主机的发出的读地址后,就向主机发送检测到的数据。
现在我用一个Mega16的芯片通过模拟IIC读取检测板的数据,在刚上电的时候,Mega16与Mega8的检测板通讯很正常,能正确去读到数据,但是过一段时间后(短的时候十几分钟,长的时候一个多小时),就会出现通讯故障,通过示波器发现Mega16给Mega8检测板发读命令后,Mega8没有应答(应答为总为高);不知道大家有没有遇到这种情况,这个什么原因造成?

还有一个问题时,本来Mega8的检测板是用外部4M晶振的,但由于设置熔丝位问题,使芯片设置成使用内部RC 1M的震荡时钟,此时发现用模拟IIC不能正确读取到Mega8的检测数据,但是如果用avr单片机的硬件IIC就能正确读取到,这是为什么?

相关帖子

沙发
NE5532| | 2011-7-9 16:39 | 只看该作者
你I2C的速度是多少?换了慢4倍的时钟,还有没有足够的速度?硬件I2C和软件对时钟要求差10倍!第一个问题要看下是不是死机了,检查主机一方的时序是否正常,以分开主机和从机两边找问题。

使用特权

评论回复
板凳
dqyubsh| | 2011-7-11 10:36 | 只看该作者
ATMEL有现成的例子,做TWI主机、从机的都有,不知道你是不是用了这些例子。

使用特权

评论回复
地板
cklgf|  楼主 | 2011-7-11 23:19 | 只看该作者
2# NE5532
对于第二个问题,估计是软件IIC速度太快,所以读不到。
而第一个问题,从机(即检测板)那边还是在正常工作的,因为从机一直在给一个传感器脉冲,主机也应没有死机,应为在打波形的时候,还能看到主机发从机的地址。很奇怪,不知道是什么原因。

使用特权

评论回复
5
cklgf|  楼主 | 2011-7-11 23:23 | 只看该作者
3# dqyubsh
从机的程序不是我写的,是我同事两三年前写的,但我同事跟我说,他的程序应该没有问题,因为已经出了产品,售后也没有反馈这个问题。但我的主机程序很简单,就每隔一秒读一下从机数据,然后显示出来,IIC的波形的应该没有错,就不知道为什么读到一定时间就读不到数据,从机不应答了,郁闷啊

使用特权

评论回复
6
dqyubsh| | 2011-7-12 07:40 | 只看该作者
主机程序也不能乱写,随便写两句未必可以可靠运行。你还是看看ATMEL的例子吧。

使用特权

评论回复
7
NE5532| | 2011-7-12 21:12 | 只看该作者
没有维修不代表没有问题,检查你的主机输出信号是不是符合标准才是关键,不排除原来从机就有不对的地方,主机也有不对的地方,负负为正的情况。

使用特权

评论回复
8
cklgf|  楼主 | 2011-7-12 23:19 | 只看该作者
7# dqyubsh 我的主机读写程序用于读取24C02没有问题,而且这个程序的波形我都看过,应该没有问题的

使用特权

评论回复
9
cklgf|  楼主 | 2011-7-12 23:20 | 只看该作者
8# NE5532
我也明白这个道理,其实我自己也用Mega16的twi做了个从机,从机给主机发一个数组,,然后主机去读。这个时候,我主机的读取就没有问题。

使用特权

评论回复
10
hotpower| | 2011-7-13 08:37 | 只看该作者
问题多多。
首先从机一般应该用硬件iic,主机是可以模拟的。
楼主说硬件主从机没问题,那么应该是软件模拟的问题了。
iic不是异步通讯,时钟由主机提供。但从机有权拉低时钟同步速率。
故主机模拟iic时,抬高时钟电平时,一定要测试,等待从机释放时钟。

使用特权

评论回复
11
乡村男孩| | 2011-7-13 08:39 | 只看该作者
这个HotPower大叔是高手

使用特权

评论回复
12
cklgf|  楼主 | 2011-7-14 23:32 | 只看该作者
11# hotpower

这么说,是不是在我得到应答信号之前,我应该先判断从机是不是释放总线,在从机释放总线后再拉高啊?还有,一般怎么作判断这个处理?
还有一个问题是,为什么一开始的时候没有问题,过了一个多小时或者几十分钟以后才会这样呢?

使用特权

评论回复
13
cklgf|  楼主 | 2011-7-14 23:33 | 只看该作者
11# hotpower

还想问一下,之前看到团购 《嵌入式系统的实时性》这本书还在团购不?

使用特权

评论回复
14
hotpower| | 2011-7-15 19:36 | 只看该作者
先回答书的问题:
此书是本版的大版主李老师为增加大家的rtos概念推荐的。
团购活动由北航与小菜农合作,菜农淘宝代售。
平邮比较慢要耐心等待。

使用特权

评论回复
15
hotpower| | 2011-7-15 19:40 | 只看该作者
再一个楼主问题都没说清楚:
谁模拟,谁主机?

使用特权

评论回复
16
cklgf|  楼主 | 2011-7-18 00:17 | 只看该作者
15# hotpower

能买就好,那我就下单咯

使用特权

评论回复
17
cklgf|  楼主 | 2011-7-18 00:18 | 只看该作者
16# hotpower

主机用模拟,从机用硬件,在上面是Mega16是主机,从机是Mega8

使用特权

评论回复
18
cklgf|  楼主 | 2011-8-18 00:24 | 只看该作者
11# hotpower

请问,怎么样知道从机什么时候释放IIC总线?

使用特权

评论回复
19
hotpower| | 2011-8-18 05:48 | 只看该作者
16# hotpower  

主机用模拟,从机用硬件,在上面是Mega16是主机,从机是Mega8
cklgf 发表于 2011-7-18 00:18


那么为什么一个模拟,一个硬件???

使用特权

评论回复
20
cklgf|  楼主 | 2011-8-22 00:36 | 只看该作者
20# hotpower

因为发现用硬件IIC作从机的时候,如果Mega8作从机关于振荡源熔丝位没烧,也检验不出错误。但是如果主机用模拟IIC,Mega8没有少些振荡源的熔丝位,则读取不了数据

使用特权

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

本版积分规则

86

主题

137

帖子

1

粉丝