PICのタイマ機能の比較。

PICは世代ごとに実装されている機能が微妙に違ってきているので、機能をきちんと把握しないとあとで苦労することになります。
今回は自分用に、PIC16F1619とPIC16F18346のタイマ機能を比較してみました。
なお、Bloggerは組み込みのテーブルツールなどがないので、テーブルの作成は HTML Table Generator を使ってみました。

まずはLibreOffice Calcで表を作成し、これをCSVで保存します。HTML Table GeneratorにCSVファイルをインポートして、各種装飾を施し、その出力をクリップボードにコピーして貼り付けます。

まず最初にPIC16F1619。これはCuriosity Development Boardに付属してくるPICです。

PIC16F1619のタイマー構成
TIMER0 TIMER1/3/5 TIMER2/4/6
機能 8bit Timer/Counter 16bit Timer/Counter 8bit Timer/Period
タイマーレジスタ 8 bit
TMR0
16bit
TMR1H/1L
8bit
TMR2
ピリオドレジスタ なし なし 8bit
PR2
プリスケーラ 3bit
1/1 – 1/256

2bit1/1, ½, ¼, 1/8
3bit
1/1 – 1/128
ポストスケーラ - - 4bit
1/1 – 1/16
クロック 各種選択可
EXTCLKエッジ選択
T1CKI入力
Fosc
Fosc/4
LFINTOSC
4bit
12種類から選択可
ステータスフラグ
割り込み要因 オーバーフロー
TMR0IF
オーバーフロー
TMR1IF
マッチ
PR2
リセット/リスタート あり 14種類から選択可
T2RST
ゲート制御 ゲート極性選択
トグルモード
シングルパルスモード
値ゲート
ゲートイベント割り込み
その他 TMR1のゲートとして使用可 コンパレータ出力
ADCトリガー
フリーランカウンタ
ワンショット
モノステーブル
PWMとして利用可
機能としては、大きくTIMER0、TIMER1/3/5、TIMER2/4/6で分かれていることがわかります。またTIMER0は8bitタイマ/カウンタです。

一方、PIC16F18346は以下のようになります。
PIC16F18346のタイマー構成
TIMER0 TIMER1/3/5 TIMER2/4/6
機能 16bit Timer/Counter
8bit Timer/Counter/Period
16bit Timer/Counter 8bit Timer/Period
タイマーレジスタ 8 or 16( selectable)
16 (TMR0H/TMR0L)
16bit
TMR1H/1L
8bit
TMR2
ピリオドレジスタ 8bit
TMR0H
なし 8bit
PR2
プリスケーラ 4bit
1/1 – 1/32768
2bit
1/1, ½, ¼, 1/8
2bit
1/1, ¼, 1/16, 1/64
ポストスケーラ 4bit
1/1 – 1/16
- 4bit
1/1 – 1/16
クロック 3bit
7種から選択可
T1CKI
Fosc
Fosc/4
Fosc/4
割り込み要因 マッチ(8bit)
またはオーバーフロー(16bit)
オーバーフロー
マッチ
PR2
出力 ピンまたは他のペリフェラル
リセット/リスタート あり
ゲート制御 ゲート極性選択
トグルモード
シングルパルスモード
値ゲート
ゲートイベント割り込み
その他 コンパレータ出力
ADCトリガー
Capture/Compare
MSSPxのシフトクロックとして使用可
TIMER0は16bitタイマ/カウンタと8bitピリオドタイマの切り替えができるようになっています。つまり、16bitタイマ/カウンタが4つと8bitタイマが3つ、もしくは16bitタイマ/カウンタが3つと8bitタイマが4つの組み合わせから選択できることになります。

mTouchのCVD実装ではピリオドタイマとしてTMR2/4/6を選択できるようになっていましたが、PIC16F18346 を使えば TMR0 も選択肢に入れられそうです。ただし、MCCでは 2/4/6 からのみ選択できるようになっているので、その部分は自分で実装しないといけません。CuriosityでmTouchを試してみる。その4で、
他のタイマに変更できないのか、できるとすればどうすればいいのかはちょっと調べてみたいと思います。
と書きましたが、MCC上から簡単にできました。mTouchのAFAの設定でタイマを指定できるようになっています。またAFA(Automatic Frequency Adaptation)を使用しない(つまりソフトでゴリゴリ実装する)方法も選ぶことができますが、これだとタイミングを正確に取れないのでやめたほうがよさそうなのですが、もしかしてTMR0を使うならこの方法を使うしかないのかもしれません。その場合、AFAで何をやっているのかをソースを追いかけて、同様の処理をTMR0で実現すれば使えるのかも。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...