Post date: Mar 26, 2014 1:46:21 PM
寒假前訂的 Arduino CAN-Bus shield 開學後終於開始動工測試了。
首先介紹一下外觀,簡潔有力的紙盒包裝,內部也只是一塊簡單的泡棉+腳座,因此沒有特別照下來,這包裝大小大約就是一包菸那麼大,不過由於是側開的,盒子打開之後比較像檳榔盒,總之欣賞一下外國人設計的包裝。
arduino CAN-Bus shield 包裝盒
arduino CAN-Bus shield
拆開包裝後就是赤裸裸的 arduino CAN-Bus shield 本體了,由於本人比較懶惰,討厭寫落落長的程式碼,因此偏好使用 arduino 系列的產品,arduino 出名的簡單好上手又直覺化的程式語言,非常適合新手,而這次測試是使用 arduino-uno 這塊板子來做測,如果對於 arduino-uno 有任何問題請上官方網站查詢,這裡不另說明。
這塊 CAN-Bus shield 是使用 SPI 介面與 arduino-uno 做溝通,而 SPI 最高速率可到達 10MHz 雖然不懂那是啥不過感覺很威,CAN-Bus 部分最高可達 1Mb/s ,支援標準型與擴展型的 CAN frame。
函式庫安裝步驟:
補充:如果使用安裝的方式在 windows 7 的環境下 Arduino 的安裝路徑為 c:\program files (x86)\Arduino\
開始寫程式前稍微介紹一下 CAN Bus frame:
CAN Bus frame (from http://marco.guardigli.it/2010/10/hacking-your-car.html)
每個封包都包含幾個項目
以下簡短介紹實驗中會用到的函式:
// demo: CAN-BUS Shield, send data
#include <mcp_can.h> //引入 mcp2515 函式庫
#include <SPI.h> //引入 SPI 函式庫
void setup()
{
Serial.begin(115200); //設定 serial port baudrate
// init can bus, baudrate: 500k
if(CAN.begin(CAN_500KBPS) ==CAN_OK) Serial.print("can init ok!!\r\n");
else Serial.print("Can init fail!!\r\n");
// 設定 CAN 的 baudrate 為 500k 如果成功由 serial port 回傳 CAN init OK
// 失敗回傳 CAN init fail
}
unsigned char stmp[8] = {2, 1, 0, 0, 0, 0, 0, 0}; //宣告準備送出的 data 內容
void loop()
{
Serial.print("OK!"); //進入 loop 迴圈時由 serial port 送出 OK!! 除錯用
CAN.sendMsgBuf(0x7d, 0, 8, stmp); //設定 ID 為 0x7d,封包為標準型,資料長度 8,資料內容為 stmp[] 陣列
delay(500); // send data per 500 ms
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
將程式碼燒入 arduino-uno 中,然後插上 Simulator 測試
經過一連串麻煩的測試之後確定 CAN-Bus shield 是可以使用的,再來的目標就是修改 mcp_can.h 這標頭檔,讓我們實驗室自行開發的擴充版也可以完整支援 arduino 同時這也是個練功的好機會,希望將來有學弟能接手。
from http://www.seeedstudio.com/wiki/index.php?title=CAN-BUS_Shield&uselang=en