首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino & SeeedStudio CAN总线屏蔽

Arduino & SeeedStudio CAN总线屏蔽
EN

Stack Overflow用户
提问于 2015-01-26 08:40:33
回答 1查看 2K关注 0票数 0

我已经把我的CAN总线屏蔽连接到了我的加热系统上,我正在从公共汽车上获取数据。

这起作用了(我想)。但是,我无法得到我想要的数据。请看附图。

可打开数据

CAN总线日志

它说它正在与CAN一起运行,节点应该是80 (0X50十六进制)。但是,当我在仅显示节点80的数据的筛选器上时,我将得不到任何数据。

另外,当我尝试不使用过滤器时,我将不会从模块中获得任何数据!

它还说它每1s发送一次心跳。这是我在Node id 1862年(0X746十六进制)上找到的。

如何从模块读取数据。

从屏蔽中读取的代码:

代码语言:javascript
复制
#include <SPI.h>
#include "mcp_can.h"

INT32U canId = 0x000;
MCP_CAN CAN(9); 

unsigned char len = 0;
unsigned char buf[11];
char str[40];


void setup()
{
    Serial.begin(38400);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_125KBPS))
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(100);
        goto START_INIT;
    }
}


void loop()
{
    if(CAN_MSGAVAIL == CAN.checkReceive())  
      {
        CAN.readMsgBuf(&len, buf); 
        canId = CAN.getCanId();

               Serial.print("<");
              Serial.print(canId);
              for(int i = 0; i<len; i++)
                {
                  Serial.print(",");
                  Serial.print(buf[i]);
                }
            Serial.print(">");
            Serial.println();
      }
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-30 22:10:12

代码是正确的,但是mcp_can库和兼容屏蔽有一个可能的问题。最初的种子工作室屏蔽使用16 MHz晶体,但市场上还有其他兼容模块,并不是所有的模块都使用16 MHz晶体,有些使用8 Mhz。

因此,首先检查您想要使用的CAN模块,如果它在8 MHz上运行,您必须在初始化时调整速度设置。在这种情况下,如果需要从运行在125 kb/s上的CAN总线读取CAN消息,则必须在初始化过程中设置CAN.begin(CAN_250KBPS)

代码语言:javascript
复制
...
   if(CAN_OK == CAN.begin(CAN_250KBPS))
...

检查是否有CAN HI和LO是否正确连接。这可能是另一个问题。检查您的SPI_CS_PIN是否正确设置(在您的scetch是CS上的引脚9)。

然后,您应该通过在总线上发送CAN消息来检查您的连接/速度/CS--该消息必须由您的CAN总线嗅探器捕获。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28146874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档