求助MCP2515 CAN模块要接收特定ID屏蔽滤波怎么设置设置-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9448|回复: 15

[未解决] 求助MCP2515 CAN模块要接收特定ID屏蔽滤波怎么设置设置

[复制链接]
发表于 2020-6-24 20:44 | 显示全部楼层 |阅读模式
CAN0.begin(CAN_500KBPS);                                        //must initialize the Can interface here!
             CAN0.init_Mask(0, 0, 0x3ff);                                    // there are 2 mask in mcp2515, you need to set both of them
             CAN0.init_Mask(1, 0, 0x3ff);
             /*
             * set filter, we can receive id from 0x04 ~ 0x09 except for 0x06
             *  there are 6 filter in mcp2515,so it can filter six id,i.e.0x04~0x09.
             */
             CAN0.init_Filt(0, 0, 0x04);                                     // filter 0 for id = 0x04
             CAN0.init_Filt(1, 0, 0x05);                                     // filter 1 for id = 0x05
             // CAN0.init_Filt(2, 0, 0x06);                                  // filter 2 for id = 0x06
             CAN0.init_Filt(3, 0, 0x07);                                     // filter 3 for id = 0x07
             CAN0.init_Filt(4, 0, 0x08);                                     // filter 4 for id = 0x08
             CAN0.init_Filt(5, 0, 0x09);


按照网上的示例的设置,无论是什么ID节点都能接收,我现在想只接受0x01ID的数据其他ID的数据不接收,该怎么设置这些屏蔽器和滤波器?
哪位能教一下,谢谢!

发表于 2020-9-1 22:31 | 显示全部楼层
这是例程吧?你的代码在哪里?看不出你是怎么设置的,不好帮忙。
发表于 2020-10-25 10:46 | 显示全部楼层
请问,大佬,你怎么实现的10个CAN节点之间的相互通信
发表于 2020-10-25 10:53 | 显示全部楼层
请问怎么实现10个CAN节点之间的通信的
 楼主| 发表于 2020-10-25 17:12 | 显示全部楼层
lyc_123 发表于 2020-10-25 10:53
请问怎么实现10个CAN节点之间的通信的

https://arduino.ncnynl.com/archives/201605/2081.html
我现在也是小白,我的实验也是从这个网上例程改的,你看看。
 楼主| 发表于 2020-10-25 17:20 | 显示全部楼层
本帖最后由 helloword1111 于 2020-10-25 17:23 编辑
homer76 发表于 2020-9-1 22:31
这是例程吧?你的代码在哪里?看不出你是怎么设置的,不好帮忙。

#include <SPI.h>
#include "df_can.h"

const int SPI_CS_PIN = 10;
MCPCAN CAN(SPI_CS_PIN); // Set CS pin
unsigned char flagRecv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];
void setup()
{
Serial.begin(115200);
int count = 50; // the max numbers of initializint the CAN-BUS, if initialize failed first!.

do {
     CAN.init();   //must initialize the Can interface here!
     CAN.init_Mask(MCP_RXM0, 0, 0x3ff);                         // there are 2 mask in mcp2515, you need to set both of them
     CAN.init_Mask(MCP_RXM1, 0, 0x3ff);
     /*
      * set filter, we can receive id from 0x04 ~ 0x09 except for 0x06
      * // there are 6 filter in mcp2515,so it can filter six id,i.e.0x04~0x09.
      */
     CAN.init_Filter(MCP_RXF5, 0, 0x09);                         // filter 5 for id = 0x09
     if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
     {
         Serial.println("DFROBOT's CAN BUS Shield init ok!");
         break;
     }
     else
     {
         Serial.println("DFROBOT's CAN BUS Shield init fail");
         Serial.println("Please Init CAN BUS Shield again");

         delay(100);
         if (count <= 1)
             Serial.println("Please give up trying!, trying is useless!");
     }

}while(count--);

attachInterrupt(0, MCP2515_ISR, FALLING); // start interrupt


/*
  * set mask, set both the mask to 0x3ff
  */

}

void MCP2515_ISR()
{
flagRecv = 1;
}

unsigned char data[] = "node 2";
void loop()
{
if(flagRecv) // check if get data
{
flagRecv = 0; // clear flag
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf

     Serial.println("\r\n------------------------------------------------------------------");
     Serial.print("Get Data From id: ");
     Serial.println(CAN.getCanId());
     for(int i = 0; i<len; i++)    // print the data
     {
        
         Serial.write(buf);
         Serial.print("\t");
     }
     Serial.println();
}   

// send data:  id = 0x08, standrad flame, data len = 8, data: data buf
CAN.sendMsgBuf(0x08, 0, sizeof(data), data);
delay(1000);                       // send data per 100ms
}

你好,这个是接收模块的例程程序,我的就是用着个程序,这个程序的说明是这样的“node 2只接收id 为0x09的数据帧和发送id为0x08且数据为”node 2“的数据帧”
我在实验时发现,无论发什么ID过来,这个接收点都会接收到,所以想问问怎么设置滤波。

完整的资料在这个网站:https://arduino.ncnynl.com/archives/201605/2081.html
发表于 2020-10-26 21:56 | 显示全部楼层
方便留个联系方式吗。方便交流
发表于 2020-10-28 10:33 | 显示全部楼层
helloword1111 发表于 2020-10-25 17:20
#include
#include "df_can.h"

#include "df_can.h"这个文件在哪里下载的啊
 楼主| 发表于 2020-10-28 12:31 | 显示全部楼层
lyc_123 发表于 2020-10-28 10:33
#include "df_can.h"这个文件在哪里下载的啊

这个我也没有,我用的是另一个,把函数名改一下就可以用了

MCP_CAN.rar

12.9 KB, 下载次数: 8

发表于 2020-10-29 20:50 | 显示全部楼层
请问大佬实现滤波功能了吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 11:42 , Processed in 0.080684 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表