-過去ログは古い順に並んでいます-
2014年 2月11日(火)8℃(午前5時10分)
877と887では大違い・・・
デジタル降魔録はPICユーザーを応援します。とか言っておきながら全然応援していないじゃないか、とお怒りの諸兄姉さま。おまちどうさまでした。今回はそっち系のネタを持ってきました。
遅すぎた感、満載ですが──。
最近、夏と冬のあいだの名前から始まる電子部品通販会社さんですが……。部品の値段が上がってきているような気が……なんとなくします。
例えばPICの売れ筋だった16F877Aの値段がどんと上がって、
「えー。何でやねん」となっていませんか?
そこで──。
「ほんなら。同じF877Aの上位品種、F887なら値段が安いし……。同じような名称で、超怪しいけど使ってみようか」
と手を出した方はおられませんか?
あるいは手を出そうとして躊躇している方に。
はっきり言いっます。F877Aのソースプログラムそのままではちゃんと動きません。
かといって、命令が変わっているワケでもありませんが、そのままでは絶対にまともに動かないのです。
ひと~つ。
人の生き血を。。。。ではなくて。
ひとつは、コンフィグレーションビットの割り当てが変わっています。それも1ワードから2ワードになっています。
なので、まともに動かなくて当たり前なんです。
ところがそれを修正してもまだ動きません。どこがピンコンパチやねん、と暴れたくなりますが──。
このPIC。どこが大きく変わったかというと、高速な内蔵クロックが使用可能になって、外部オシレータを使わなくても内部だけで8MHzまで動くようになっています。でも877Aの代わりに使おうと思っているのなら、この辺りはデフォルトの設定で外部オシレータ使用になり、F877Aと同じになります。
他にも──。
内蔵クロック使用にすればクロックの入力端子が余るので、ポートとして使えるじゃないか。
とか──。
内部リセットならリセット端子もポートにしたい。という要求に答えてそのような設定も追加されていますが、それもデフォルトのままでF877Aと同じになります。
でもまだ動かないのです。
その理由は──。
デジタルピンとアナログピンの切り替え設定レジスタに大幅な変更が入って、以前の設定レジスタ以外に増えています。そしてなぜか、増えたほうに肝心のデジタル、アナログの切り替えビットが割り振られています。なのでそちらを正しく設定して、初めてF877Aと同じように動き出します。
夏の次に訪れる季節が名前についた通販さんのページからデータシートがダウンロードができますので調べてみてください。
ただし恐怖の英文資料ですので悪しからず……。
それによると、F887はCONFIG1とCONFIG2に分かれたうえに、ビット位置までも全て変更されています。
アナログ入力ポートも8チャンネルから14チャンネルに増えたせいで、ADCON0、ADCON1の内容が変化して、さらにANSEL、ANSELHにアナログピンセレクトが移動しています。
ここは設定ビットを1にするとアナログ、0にするとデジタルピンに設定されますので、その辺りも適切に設定しないとうまく動きません。
あと細かいところでは──。
ポートBの弱いプルアップ(この弱いという意味がいまいちピンときませんが……)が、ピン別に設定できるみたいです。
そしてウォッチドッグタイマーに専用のプリスケーラーが付いたため、プリスケーラーをTMR0に割り当てると、特に設定しなくても16mSでウォッチドッグタイムアウトになります。
ポートBの変化割り込みもピンごとにできるようですし、USART周辺もチョコチョコ変わっているようですが、特殊な使い方でない限り、CONFIGの修正とデジタル/アナログの設定さえちゃんとすれば16F877Aの代わりに使えそうですね。
オマケ……。
下記はMPLAB IDEをインストールした時にできる、Microchipフォルダ下にある、MPASM Suiteフォルダ内にある『P16F887.INC』ファイルから抜粋した部分です。
CONFIG1、CONFIG2の使用例として参考にしてください。
;==========================================================================
_CONFIG1 EQU H'2007'
_CONFIG2 EQU H'2008'
;----- Configuration Word1 ------------------------------------------------
_DEBUG_ON EQU H'1FFF'
_DEBUG_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'2FFF'
_FCMEN_ON EQU H'3FFF'
_FCMEN_OFF EQU H'37FF'
_IESO_ON EQU H'3FFF'
_IESO_OFF EQU H'3BFF'
_BOR_ON EQU H'3FFF'
_BOR_NSLEEP EQU H'3EFF'
_BOR_SBODEN EQU H'3DFF'
_BOR_OFF EQU H'3CFF'
_CPD_ON EQU H'3F7F'
_CPD_OFF EQU H'3FFF'
_CP_ON EQU H'3FBF'
_CP_OFF EQU H'3FFF'
_MCLRE_ON EQU H'3FFF'
_MCLRE_OFF EQU H'3FDF'
_PWRTE_ON EQU H'3FEF'
_PWRTE_OFF EQU H'3FFF'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FF7'
_LP_OSC EQU H'3FF8'
_XT_OSC EQU H'3FF9'
_HS_OSC EQU H'3FFA'
_EC_OSC EQU H'3FFB'
_INTRC_OSC_NOCLKOUT EQU H'3FFC'
_INTRC_OSC_CLKOUT EQU H'3FFD'
_EXTRC_OSC_NOCLKOUT EQU H'3FFE'
_EXTRC_OSC_CLKOUT EQU H'3FFF'
_INTOSCIO EQU H'3FFC'
_INTOSC EQU H'3FFD'
_EXTRCIO EQU H'3FFE'
_EXTRC EQU H'3FFF'
;----- Configuration Word2 ------------------------------------------------
_WRT_OFF EQU H'3FFF'
_WRT_256 EQU H'3DFF'
_WRT_1FOURTH EQU H'3BFF'
_WRT_HALF EQU H'39FF'
_BOR21V EQU H'3EFF'
_BOR40V EQU H'3FFF'
list p=16f887
;上記のコンフィグレーションワードから自分の希望するものを選んで、下記のように並べるとライターへ送るHEXファイルに組み込まれます。※マイクロチップ社製以外のライターを使っている場合は反映されるかどうか不定です。
__CONFIG _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF
& _BOR_ON & _CPD_ON & _CP_ON & _MCLRE_ON & _PWRTE_ON & _WDT_ON & _HS_OSC
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
今年に入ってからガネーシャからの依頼が集中して、やけに忙しくてしょうがありません。
『ガネーシャ』って何者って言う方は、トップページ左サイドにあるサイト内検索で調べてみてください。いっぱい出てきます。簡単に言うと昔からの友人で、デザイン会社を経営する社長さんなんだけど、デジタル系の仕事が入ると、手一杯な彼のスタジオでは捌ききれない。どこかに暇なやつはいないかな?
と、白羽の矢が立てられたのがワタシです。
「アイツなら暇そうにSF書いているからやらせとけ」
という理由です。
だからこちらも相手がクライアントであるにも関わらず、タメグチですからね。
「えー、そんなもん一日でできるかいな」
とか平気で文句を垂れます。
向こうも依頼主なのに、
「頼むからぁー」
なぜか下からものを言います。
でも、
「お前やったらできるから。頼んだぞ」
「おーい」
となって、
ワタシの休日が消えて行くのです。
そこで──身を切る思いですが。
SFのほうは、作者急病のため休載とさせていただきます。
ウソ吐け…… ( ̄ω ̄;)
Copyright(C) 2004 D-Space Keyoss.
All rights reserved.