エンハンストPIC16キターーッ

納期が4月だったエンハンストPIC16だが、先日何故かPIC16F1827だけ来た。

今まで作ってきたライブラリなどを移植しようといろいろ画策中なのだが、移植の際に注意する点がいろいろあったのでここに覚え書きとしてメモしておく。

HI-TECH PIC-C PROのC言語の開発を中心にしているが、他の開発環境でも関係するところはあると思う。

・機能が一緒またはほぼ一緒でレジスタ名が変わっているものがある。とりあえず今見つけた分だけは定義し直して使用する

#define OPTION OPTION_REG
#define GODONE    GO_nDONE
#define T0IE    TMR0IE
#define T0IF    TMR0IF

・PORTxのかわりにLATxが使えるようになった

PIC18系などにあるLATxが使えるので気がついたら置換する

・AD変換関連で、ADSEL,ADSELHレジスタの仕様が大幅に変わった

アナログ機能を使用するかどうかはチャンネル毎ではなくポート毎の設定に変わったので、ANSELxで指定。

具体的な例では、F88などではPORTB6はアナログチャンネル5なので、ADSELのbit5をセットしていたのだが、F1827ではADSELがなくなってANSELBのbit6をセットすることになる。ソースコードは全面見直しが必要となる。

・32MHzの内蔵クロックが使えるようになった

クロックを4倍にするPLLが内蔵されたことで32MHzまで内蔵でいけるようになったが、設定にははまりどころがあるので注意!

まず、PLLを使用するためには内蔵クロックを8MHzにする必要があること。最高16MHzまで持っているんだけどね。

でもってOSCCONレジスタの下位2bit(SCS)の設定がデータシートによると次のように書いてある。

bit 1-0 SCS<1:0>: System Clock Select bits
1x = Internal oscillator block
01 = Timer1 oscillator
00 = Clock determined by FOSC<2:0> in Configuration Word 1

ここで、はまるのが一番上の内蔵オシレータブロックを使用するにすると何故か32Mにならない。

よーくデータシートを読めばわかるんだけど、一番下のFOSCで設定するというのにしないとPLLが使えないらしい。

しかもCONFIG2にPLLをオンにするってのもあったりするのに、このSCSが00でないと、いくら他のところでPLLをオンにしても使えないのである。

逆に言えばいくらCONFIG2でPLLをオンにしてもOSCCONの設定が間違っていれば意味がないということになる。

ここは迷わず

OSCCON=0b11110000;

とすることをおすすめする。これでCONFIG2のPLLの設定がオフでもオンになる。

__CONFIGでFOSC_INTSCを入れるのを忘れないようにね!!

・クロックが速くなったことによる障害

今までせいぜい20MHzくらいしか経験してなかったため気がつかなかった問題がいろいろありそうだ。

まず、LCDモジュールの制御でEビットのON時間。今までクロックが遅かったのでそのままH→Lしてもあまり問題がなかったのだが、32MHzは速い。最低Hタイムを満足できない。モジュールによっては400ns必要なものもあるので、必要数NOP();を入れることをお忘れなく!32MHzではNOPひとつ125nsである。

またLCDモジュールにもよるが、RSやデータをセットしてからEをHにするまでのデータセット時間が140nsってのもあるので、NOPをひとつ入れた方がいいかもしれない。

AD変換クロックも当然のことだけど設定し直しとなる。ちなみに1/32にすると8MHzでも同じ設定で使える。

  1. 秋月からPIC16F1827とPIC16F1823が発売されたみたいだ。でもRSの1823は未だに納品されない・・・。キャンセルするかな・・・
    これからPICするなら16F88なんか使うのはアホじゃな。ましてや16F84なんか使ってる人もいっぱいいるから信じられんw。俺はもともとF84系の18ピンPICはピン配置が気に入らないので好きではないから、8,14,20ピンのものを多用してる。今使っている16F684や16F688はポイしてこれからは16F1823だな。
    でもメモリが多いやつも発売が予定されているので大量購入はちょっと待った方がいいかもっw

  1. 2011年 2月 5日

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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