20pin PIC 18F14K50をUSB不使用で使用する場合に、データシートによるとPORTAのRA0とRA1はデジタル入力として使用できるはずですが、手持ちのPICでUSBをdisableにしてもデジタル入力として機能しませんでした。外部抵抗でプルアップしてRA0、RA1を読み出すと常に0になります。5VでプルアップしてテスターでPICの足の電圧を測定すると3.6V付近を示しています。データシートの読みが不十分なのではと思い、何回も読み直しましたが結局わかりませんでした。

マイクロチップのフォーラムを検索してみると同じ問題に遭遇した人がいました。下はフォーラムへのリンクです。

http://www.microchip.com/forums/tm.aspx?m=367163&mpage=1&key=18f14k50&#367163

どうやらバグのようです。最新の18F14K50では不明ですが少なくとも現在所有しているものはこの現象がでます。USBを使わない場合に、16F88でIOが足りない場合に18F14K50が便利に使えると考えていたので残念です。

–その後(解決)–

先週の日曜日の午後に時間があったのでデーターシートを読み返していくと関係ありそうな記述がありブレッドボードにて確認しました。当初RA0,RA1をDIとして使うにはデータシートに「Bits RA0 and RA1 are available only when USB is disabled.」このような記述があったので、

UCON.USBEN = 0;      // USB使わない

のようにUSBを無効にしてただけでしたが、今回データシートを読み返したときに、

In order for the digital inputs to function on the RA<1:0> port pins, the interrupt-onchange
pins must be enabled (IOCA<1:0> = 11) and the USB module must be disabled (USBEN = 0).

このように注意書きされているのを見つけました。そこで初期化部分を

UCON.USBEN = 0;      // USB使わない
 // IOCA
 IOCA.B0 = 1;
 IOCA.B1 = 1;

として、IOCAのビット0とビット1をセットしてみるとRA0,RA1が入力として機能するようになりました。データシートの読みが足りなかったようです。

ただ、IOCAレジスタはINTERRUPT-ON-CHANGE PORTA REGISTERで、ポートAの立ち上がり、立下りでの割り込みの有効、無効を設定する部分なのでこのレジスタが関係してくるとは思ってもいませんでした。