今回は、前回届いたプリント基板にはんだ付けをします。マイクロマウスは基板が小さいのでほとんどの部品が表面実装部品です。これをリフロー(基板にクリームはんだを塗って部品を載せた後、全体を熱してはんだ付けする方法)で実装します。リフロー実践それではさっそくやってみましょう。次のものを用意します。無水エタノールキムワイプステンシルとは、はんだを載せるところに穴が開いた型板です。Elecrowでプリント基板と一緒に発注しました。ステンシルを無水エタノールとキムワイプで綺麗に拭きます。これを基板と一緒にネオジム磁石で台に固定します。クリームはんだを塗布します。小さなヘラで上からできるだけ一様に塗っていきます。塗り終わったらピンセットで一つ一つ電子部品を載せます。足の多い部品ほど難易度が高いので先にやると比較的楽と聞いたので、ここではマイコンから先に置いています。リフロー炉として一般的なホットプレートを使います。(※はんだは健康に良いものではないので、リフローに使ったホットプレートは食用には使わないようにしましょう。)ほとんど初めてのリフローなので、1、2個失敗するだろうと見越して3個作ります。はんだ付けができたものがこちらです。見るとマイコンがずれていたり、はんだブリッジしていたり、セラコンがチップ立ちしていたりと残念な出来です。この後、はんだごてを当てて修正し、なんとか使いものになる基板が1個だけできました。(あらかじめ3つ作っておいて良かった...。)次回できた基板にプログラムを書き込んで、LEDを点滅させてみたいと思います。今回はサンプルプログラムSTEP4の中身を確認していきたいと思います。メインプログラムの全体像を確認します。37~43行目の_LED関数の定義は下図の様になっています。led_dataの値によってLEDの点灯条件を制御しています。LED0は、led_dataと1を&で比較していますので、led_dataの値が2進数で1桁目が1になった時、点灯します。LED1は、led_dataを1つ右ビットシフトした後、1と比較していますので、led_dataの値が2進数で2桁目が1になった時、点灯します。LED2は、led_dataを2つ右ビットシフトした後、1と比較していますので、led_dataの値が2進数で3桁目が1になった時、点灯します。LED3は、led_dataを3つ右ビットシフトした後、1と比較していますので、led_dataの値が2進数で4桁目が1になった時、点灯します。”>>”はビット演算子の一つで、”右ビットシフト”と呼ばれます。右辺の値分だけ右にビットをずらします。右側の枠からはみ出た値は消えます。(オーバーフロー)led_dataの中に入る値は、64行目で_LED(mode)と呼び出されています。modeの値は53行目で初期値を1と決めています。そのため、led_dataの値は最初1となり、”LED0=1&1”となりますので、電源を入れたらLED0のみ値が1となり点灯します。次に55行目からの無限ループの中身ですが、まず57行目では、関数wait_msを使って待ち時間を作っています。CHATTERING_WAITの中身は、static_parameters.hファイルで10と定義されていますのでwait_ms(30)が引数となります。58行目、DISABLE_BUZZERの中身は、macro.hでブザーを止めに行っているだけです。60行目は、Part8でも紹介したので、そちらを見てください。wait_msはmisc.cファイルで定義されています。先ほど定義された引数wait_ms(30)を例にとるとwtimeは30となります。start_timeはtimerの値を代入しており、timerの中身はextemで別のフォルダで宣言されています。このプログラムを読まれた瞬間からtimerが30カウントしたら値がfalseとなりますので、whileから抜け出せることが出来ます。timerの定義は下記ですが、int_cmt0が読み込まれるタイミングはcmt(コンペアマッチタイマ)で制御されています。cmtは、設定したカウント数に達した時、何らかのアクションを割り込ませる為の機能です。割り込みされたプログラムは、メインプログラムを中断して優先的に処理されます。