打印
[AVR单片机]

请教USI做I2C的从口问题

[复制链接]
2830|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
minchen_999|  楼主 | 2012-11-5 16:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 minchen_999 于 2012-11-5 16:47 编辑

想用ATTINY167(据称比较新的一款)的USI口做IIC从口,认真研究了一下手册和
网上关于usi slave的代码,发现样例很多错误,几经折腾,发现可以进入溢出中断,但是那个移位数据寄存器,USIDR怎么输出都没反应,很郁闷,后来又不知道怎么折腾了一下,连溢出中断都产生不了,计数器根本就没启动,实在玩不转这个片子,盼高人指导!
注:167的USI口只有一个,那么小的封装,还非要映射到PORTA和PORTB来配置,我现在用的是PORTA,看到大部分都是用的PORTB,莫非作为新产品AVR这个功能没验证过。。。

相关帖子

沙发
minchen_999|  楼主 | 2012-11-5 16:17 | 只看该作者
本帖最后由 minchen_999 于 2012-11-5 16:46 编辑

折腾两个礼拜了,真是拜服了,这个破功能,不就是个移位计数器,搞那么复杂干嘛?想用I2C协议,又要软件来完成一部分协议,不停地设置输入输出方向,还不如TWI口,真是**肋啊

使用特权

评论回复
板凳
minchen_999|  楼主 | 2012-11-5 16:44 | 只看该作者
计数器和移位寄存器,不是设置好了方向就可以工作吗?
个人认为在USICR选择外部时钟源和触发类型,在USISR中设置好USICNT,master有时钟进来应该就可以产生中断了吧,为什么感觉计数器没有计数,USIDR也没移位,还需要什么激活的操作?

使用特权

评论回复
地板
dqyubsh| | 2012-11-5 17:29 | 只看该作者
网上的例程是哪来的,是ATMEL的还是来自别处?如果是ATMEL,出错可能少点,其它来源就难说。IIC协议很大精力都在软件上,除了寄存器就是处理中断,我不建议自己写。这东西远不是SPI那样简单,这个要有心理准备。所以,找一个可靠的软件打底,非常非常重要。

http://www.atmel.com/devices/attiny167.aspx?tab=documents

重点看一下AVR310、AVR311

使用特权

评论回复
5
minchen| | 2012-11-6 10:23 | 只看该作者
下载的就是312,完全按照手册改的,就是不知道怎么计数器不起作用,是不是时钟频率有限制呢?能不能发个可用的例程,谢谢

使用特权

评论回复
6
dqyubsh| | 2012-11-6 21:24 | 只看该作者
例子是IAR 4.11A的,你用什么编译器,是不没有正确移植?除非程序有BUG,一般很容易就跑了。有仿真器就调试一下。

使用特权

评论回复
7
minchen| | 2012-11-7 21:57 | 只看该作者
我用的avr studio 5.0,移植都通过了,今天发现使用外部scl,发送数据到slave(attiny167)是正常的,溢出中断也产生了。不过反过来的测试从机发送,我想直接通过主机(同样采用IO模拟方式)读取167的数据,却总是无法产生overflow的中断,而且移位寄存器也不工作,计数器也没有增加。看到手册说是设置好USIDR后,设置方向寄存器DDRA就可以,可是为什么我的输出好像都没有?是不是还需要设置什么触发?

使用特权

评论回复
8
dqyubsh| | 2012-11-8 02:40 | 只看该作者
一听IO模拟就头大,弄这么复杂的事儿干嘛……

使用特权

评论回复
9
minchen| | 2012-11-8 11:00 | 只看该作者
那你用什么跟它对接?模拟好控制时序

使用特权

评论回复
10
dqyubsh| | 2012-11-9 20:03 | 只看该作者
用带有硬件I2C的单片机和它接!相同的两片,一主一从!AVR遍地都是带I2C的片子,模拟什么啊。

使用特权

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

本版积分规则

0

主题

3

帖子

0

粉丝