打印
[AVR单片机]

用过at90can128的朋友请进,有几个问题需要大家帮忙,

[复制链接]
1186|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangss90|  楼主 | 2013-9-25 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做CAN通信,用的是AT90CAN128和TJA1042收发器,想实现最简单的通信,就是1号板只发送,2号板只接受,但是一直没有成功,其中有几个问题一直闹不清楚;
1,ID号,作为接受MOB,有设置它的滤波ID(CANIDT)和屏蔽ID(CANIDM),不知道CANIDM中的位为1是屏蔽啊,还是0为屏蔽验收,我认为是1为屏蔽,也就是说CANIDM中的为0的位,在接受数据时,ID相应的位必须与CANIDT响应的位相同,而为1的位则不进行比较,不知道对吗?
2,在两节点发送过程中,经检测,老出现OVRTIM状态(CANGIT),到底是什么原因出现的OVRTIM,应该怎样处理它,是在该中断中清楚标志位,还是不管它,,不知道用不用开这个异常中断?

3,经示波器检测,一号板TXD引脚发出去的波形和2号板RXD的波形是一致的,这说明中间的收发器和隔离器是没有错的,但是有这样一个问题,就是1号板执行完发送程序,他的TXD引脚一直有波形,说明一直在发送,并且TXOK(CANSTMOB)一直为0,就死在while()判断那了,当执行了CANCDMOB=0x48后,也就是使能发送后,

CANSTMOB中的AERR(Acknowledgement Error)就置位了,好像是应答错误,不知道怎么解释这错误,求大家帮忙分析分析:

我的发送程序是这样的

void CAN_Send(void)
{
uchar i=0;
  CANPAGE=0x10;//选择信箱1为发送
CANSTMOB=0x00;
CANIDT4=0x00;
CANIDT3=0x00;
CANIDT2=0x40;
CANIDT1=0xff;
for(i=0;i<8;i++)
{
  CANMSG=can_transdata[i];
}
CANCDMOB=0x48;
while(!(CANSTMOB&(1<<TXOK)));
CANSTMOB&=~(1<<TXOK);
}

相关帖子

沙发
qin552011373| | 2013-9-27 09:13 | 只看该作者
正在学习can   帮顶吧

使用特权

评论回复
板凳
hyhmh| | 2013-9-29 09:09 | 只看该作者
最好有个CAN工具,以避免:无法判断是接收有问题,还是发送有问题。
至于芯片手册上有的技术说明,自己看。或者找文献

使用特权

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

本版积分规则

4

主题

9

帖子

0

粉丝