2015-01-26 5 views
0

Я подключил экран CAN-BUS к моим системам отопления, и я получаю данные от автобуса.
Это работает (я думаю). Однако я не могу получить данные, которые я хочу. См. Прикрепленные фотографии.Arduino & SeeedStudio CAN-BUS Shield

CAN-open data

CAN-Bus Log

Он говорит, что он работает с CAN открыть и узел должен быть 80 (0x50 шестигранной). Однако, когда я помещаю фильтр, который показывает только данные с узла 80, я не получу никаких данных.
Также, когда я пытаюсь без фильтра, я не получу никаких данных из модуля!

В нем также говорится, что он посылает пульс каждые 1 с. и это я нашел в Node id 1862 (0X746 hex).

Как читать данные с модуля.

код для чтения с экрана:

#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(); 
     } 
} 
+0

Этикетки и 'goto' действительно имеют свое место. Использование их вместо петель не является таким местом. –

+0

Извините, Joachim Я не совсем понимаю, о чем вы говорите! –

+0

Это не связано с вашим вопросом, но не используйте 'goto' как способ реализации циклов. –

ответ

0

код является правильным, но есть одна возможная проблема с библиотекой mcp_can и совместимых экранов. Оригинальный экран Seed-Studio использует 16-мегагерцовый кристалл, но на рынке есть и другие совместимые модули, и не все они используют кристалл 16 МГц, вместо этого используют 8 МГц.

Поэтому сначала проверьте CAN-модуль, который вы хотите использовать, и в случае, если он работает на частоте 8 МГц, вам нужно отрегулировать настройку скорости при инициализации. В таком случае, если вам нужно прочитать CAN сообщения от CAN шины, работающей на 125 кб/с, которые вы должны установить CAN.begin (CAN_250KBPS) в инициализации:

... 
    if(CAN_OK == CAN.begin(CAN_250KBPS)) 
... 

Проверьте, если у вас есть CAN HI и CAN LO правильно подключены. Это может быть другой проблемой. Проверьте, правильно ли установлен ваш SPI_CS_PIN (в вашем scetch находится CS на выводе 9).

Затем вы должны проверить свое соединение/скорость/CS, отправив сообщение CAN на шине - сообщение должно быть уловлено вашим сниффером CAN-шины.