2012年3月11日日曜日

1でdisなフラグの謎

PIC18F2550でRB0を入力として使ってた時にハマったおかしな点

ADON = 0; ADCON1 = 0;
としていて デジタル出力として正常に使えていたのでそのまま使っていた
そして入力として使おうとした時 なぜか常に0になる
んで データシート見て気がついた
ADCON1 = 0;ってアナログ入力じゃん

ええ 初期設定がアナログだから0にしてアナログをオミットかと思ったら
デジタルを有効にするために1を設定
なのね
PICって時々「1で無効にする」ってのがあるよね...
多分これ前も引っかかったよなぁ…

ということで PIC18F2550ですべてデジタルポートとして使う場合
ADCONbits.ADON = 0; ADCON1 = 0x0F;
というのが正解
ADCON1の下位4bitが0でアナログ 1でデジタルになる
上位2bitは無効 上位3-4がVREFで これは0で
なのでADCON1 = 0x0F;
詳しくは データシート265ページあたりの
"10-BIT ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE"
を参照してくだされ

16Fのアナログ入力に慣れてると
18Fのアナログ入力は意外と厄介なので
使う場合はまずデータシートを見てください
16のように「好きなポートをアナログに」っていう設定ができないので

では
PICで前にもやらかしたバグを再発させたという恥さらし覚書でした

0 件のコメント:

コメントを投稿