大実験その4

先日の大実験では、サーボモータのコントロールに入る前の段階に入った。

サーボモータの回転角をはかり、それをカウントするカウンタ回路からの情報を取ってきて、それをコンソール上に表示するプログラムだ。

それがなかなかうまくいかなかった。入ってくる情報が12bitで、最上位桁が符号桁。
正方向の回転角を処理するのは、そんなに難しくなかった。
8bit*2portで入ってくるうち、上位8桁を入れるポートからは上の4bitにはLSBから数えて4bit目と同じ値が入っているだけなので、上の4bitの値は取らないようにマスク処理。

で、その値をint型の変数にぶち込んで、8bitシフト処理して、下位8桁を加える。それによって16bitのうちきちんと12bitを使えるようにはなった。
しかし、このままだと上にも書いたとおり、負方向の回転がうまく表示できない。カウンタが0から減っていくと、例えば、5,4,3,2,1,0,…のように減っていくとすると、期待したいのは、0,-1,-2のように続いていくことであるが、上で書いたような処理だけだと、0,4095,4094,…のようになってしまい、アンダーフローしているように見えてしまう。

激しく格好が悪いので、C言語でハードウェア関係の物を使用するときに便利な、論理和論理積・ビット反転などを使って、やっと完成した。時間がかかりすぎた。改めて、プログラミング能力の大切さ、必要性を感じた。

こんな感じで、これから電気系としてやっていく自信がなくなってきた。