過去の恥ずかしい記録をまとめました。

デジタル降魔録TOPページ





-過去ログは古い順に並んでいます-


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のほうは、作者急病のため休載とさせていただきます。


ウソ吐け……  ( ̄ω ̄;)