学校では教えてくれない電子工作のデバッグ

[eeic Advent Calendar 2017 その2](https://qiita.com/advent-calendar/2017/eeic2) の4日目の記事です。
弊学科、eeicでは電子情報機器学という電子工作などをやる授業がありまして、回路動かないと苦しんでいる人が多いのでこの記事を書いてみました。

最近は Arduino や RaspberryPi の普及でプログラミングしかできなくても気軽に電子工作ができるようになりました。しかし、qiita の記事の通りに回路を組んでプログラムも書いたのに、動かない！動かないけどどうすればいいかわからない！という経験があるかと思います。
![alt](https://1.bp.blogspot.com/-5hZXSbCKzuo/V2ubVl1mB6I/AAAAAAAA7n4/7o2SqTLxEoQHvt8RPp8G2fN8aq7npEVNgCLcB/s400/computer_monku.png)

# デバッグの基本的な考え方
**どこが悪いのかを切り分けて考える！**
これに尽きます。電子工作はハードウェアもソフトウェアも絡んでいてどこがおかしいのか見つけるのがとても大変なのでとても大事な考え方です。
この考え方はソフトウェアでも一緒かなと思います。
# 原因別解法
火のないところに煙は立ちません。なにかしらの原因があるはずです。思いつく限りの原因を分類して書きます。
## 部品を仕様通りに使っていない
### 配線が違う
データシートの仕様を確認するのが正攻法ですが、データシートを読むのは初心者には大変なので色々な人の作り方の記事を漁ってその回路と比較するのが早かったりします。（上達するならデータシートを読むのに慣れましょう！）
![alt](http://4.bp.blogspot.com/-g03Q02G0l-w/UqmP9zSRTTI/AAAAAAAAbo4/Cp3btLoxjNk/s400/takoashi_haisen.png)
### 仕様通りの電圧や電流を供給できていない
上と一緒です。[Raspberry Pi の壊し方](https://qiita.com/uhey22e/items/91f6ec6f0668e3c7f222)
![alt](http://4.bp.blogspot.com/-2QmoTeSTks8/VY4Wfs9c5DI/AAAAAAAAuq4/ALS8FVp_ROA/s400/car_denki.png)
### デジタル回路の場合、指示されたフォーマットでデータを送受信していない
デジタル信号を扱う部品は、仕様通りのデータを送らないと全然うまく動きません。部品のデータ受信サンプルコードを動かしたり、ロジックアナライザで信号の中身を見たりします。
![alt](https://1.bp.blogspot.com/-eMLID2dYzwM/VwIgW_nlilI/AAAAAAAA5bY/-osLYuNceb4GArB0E5Cl1D4oYMVDNVKIw/s400/question_head_boy.png)
## 部品の挙動がおかしい
### そもそも部品が故障している
部品に過電圧や過電流をかけたり、静電気で故障していたりします。ほとんどの場合はショートをさせて過電流が流れたことによる故障です。故障によって発生する現象は様々なので難しいです。わかりやすいときは発熱しますし、わかりにくいときはプルアップ・プルダウン設定がうまくいかない、というときもあります。
![alt](http://3.bp.blogspot.com/-llkzYXNn-Pw/UdEeSzbwvTI/AAAAAAAAVsM/av-bDZGJHiA/s400/jiko_car_kosyou.png)
### たまたま部品が異常な状態になっている
リセットをかけてあげたり、電源を入れなおすと直ります。
![alt](https://1.bp.blogspot.com/-SyYINAiR5SU/WJmxG8iOv_I/AAAAAAABBk0/LgYJfr3eXR4JkJOqjgTxkkNH72f6HfM5wCLcB/s400/slump_bad_woman_music.png)
# 実際のデバッグ方法論
デバッグはお金を積むと楽になります。[Analog Discovery](http://akizukidenshi.com/catalog/g/gM-10135/)という万能測定ツールがあるととても便利です。
## 五感を研ぎ澄ませる
### やること
- 嗅覚→焦げ臭くないか？
- 触覚→部品が熱くないか？
- 視覚→煙をあげていたり、やけに光輝いていないか？
- 味覚→回路は絶対味見しないでください
- 聴覚→変な音は鳴っていないか？

**ひとつでも当てはまっていたらすぐさま電源を切ってください！**
これらの現象が起きている場合、回路に重大なダメージを与える現象が発生しています。
![alt](https://2.bp.blogspot.com/-7PJvvjISGDA/WFo_G_PjyHI/AAAAAAABAjw/rO0kKNwWUbIDeMWhsMX8FkuwZvjwWyTqACLcB/s450/landmark_honnouji_fire.png)
### 考えられる原因
配線が間違っている、部品が故障している

## 部品が期待どおりの動きをしているか計測する
正攻法のやり方です。動かない原因が複数あっても原因を着実に究明できる一方、計測機器が必要だったり、計測するのが大変だったりします。この方法でどこの素子が悪いのかをこれで見定めます。
### やること
- オシロスコープやロジックアナライザで波形を見ます。これが期待通りの波形となっているかをみます。これらの測定機器がない場合は最悪テスタも使えます。
- 入出力のどっち側が故障しているかわからない場合、切り分けて測定をします。例えば出力端子は正しい値を出しているのに、入力側が無理矢理入力をVDDに引っ張ろうとするために波形がおかしくなることもあります。
![alt](http://2.bp.blogspot.com/-sbPIONsjBsg/VoX5YlZkrWI/AAAAAAAA2VE/knjEide7gc0/s400/machine_oscilloscope.png)

## 怪しいところを確実に動くものに置換して試す
裏技的（？）です。動かない原因が一つならいいですが、複数ある場合は迷宮入りしたりします。その一方でデジタル信号を扱う部品は信号のプロトコルが決まっていて、そのプロトコルが正しいかを解析するのも一苦労だったり、然るべき計測機器が手元にないときに手っ取り早くできることもある手法です。
### やること
- 新しい部品に交換
- アナログ信号を出力するセンサーだったら2Vを出力する回路を用意して接続
- ロジックアナライザで部品の仕様で決められているフォーマットの信号を出す
- プログラムがおかしい可能性もあるので、ほかのサンプルコードを試す

# 実際にあった怖いバグ
筆者が遭遇した迷宮入りしたバグとその解決までの流れを紹介します
## なぜかマイクの音がとれない事件
マイコンでデジタルマイクから信号がなぜか正しく取得できないという現象がありました。やったことを順に紹介します。
### 信号の波形を見てみる
ロジックの電圧が3.3Vだったのに、信号がなぜか1Vくらいになっていて、リセットを押すとたまに正常に動いたりしました
### 入力と出力を切り分けてみる
入力と出力を切り分けて波形を見てみました。
そうすると、出力の波形は正しい波形がでていることがわかりました。つまり入力がなにかしら悪いということです。
### 入力の挙動を見てみる
うまくいくときといかないときがあったので、そのときに入力の波形がどう変わるかを見ました。すると、正しく動くときは入力側の電圧が3.3Vに、動かないときは入力側が0Vになることがわかりました。
### ここで考える
出力側がプルアップになっていて、 [(プルアップについてはこちら)](https://qiita.com/kasei-san/items/2b95b60597ce6b153d61) 入力がプルダウンになっていることがわかりました。
この状況だと信号が分圧された状況になっているのです。
### ソフトウェアの設定を確認
使用していたマイコンはプルアップ・プルダウンの設定を選べたので、その設定を確認しました。これでも状況は改善しません
### 使用するピンを変えてみる
マイコンの入力ピンを変更してみたところ、動きました！
### 結論
ピンが壊れていたみたいです



# 最後に
電子工作初心者へ：
　あまりこの記事はピンとこなかったかもしれません、最初は五感で回路を観察するのが大事で、これはすぐできるかと思います。そして経験を積むとだんだん第六感が働くようになるので、経験をひたすら積むのみです。最初はまわりの電子工作できるひとにデバッグを付き合ってもらうとだんだん考え方が身につくのではないかと思います。この記事をみて順番にデバッグするのもいいと思います。
電子工作上級者へ：
　誤解を生んでしまう表現があったり、網羅がまだまだできていないことがあると思います。アドバイスがあったらコメントしていただけると幸いです！一緒に素晴らしいデバッグマニュアル書にしていきましょう！