前回製作したDigisparkとPro MiniのUSBゲームパッドですが、しばらく使用していると突然USB機器として認識されない現象が発生しました。こうなるとDigisparkを抜き差ししても、PCを再起動しても再認識されなくなります。でも、しぱらくして再度接続すると認識されることもあったりして、全く安定動作してくれません。
複数のデバイスを接続したのでもしかしたら電力不足なのかもと思い、Digisparkの外部電源に9V 600mAのACアダプターをつないで確認してみたのですが、改善されることはありませんでした。
原因がよく分からなかったので、Digisparkにぶら下げているPro Miniに接続するデバイスに問題があるかもと考え、基盤から電子部品を取り除いてマトリックス配線を引き出したテンキーや、基盤のパターンをカットしてスイッチの配線だけを取り出したゲームパッドで確認してみました。
結果は同じでした。
その後色々試してみて、DigisparkのI2Cの処理がとても遅いことに気が付きました。Pro MiniからI2Cでデータを送るときに、8バイトまとめて送らずに1バイトごとウェイトを入れて送ると動作が安定したからです。DigisparkのUSBデバイスはソフトウェアによる実装なので、相乗効果でより遅くなっているのかもしれません。結局、長時間動作させるには1000ms(1秒!!)くらいウェイトを入れないとだめでした。これではゲームパッドのレスポンスが悪くなって使い物になりません。がっかりです。
そこで次にシリアル通信を利用しようとしたのですが、ソフトウェアシリアル(ハードウェアシリアルはUSBで使われている)とジョイスティックライブラリを一緒に使うとコンパイル時にエラーが発生してしまいます。同時に使えないみたいです。
結局レスポンスを求めるデバイスを使うときは、通常のデジタル入出力であまり負荷をかけないように送受信しないとだめな感じです。実装するのは面倒なのでまた後で試してみましょう。
ところで前回のUSBゲームパッド、そのまま安定して使えないのはしゃくなので、今度はファミコンパッドをDigisparkに直接つないでみました。今回は長時間使用しても、突然認識されなくなるようなことはありませんでした。
スケッチは前回作成したものを手直ししただけですが、一応アップしておきます。
Attiny85NESpad.ino
NESパッド → Digisparkピン
2 DATA → 0
3 LATCH → 1
4 CLOCK → 2
6 5V → VCC
8 GND → GND
ファミコン互換機のゲームパッド以外に、以前Pro Microに接続したことのあるファミコン用ジョイスティックもつなげてみました。
なんの問題もなく動作しています。
利用する上での制約はありますが、Digisparkはこのサイズと価格でUSB機器が作れるというのは魅力ですね。LeonardoやPro Microの出番が減りそうです。
最新の画像[もっと見る]
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ラスベリーパイのベアメタル環境でLVGLを使う 5日前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
- ILI9341搭載のタッチパネルをLVGLで利用する 2週間前
※コメント投稿者のブログIDはブログ作成者のみに通知されます