読者です 読者をやめる 読者になる 読者になる

信大ロボ研のブログ

信州大学ロボット研究会のブログです。

梵天丸アセンブラ制御研究報告4回目


こんにちは、2年のたぬです。

メカトロで遊ぶ会が開発した『PIC16F84Aを使っている入門者向け自律走行ロボットキット』である『梵天丸』をアセンブラ言語によって制御する計画の中間報告4回目らしいです。

本日の成果は以下の通りです。
DIPスイッチを使用したプログラムの切り替えに成功
●PIC内臓の弱プルアップのプログラムに成功

PIC16F84AのポートBには、弱プルアップが内蔵されています。(なぜ弱なのかはわかりません)
OPTION_REGレジスタのbit7(RBPU)が、これの設定用です。
デフォルトで1が書き込まれ、このときはポートBは全て内部プルアップ使用不可状態です。
逆に、初期化処理の際にでもbit7に0を書き込むと、ポートBは全て内部プルアップ使用可状態になります。

たった一つのビットをセットするかクリアするかによって、プルアップの有無が変わってしまうなんて……
PIC16F84Aって面白いですね。

また、このOPTION_REGレジスタでは、
●RB0からの割り込み条件設定
●なんかよくわからない設定
●プリスケーラ(=なんかよくわからない)の設定
ができます。
なんかよくわからない設定については、これから勉強します。
OPTION_REGレジスタとは、PICの特殊レジスタの1つです。
バンク1(ページ1)にあり、上記のようなよくわからない設定をできます。
MP_ASMでしたら、バンク0設定後、BSF等のオペランドに「OPTION_REG」と書けばそのレジスタを参照してくれます。

とりあえず、内部プルアップを使用できるようになったので、いちいち回路のほうでプルアップしなくてもよくなりました。
もちろん、回路でプルアップしておけばプログラムミスによる誤動作を回避できますが、たった1つbitを操作するだけですので、忘れることも、ミスすることもないでしょう。

梵天丸のDIPスイッチは、回路でプルアップされていません。
回路図を見たとき、おもわず「はぁ?」とか言ってしまいました。
内部プルアップに気付いた時は、「ああ、なるほど」と思いましたが、さすがメカトロで遊ぶ会です。
梵天丸は、元々アセンブリでプログラムを書くロボットではありません。
梵天丸専用の言語でプログラムを書き、専用のライターでプログラムを書き込むのが、普通の使い方です。この専用言語には、プルアップがどうのとかは全然出てきません。なにせ、「日本語で書ける」「単語数が圧倒的に少ない」「非常に構造的で分解して理解しやすい」というメリット付きですから。当然複雑なことはさせられませんが、入門者向けキットなので全く問題なしです。
なので、プルアップのプログラムミスを心配する必
要が無いんですね。
そういうことから、わざわざ回路でプルアップしてコストを高くして回路を複雑にするよりは、ずっとメリットが大きいのだと、私は考えています。

割り込み処理は、実力的に当分無理っぽいので、しばらくはPICの研究に没頭すると思います。

梵天丸と、ライター。私の梵天丸は初期版の奴です。
かなり古いですが、普通に動作してます。