目次
前
次
ソフトウエア構成
本ボードのソフトウエアは、次のフローで実現します。
- 初期化
- タイマー割込み発生検出時、パルス出力処理
- シリアルコマンド検出時、パルス幅再設定
- 2に戻る
トップレベルの処理(main関数)は、以下とします。
void main(void)
{
/* initialize port and variables */
initialize();
/* endless loop */
while ( TRUE ) {
/* send pulse to servo motors */
if ( tflag == ON ) {
tflag = OFF ;
send_pulse();
}
/* serial communication process */
if ( sflag == ON ) {
sflag = OFF ;
proc_serial();
}
}
}
パルス出力処理
各サーボモータに、パルスを出力するのは、タイマー
割込みで実現します。タイマー割込みが発生すると、
次のシーケンスを実行します。
- 内蔵カウンタ初期化
- ステートマシン用変数stateインクリメント
- 変数stateが200になったら0にもどす
- フラグ設定
フラグが設定されると、ステートマシンを呼び出します。
コマンド処理
受信割込みを利用し、1文字ずつバッファにコマンド
を格納していきます。
次のシーケンスを実行します。
- 受信した1文字入力
- 受信した1文字をバッファに格納
- バッファインデックスをインクリメント
- インデックスが5になったら0にもどす
- フラグ設定
デリミタ('\r')を検出したならば、フラグを設定し
main関数内部で、パルス幅を設定します。
目次
前
次