打印
[CAN-bus/DeviceNet]

请教一个MCP2515滤波的问题

[复制链接]
2480|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suuare|  楼主 | 2012-3-27 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个项目都快做完了,才发现其中隐含了一个致命的问题......
CAN总线上有若干个节点,其中一个是主机,其他为从机。主机依次向从机发出指令,每个从机都有自己唯一的地址。通信间采用标准帧,D10-D3作为地址码。于是问题来了。为了实现主机通信时只有对应的从机有相应,设置寄存器如下:
mcp2515_write_register(0x60, 0x20);
mcp2515_write_register(0x70, 0x22);
mcp2515_write_register(0X20, 0XFF);
mcp2515_write_register(0X24, 0XFF);

mcp2515_write_register(0X00, DevID);
mcp2515_write_register(0X08, DevID);
这段程序实现了这一功能,但通信间有一种特殊情况,主机广播指令。此时从机收到指令后不做回复。主机发出的地址码为00H。小弟不会设置了...  帮忙啊!

相关帖子

沙发
suuare|  楼主 | 2012-3-27 14:16 | 只看该作者
KAO 点了两下就出来两个一模一样的贴......

使用特权

评论回复
板凳
walnutcy| | 2012-3-28 08:45 | 只看该作者
好久没用2515了,之前的使用设置如下:
对每一个filter单独配置
        /* filterBuf for Buffer 0 */
        filterBuf[0] = P_10ms_SIDH;
        filterBuf[1] = P_10ms_SIDL;
        filterBuf[2] = P_10ms_EID8;
        filterBuf[3] = P_10ms_EID0;
        mcp2515_write_register_p( RXF0SIDH, filterBuf, 4 );
        mcp2515_write_register_p( RXF1SIDH, filterBuf, 4 );
       
        /* filterBuf for Buffer 1 */
        filterBuf[0] = P_XX_SIDH;
        filterBuf[1] = P_XX_SIDL;
        filterBuf[2] = P_XX_EID8;
        filterBuf[3] = 0xF3;//P_XX_EID0;
        mcp2515_write_register_p( RXF2SIDH, filterBuf, 4 );
        filterBuf[3] = 0xF4;//P_XX_EID0;
        mcp2515_write_register_p( RXF3SIDH, filterBuf, 4 );
        filterBuf[3] = 0xD0; //0xF0//P_XX_EID0;
        mcp2515_write_register_p( RXF4SIDH, filterBuf, 4 );
        filterBuf[3] = 0xEF;//P_XX_EID0;
        mcp2515_write_register_p( RXF5SIDH, filterBuf, 4 );
       
        filterBuf[0] = P_MASK10ms_SIDH;
        filterBuf[1] = P_MASK10ms_SIDL;
        filterBuf[2] = P_MASK10ms_EID8;
        filterBuf[3] = P_MASK10ms_EID0;
        /* Maske for Buffer 0 */
        mcp2515_write_register_p( RXM0SIDH, filterBuf, 4 );               
        /* Maske for Buffer 1 */
        filterBuf[0] = P_MASK_SIDH;
        filterBuf[1] = P_MASK_SIDL;
        filterBuf[2] = P_MASK_EID8;
        filterBuf[3] = 0xDF;//P_MASK_EID0;
        mcp2515_write_register_p( RXM1SIDH, filterBuf, 4 );

使用特权

评论回复
地板
dami| | 2012-3-30 11:25 | 只看该作者
屏蔽和滤波是1位1位对应的。实际上是为了屏蔽或过滤一部分或地址,屏蔽的地址CPU收不到,你这个是要接收信息,但不回复,CPU还是要知道接收的信息。所以不能使用这个功能。只是你收到了不发数据出去就是了。

使用特权

评论回复
5
caijun_2012| | 2012-3-30 19:53 | 只看该作者
学习中。。。。。。。。

使用特权

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

本版积分规则

13

主题

14

帖子

1

粉丝