teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

ライブラリについて更新

2019/07/11 18:42

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -11,6 +11,10 @@
11
11
 
12
12
  [OBD-IIコネクタピン配置](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%BB%E3%83%9C%E3%83%BC%E3%83%89%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%8E%E3%83%BC%E3%82%B7%E3%82%B9#OBD2)
13
13
 
14
+
15
+ >ソフトはArduionoが無償で提供してくれているAPI使いました。
16
+ >https://github.com/Seeed-Studio/CAN_BUS_Shield
17
+ これとは別の[MCP_CAN_lib](https://github.com/coryjfowler/MCP_CAN_lib)を使用したコードに見えますが…
14
18
  CAN0.begin()の第1引数にCAN_STDIDを指定していますが、MCP_ANYかMCP_STDEXTです。
15
19
  MCP_STDEXTと値がたまたま一致していますが…
16
20
  第3引数にMCP_8MHZを指定されていますが、回路図によると16MHzなのでMCP_16MHZとしてください。

6

サンプルスケッチについて追記

2019/07/11 18:42

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,5 +1,3 @@
1
- CAN0.begin()の第3引数にMCP_8MHZを指定されていますが、回路図によると16MHzなのでMCP_16MHZとしてください。
2
-
3
1
  >D-SUB9のピン配列はこちらを参考にしました。
4
2
  >D-SUB9のピンの配列はこのようにしました
5
3
  車両との配線は自作でしょうか。
@@ -11,4 +9,71 @@
11
9
  |CAN-H|6|3|
12
10
  |CAN-L|14|5|
13
11
 
14
- [OBD-IIコネクタピン配置](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%BB%E3%83%9C%E3%83%BC%E3%83%89%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%8E%E3%83%BC%E3%82%B7%E3%82%B9#OBD2)
12
+ [OBD-IIコネクタピン配置](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%BB%E3%83%9C%E3%83%BC%E3%83%89%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%8E%E3%83%BC%E3%82%B7%E3%82%B9#OBD2)
13
+
14
+ CAN0.begin()の第1引数にCAN_STDIDを指定していますが、MCP_ANYかMCP_STDEXTです。
15
+ MCP_STDEXTと値がたまたま一致していますが…
16
+ 第3引数にMCP_8MHZを指定されていますが、回路図によると16MHzなのでMCP_16MHZとしてください。
17
+ StandardID(11bit)決めうちですがこれで良いのでしょうか。
18
+ ネットで拾ったコードを試す前にライブラリに付属のサンプルスケッチで試してみては?
19
+
20
+ ```C
21
+ // CAN Receive Example
22
+ //
23
+
24
+ #include <mcp_can.h>
25
+ #include <SPI.h>
26
+
27
+ long unsigned int rxId;
28
+ unsigned char len = 0;
29
+ unsigned char rxBuf[8];
30
+ char msgString[128]; // Array to store serial string
31
+
32
+ #define CAN0_INT 2 // Set INT to pin 2
33
+ MCP_CAN CAN0(10); // Set CS to pin 10
34
+
35
+
36
+ void setup()
37
+ {
38
+ Serial.begin(115200);
39
+
40
+ // Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
41
+ if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK)
42
+ Serial.println("MCP2515 Initialized Successfully!");
43
+ else
44
+ Serial.println("Error Initializing MCP2515...");
45
+
46
+ CAN0.setMode(MCP_NORMAL); // Set operation mode to normal so the MCP2515 sends acks to received data.
47
+
48
+ pinMode(CAN0_INT, INPUT); // Configuring pin for /INT input
49
+
50
+ Serial.println("MCP2515 Library Receive Example...");
51
+ }
52
+
53
+ void loop()
54
+ {
55
+ if(!digitalRead(CAN0_INT)) // If CAN0_INT pin is low, read receive buffer
56
+ {
57
+ CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
58
+
59
+ if((rxId & 0x80000000) == 0x80000000) // Determine if ID is standard (11 bits) or extended (29 bits)
60
+ sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len);
61
+ else
62
+ sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len);
63
+
64
+ Serial.print(msgString);
65
+
66
+ if((rxId & 0x40000000) == 0x40000000){ // Determine if message is a remote request frame.
67
+ sprintf(msgString, " REMOTE REQUEST FRAME");
68
+ Serial.print(msgString);
69
+ } else {
70
+ for(byte i = 0; i<len; i++){
71
+ sprintf(msgString, " 0x%.2X", rxBuf[i]);
72
+ Serial.print(msgString);
73
+ }
74
+ }
75
+
76
+ Serial.println();
77
+ }
78
+ }
79
+ ```

5

クロック指定について追記

2019/07/11 18:35

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,3 +1,5 @@
1
+ CAN0.begin()の第3引数にMCP_8MHZを指定されていますが、回路図によると16MHzなのでMCP_16MHZとしてください。
2
+
1
3
  >D-SUB9のピン配列はこちらを参考にしました。
2
4
  >D-SUB9のピンの配列はこのようにしました
3
5
  車両との配線は自作でしょうか。

4

ピン番号修正

2019/07/11 18:11

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  車両側OBD-IIコネクタとの接続は以下のとおりですが正しいピンに接続されていますか。
6
6
  |端子|OBD-IIピン|D-SUB9ピン|
7
7
  |:--|:--:|:--:|
8
- |GND|4|2|
8
+ |GND|5|2|
9
9
  |CAN-H|6|3|
10
10
  |CAN-L|14|5|
11
11
 

3

ピン更新、参考URL記載

2019/07/11 17:35

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -5,6 +5,8 @@
5
5
  車両側OBD-IIコネクタとの接続は以下のとおりですが正しいピンに接続されていますか。
6
6
  |端子|OBD-IIピン|D-SUB9ピン|
7
7
  |:--|:--:|:--:|
8
- |GND|4,5|2|
8
+ |GND|4|2|
9
9
  |CAN-H|6|3|
10
- |CAN-L|14|5|
10
+ |CAN-L|14|5|
11
+
12
+ [OBD-IIコネクタピン配置](https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%BB%E3%83%9C%E3%83%BC%E3%83%89%E3%83%BB%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%8E%E3%83%BC%E3%82%B7%E3%82%B9#OBD2)

2

車両側とのピン対応を記載、余計な説明を削除

2019/07/11 17:34

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,15 +1,10 @@
1
1
  >D-SUB9のピン配列はこちらを参考にしました。
2
2
  >D-SUB9のピンの配列はこのようにしました
3
- どちらのピン配置を使用されましたか。
4
3
  車両との配線は自作でしょうか。
5
- 上のD-SUB9端子図に書かれた配線としたのであれば、SJ4,SJ5,SJ6のパターンをカットして切り替えしてありますか?
6
- 回路図SJ4,SJ5,SJ6の切り替えをしなとピン配置は表のOBD-II側のピンにるように描かれています。製品画像でもそのようにパターンが繋がっています。
4
+ 書かれてOBD-IIは車両OBD-IIコネクタ端子番号ではく、市販されているOBD-II<->D-SUB9ケブルのD-SUB9側ピ配置です。
7
- 基板に手を加えないのであれば、表のOBD-II側のピン配置で配線し直してみてください。
8
- また、車両側OBD-IIコネクタの端子は以下のとおりですが正しいピンに接続されていますか。
5
+ 車両側OBD-IIコネクタ接続は以下のとおりですが正しいピンに接続されていますか。
9
- |OBD-II端子|ピン|
6
+ |端子|OBD-IIピン|D-SUB9ピン|
10
- |:--|:--:|
7
+ |:--|:--:|:--:|
11
- |GND|4,5|
8
+ |GND|4,5|2|
12
- |CAN-H|6|
9
+ |CAN-H|6|3|
13
- |CAN-L|14|
10
+ |CAN-L|14|5|
14
-
15
- 市販のケーブルを買われたならD-SUB9端子側は表のOBD-II側のピン配置になっていると思いますが…

1

ピン配置について更新

2019/07/11 17:28

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,5 +1,15 @@
1
1
  >D-SUB9のピン配列はこちらを参考にしました。
2
- 図は表のCAN側のピン配置ですが、
2
+ >D-SUB9のピン列はこのようにしました
3
+ どちらのピン配置を使用されましたか。
4
+ 車両との配線は自作でしょうか。
5
+ 上のD-SUB9端子図に書かれた配線としたのであれば、SJ4,SJ5,SJ6のパターンをカットして切り替えしてありますか?
3
6
  回路図にSJ4,SJ5,SJ6の切り替えをしないとピン配置は表のOBD-II側のピンになるように描かれています。製品画像でもそのようにパターンが繋がっています。
4
- SJ4,SJ5,SJ6のパターンをカットして切り替えしてありますか?
5
- 基板に手を加えないのであれば、表のOBD-II側のピン配置で配線し直してみてください。
7
+ 基板に手を加えないのであれば、表のOBD-II側のピン配置で配線し直してみてください。
8
+ また、車両側OBD-IIコネクタの端子は以下のとおりですが正しいピンに接続されていますか。
9
+ |OBD-II端子|ピン|
10
+ |:--|:--:|
11
+ |GND|4,5|
12
+ |CAN-H|6|
13
+ |CAN-L|14|
14
+
15
+ 市販のケーブルを買われたならD-SUB9端子側は表のOBD-II側のピン配置になっていると思いますが…