質問編集履歴
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -57,7 +57,7 @@
|
|
57
57
|
/*
|
58
58
|
* set mask, set both the mask to 0x3ff
|
59
59
|
*/
|
60
|
-
CAN.init_Mask(0, 0, 0x3ff);
|
60
|
+
CAN.init_Mask(0, 0, 0x3ff); // there are 2 mask in mcp2515, you need to set both of them
|
61
61
|
CAN.init_Mask(1, 0, 0x3ff);
|
62
62
|
|
63
63
|
|
@@ -114,4 +114,53 @@
|
|
114
114
|
この関数の結果、どういった計算で受信できるIDが変化したのか教えてください。
|
115
115
|
|
116
116
|
<受信したID>
|
117
|
-
0x000~0x0ff、0x400~0x4ff
|
117
|
+
0x000~0x0ff、0x400~0x4ff
|
118
|
+
|
119
|
+
###追記2
|
120
|
+
マスクとフィルタの演算内容をC言語で書き直してみました。
|
121
|
+
こんな感じでしょうか?
|
122
|
+
|
123
|
+
```C
|
124
|
+
#include <stdio.h>
|
125
|
+
|
126
|
+
#define MASK0 0x3ff
|
127
|
+
#define MASK1 0x3ff
|
128
|
+
|
129
|
+
#define FILT0 0x004
|
130
|
+
#define FILT1 0x005
|
131
|
+
#define FILT2 0x006
|
132
|
+
#define FILT3 0x007
|
133
|
+
#define FILT4 0x008
|
134
|
+
#define FILT5 0x009
|
135
|
+
|
136
|
+
int main(void)
|
137
|
+
{
|
138
|
+
int cnt = 0;
|
139
|
+
|
140
|
+
printf("<受信可能CAN-ID>\n");
|
141
|
+
|
142
|
+
for (int id = 0x000; id <= 0x7ff; id++)
|
143
|
+
{
|
144
|
+
if (((MASK0 & FILT0) == (MASK0 & id)) || ((MASK0 & FILT1) == (MASK0 & id)))
|
145
|
+
{
|
146
|
+
printf("%.3x ", id);
|
147
|
+
cnt++;
|
148
|
+
}
|
149
|
+
else if (((MASK1 & FILT2) == (MASK1 & id)) || ((MASK1 & FILT3) == (MASK1 & id))
|
150
|
+
|| ((MASK1 & FILT4) == (MASK1 & id)) || ((MASK1 & FILT5) == (MASK1 & id)))
|
151
|
+
{
|
152
|
+
printf("%.3x ", id);
|
153
|
+
cnt++;
|
154
|
+
}
|
155
|
+
|
156
|
+
if (cnt == 0x10)
|
157
|
+
{
|
158
|
+
printf("\n");
|
159
|
+
cnt = 0;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
char end = getchar();
|
164
|
+
return 0;
|
165
|
+
}
|
166
|
+
```
|
1
title
CHANGED
File without changes
|
body
CHANGED
@@ -104,4 +104,14 @@
|
|
104
104
|
/*********************************************************************************************************
|
105
105
|
END FILE
|
106
106
|
*********************************************************************************************************/
|
107
|
-
```
|
107
|
+
```
|
108
|
+
|
109
|
+
###追記
|
110
|
+
CAN.init_Mask(0, 0, 0x300);
|
111
|
+
CAN.init_Mask(1, 0, 0x3ff);
|
112
|
+
|
113
|
+
マスク関数の引数を上記に変更したところ、受信したIDは以下のようになりました。
|
114
|
+
この関数の結果、どういった計算で受信できるIDが変化したのか教えてください。
|
115
|
+
|
116
|
+
<受信したID>
|
117
|
+
0x000~0x0ff、0x400~0x4ff
|