「RCサーボ」の続きです。 今回はTIMER3のオーバーフローで発生する高位割込み処理です。 ポート出力を切り替え、データ・メモリー上に予め準備されたデータをTIMER3に設定して割込み処理を抜けることで、RCサーボ制御信号を作り出します。 < PICデバイス=PIC18F1320 >
RCサーボ信号の出力端子は RB2 を使います。 データ・メモリーは下図の 5byte を使いますが、10行目の rcscnt は2個以上のRCサーボを使う時用で今回は利用しません。 他は制御信号が High 及び Low の間の TIMER3 設定値で、各々2byte 必要です。 この 4byte をメイン処理で書き換えるだけで、RCサーボの制御角を変化させることが出来ます。
下図は、TIMER3で動作する高位割込み処理のアセンブラ・ソースです。 これまでに紹介してきた汎用イベントタイマー( TIMER0 )とLCD用のタイマー( TIMER2 )は低割り込みを使っています。 高位割り込みは、低位割込み処理中にも発生しますから、TIMER3 を高位割込みに設定することで、他の割込み処理時間の影響を無くする狙いです。
今のところ、高位割込みは TIMER3 でしか発生しませんから、割込み要因による分岐はありません。 割込みフラグをクリアして、RB2の値を調べて分岐します。 分岐先ではRB2 の状態を切り替えて TIMER3 のカウンター値を書き換えた後に割込み処理を抜けます。
ここで注意したいのは TIMER3 のカウンター値変更の際には必ず上位8bitを先に設定することです。 TMR3H の値は、TMR3Lを書き換えた時に16bit同時に更新される仕組みに成っているからです。
下図は TIMER3 の初期設定を行っているアセンブラ・ソースです。 必要な設定と共にTIMER3を動作させ、最初の図に示したワークを初期化して、TIMER3 を高位割込みに設定後、割込み許可しています。
以上のプログラムで、既にRCサーボを制御しています。 MPLABのデバッカーで Run の後で一旦 Halt して最初の図の時間設定値(4byte)を書き換えて再び Run すればRCサーボの停止位置が変化するはずです。
RCサーボの割込み処理についての説明を終わります。
RCサーボ関連記事のインデックスはこちらです。 → RCサーボ
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
RCサーボ信号の出力端子は RB2 を使います。 データ・メモリーは下図の 5byte を使いますが、10行目の rcscnt は2個以上のRCサーボを使う時用で今回は利用しません。 他は制御信号が High 及び Low の間の TIMER3 設定値で、各々2byte 必要です。 この 4byte をメイン処理で書き換えるだけで、RCサーボの制御角を変化させることが出来ます。
下図は、TIMER3で動作する高位割込み処理のアセンブラ・ソースです。 これまでに紹介してきた汎用イベントタイマー( TIMER0 )とLCD用のタイマー( TIMER2 )は低割り込みを使っています。 高位割り込みは、低位割込み処理中にも発生しますから、TIMER3 を高位割込みに設定することで、他の割込み処理時間の影響を無くする狙いです。
今のところ、高位割込みは TIMER3 でしか発生しませんから、割込み要因による分岐はありません。 割込みフラグをクリアして、RB2の値を調べて分岐します。 分岐先ではRB2 の状態を切り替えて TIMER3 のカウンター値を書き換えた後に割込み処理を抜けます。
ここで注意したいのは TIMER3 のカウンター値変更の際には必ず上位8bitを先に設定することです。 TMR3H の値は、TMR3Lを書き換えた時に16bit同時に更新される仕組みに成っているからです。
下図は TIMER3 の初期設定を行っているアセンブラ・ソースです。 必要な設定と共にTIMER3を動作させ、最初の図に示したワークを初期化して、TIMER3 を高位割込みに設定後、割込み許可しています。
以上のプログラムで、既にRCサーボを制御しています。 MPLABのデバッカーで Run の後で一旦 Halt して最初の図の時間設定値(4byte)を書き換えて再び Run すればRCサーボの停止位置が変化するはずです。
RCサーボの割込み処理についての説明を終わります。
RCサーボ関連記事のインデックスはこちらです。 → RCサーボ
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。