にほんブログ村 その他趣味ブログ 電子工作へ

2009年02月15日

PWMとタイマー割り込みの両立

Ticolla CDE には非同期的なタイマー(DELAY_SEC なんかとは違って、プログラム実行中もカウントしてくれるタイマー)がなく、自分で割り込みルーチンを書いてタイマーを作る必要があります。ただし、Ticolla CDE がモーターのPWM制御でタイマーを使ってしまっているため、PWM を使うとタイマー割り込みがかかりません。
なんとかPWM とタイマー割り込みの両立が出来ないか模索していましたがやっと出来るようになりました。
(1) INTERRUPT_INIT();の後でCH0IE = 1;とやると TCH0 の割り込み(_TCH0_Interrupt)がかかるようになります。大体 24hz 程度で割り込みが入るようです。(H/W 定義で PWM が指定されている必要があります)
(2) ただし、MOTOR_SETSPDやMOTOR_SPD を呼ぶとタイマーをリセットするので割り込みがかからなくなります。このため、MOTOR_SETSPDやMOTOR_SPDのあとで CH0IE = 1; します。そうすると割り込みが再開します。タイマーがリセットされているので正確なタイマーを作ることは出来ませんが、ないよりはましでしょう。また、MOTOR_SETSPDやMOTOR_SPDのあとで割り込みがかかるまえにMOTOR_SETSPDやMOTOR_SPDすると当然割り込みはかかりません。
(3) CN11 の PWM が TCH1, CH6 の PWM が TCH0 使っているので、割り込み周期の変更は出来ないと思います。
(4) JRT-104 は TCH0 と TCH1 以外に TCH2 と TCH3 の2本のタイマーが使えますが、割り込み処理のためには Vectors.h や TicollaLib.c に手を入れないと無理なので現実的ではありません。割り込みではなく、TCH2 と TCH3 のタイマーカウンタを読み取ることも出来そうに思いますが、まだやってません。
PWM 使わないと、結構好き勝手に TCH0 と TCH1 使えそうですが、現在の使用方法では PWM 使えないと意味のない局面が多いので、これもやってみてません。
posted by モッパー at 19:59| Comment(0) | TrackBack(0) | ロボデザイナー
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26775325
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
にほんブログ村 その他趣味ブログ 電子工作へ