エンハンストPIC16その後2

Microchipからやっとのことで取り寄せたPIC12F1822だけど、秋月で発売になっちゃった。まぁここらへんは仕方ないとして、教材に使っている12F683の代わりに使ってみることにした。割り込みで2つのタイマーを使って2和音のメロディをAD入力した値によって切り替えるプログラムであるが、そこで、気がついたことを列挙してみる。
以前書いたように自前のライブラリをかなり更新していたのでほとんど直さなくてもいけるんだけど、やはりAD周りがちょっと面倒。

・AD入力するポートのWeakPullupをOFFにする

前に書いたとおりONにしているとAD値がおかしくなるので確実にOFFにしておく。また、ANSELA値も適切にセット

・タイマ割り込み間隔の調整

まずはタイマ0。今まではプリスケーラを1/16にして使っていたのだが、クロックが8MHzから4倍の32MHzになったので、1/64に変更する。
具体的には、エンハストPIC16を使用するときには_PIC16F182xを定義するようにしてあるので、次のようにする。
if defined(_16F182x)
// TMR0の設定(TMR0割り込み有効:割り込み間隔=4*64*(256-TMR0)/32MHz)
// TMR0=0のとき、割り込み間隔:2.048ms
#define InitTMR0Intr() {TMR0=0;T0IE=1;GIE=1;} // TMR0の割り込み設定
#else
// TMR0の設定(TMR0割り込み有効:割り込み間隔=4*16*(256-TMR0)/8MHz)
// TMR0=0のとき、割り込み間隔:2.048ms
#define InitTMR0Intr() {TMR0=0;T0IE=1;GIE=1;} // TMR0の割り込み設定
#endif
これでタイマ0の初期化を定義できた。メインのプログラムの変更は不要になる。
次はタイマ1だけど、もともとタイマ1は1/8のプリスケールで使っていてこれ以上の設定がないので、TMR1L,Hの値を4倍にすることで対処する。実はもともと12F675を使っていたので12F683にしたときに4MHz→8MHzにしたこともあり、2倍にしてたので、シフトするビット数を1から3に変更するだけで済んだ。
あとはテンポを設定するWait値を4倍にしたりすれば移植は完了した。

  1. トラックバックはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。