16F648Aについて
628の改良型ですが、628より機能アップしています。
877とかに近いような感じですが、16F84とピン配置が同じなので、ほぼそのまま動くようです。
外部発信器が不要に
84Aは入門用などに有名ですが、外部に発信器が必要です。
(つまり、ICがあっても発信器がなければ使えない)
628,648は12F675などと同様に、外部に発信器がなくても動作するのが惹かれるところです。(付けたければ外部発信器をつけてもいい)
4Mまでの内部発信器ができます。84で OSC1,2 となって発信器に取られていたピンも使用できる!
ピン数の少ない16F84より、2ピン増えるので、これも大きな利点です。
また、値段も今はかなり安くなっています。84Aより機能が多くて安いです。
(2009/7/1では PIC16F88がAD変換もあって更にいいでしょう)
書きこみ(ライター)は?
PICに書きこみをする環境は
いままで通り、 ここで作った
RCDライタ(要アダプタ)、正統派パラレルライタ(AN589) が対応していて
ライターソフト
PICProg4U 、IC-Porg、 PICer も対応していて書き込めます。 (もちろん、秋月ライターでも)
私のパソコンではRCDライタではまたもや書きこみできませんでした。正統派パラレルライタ(AN589)でできた
(* RCDライタでの PIC16F648 の書き込みは 書き込みにはアダプタ制作する必要あるとのこと)
機能も増えた
ピンの名称を見るとおり、機能も増えています。
コンパレータ、タイマー1 など、 (しかし、バンク切り替えも増える。。)
84には無かったかなりの機能が増えています。これは強力です。
16F84Aのプログラムを実行してみる
今までの、簡単なサンプルをそのまま、648Aでためしてみます。
もちろん全く同じでは動きません。
ヘッダやアドレスなど少しは変える必要があります。 少し手直ししてビルドし直し、という程度の設定です。
でも、そのあたりと少しを押さえれば、これまでの豊富なサンプルが多い16F84のプログラムはそのまま動くでしょう。
(* RCDライタでの書き込みは PIC16F628-648 書き込みにはアダプタ制作する必要あるとのこと
変更するところ
ライターソフト PICProg4
PICの型の変更は ↓デバイス の部分で16F648Aにしましょう
内部発信器の設定
内部発信を使用するときは、最初の CONFIG 部分でします(またはライタソフトで書きこみ直前に選択チェック)
12F629/675は内部発信の製造誤差はICによって個々に違うので、その補正値の数値があらかじめ発信データが工場出荷時にPICのメモリのスミにに書き込まれています。
16F628,648は内部発信器の補正値はないようです。
たぶん精度は補正値なしでも保たれているのでしょう。より正確な時間が必要な場合は外部発信器をつけるしかないです。
ヘッダファイル
LIST P=PIC16F648A
INCLUDE "P16F648A.INC" ;標準インクルードファイル読み込み
の部分を使用するPICに合わせて変更する
アドレスマップ
プログラムはそのまま動くハズですが、RAM開始アドレスが16F84と違うので注意点です。
648は開始アドレスを H’20’ にする必要があります。
またEEPROM使用の場合も変える必要があるでしょう。
その他
84と628,648はピンが互換ですが、そこが要注意です。
共用のピンが多いので、16F84の使用ピンによってはは注意が必要です。
RA0 は デフォルトで CMCONになっています。
RA0などデフォルト設定になっていないポートはレジスタ設定を加える必要があります。
トラブルにハマりこまないように、使用する各ピンは冒頭に設定、確認しておく方がよいでしょう。
LEDのスイッチ入力点灯テストサンプル と 割り込みをひな形で使うサンプル をテストしてみたところ
たいした機能を使ってないので、この程度は動きますが、特殊な何かをやってると動かないことがあるかもしれません。
プログラム変更 16F84 → 16F648
テストプログラム 1LEDスイッチ入力
先頭部分
HP_PIC648_LedTest.asm
;**********************************************************************
LIST P=PIC16F648A ;PIC16F648を使う
INCLUDE "P16F648A.INC" ;標準インクルードファイル読み込み
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _MCLRE_OFF
;**********************************************************************
CBLOCK H'20' ;16F628開始RAMアドレス
W_TEMP ;W退避変数
STATUS_TEMP ;STATUS退避変数
;
CNT1
DATA1
ENDC
;----------------
テストプログラム の LED点滅を 16F648A用にして内部発信でやってみました。
変更点は色文字部分。
この84Aのプログラムは RA0 と RB1を使用しています。
上記リンクで確認できるように RA0 は デフォルトで CMCONになっています。
ここのレジスタ設定を加えています。この設定がなければ正常動作しないのは注意です。
また、他のピンもデフォルトでいけると思っているとトラブルのモトになります。移植の時は注意しましょう。
このプログラムはプログラムメモリを使用してないのでアドレスを変更する必要はなかった。
2.タイマーひな形 LED点灯
HP_PIC648_tm0Test_FMTLED.asm
;**********************************************************************
LIST P=PIC16F648A ;PIC16F648を使う
INCLUDE "P16F648A.INC" ;標準インクルードファイル読み込み
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _MCLRE_OFF
;**********************************************************************
CBLOCK H'20' ;16F628開始RAMアドレス
W_TEMP ;W退避変数
STATUS_TEMP ;STATUS退避変数
変更点は黒文字部分。
RAM開始アドレスを 20H に変更しています。
その他は冒頭部分だけで、変更はナシでできました。
ただ、発信周波数が4Mへの落ちたので、タイマー間隔が延び、点滅間隔が長くなっています
- twtter
- google+
- hatena