回答編集履歴
3
誤字の修正など
test
CHANGED
@@ -112,9 +112,9 @@
|
|
112
112
|
|
113
113
|
```
|
114
114
|
|
115
|
-
SSの制御は
|
115
|
+
SSの制御は上位で行ってください。
|
116
116
|
|
117
|
-
SPIの制御は、いくつかパターンがあります
|
117
|
+
SPIの制御は、いくつかパターンがあります。センサーに合わせて実装する必要がありますので注意してください。上記は、あくまで一例です。
|
118
118
|
|
119
119
|
|
120
120
|
|
@@ -127,7 +127,3 @@
|
|
127
127
|
|
128
128
|
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
2
サンプルの追記
test
CHANGED
@@ -54,6 +54,71 @@
|
|
54
54
|
|
55
55
|
|
56
56
|
|
57
|
+
---
|
58
|
+
|
59
|
+
サンプル(すみません、コンパイルもしていません)例
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
```C
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
#define SS_CLK ...
|
68
|
+
|
69
|
+
#define SS_MOSI ...
|
70
|
+
|
71
|
+
#define SS_MISO ...
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
unsigned char ss_transfer(unsigned char write_data)
|
76
|
+
|
77
|
+
{
|
78
|
+
|
79
|
+
unsigned char i;
|
80
|
+
|
81
|
+
unsigned char input_data;
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
SS_CLK = 0; /* アイドル時は CLK = L */
|
86
|
+
|
87
|
+
for(i = 0; i < 8; i++)
|
88
|
+
|
89
|
+
{
|
90
|
+
|
91
|
+
SS_MOSI = (write_data & 0x80) ? 1 : 0;
|
92
|
+
|
93
|
+
SS_CLK = 1; /* CLK = H */
|
94
|
+
|
95
|
+
delay(); /* 必用ならディレイ */
|
96
|
+
|
97
|
+
SS_CLK = 0; /* CLK = L */
|
98
|
+
|
99
|
+
input_data <<= 1;
|
100
|
+
|
101
|
+
input_data += SS_MISO;
|
102
|
+
|
103
|
+
write_data >>= 1;
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
return input_data;
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
```
|
114
|
+
|
115
|
+
SSの制御は用意で行ってください。
|
116
|
+
|
117
|
+
SPIの制御は、いくつかパターンがありますのでセンサーに合わせて実装する必要がありますので注意してください。上記は、あくまで一例です。
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
ソフトによるSPI通信は、検索すればいろいろ転がっているようですので、調べてみるのも面白いでしょう。
|
57
122
|
|
58
123
|
|
59
124
|
|
@@ -66,4 +131,3 @@
|
|
66
131
|
|
67
132
|
|
68
133
|
|
69
|
-
|
1
追記します
test
CHANGED
@@ -17,3 +17,53 @@
|
|
17
17
|
|
18
18
|
|
19
19
|
おそらく、現状はセンサ側の CS をアサートした瞬間にセンサがバスを操作してしまい、その結果、同じSPI回線を使用しているUSBが切断されてしまっている状況だと思います。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
対策?を追記
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
現状の構成や部材のままの前提で、対策を考えると、
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
プロセッサで使用可能な残りのリソースは TWI と I2C ですが、どれも8回線分には無理があると思います。
|
36
|
+
|
37
|
+
センサー側の仕様を見ると確かに I2C には2個までしかぶら下げられないようですね。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
となると、GPIOポートを使ってソフトウェアでI2CかSPIを実現する位しか思い浮かびませんが、I2Cはいろいろ面倒になりそうなので、SPIを1回線3本分と SSが8つで、合計 11本のGPIOを確保すれば実現できると思います。それぐらいは、あまっていますよね?
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
応用がわからないのですが、ハード駆動の通信を、ソフト駆動の通信に変更しても、応答速度はそれほど劣化しないと思いますが、問題になるでしょうか?
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
また、写真を拝見すると、SSが繋がっていないようですが、デバッグ用に1本だけ? それとも、見えないところにデコーダーがある?
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
SPIのソフトウェア実装については、それほど難しくは無いと思います。おそらく100行前後で出来ると思います。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|