18F14K50 I/Oポートの設定(入力の制御)スイッチ

Alexander Fox | PlaNet FoxによるPixabayからの画像

 18F14K50の入力制御についてまとめました。出力と異なりportレジスタで読み取り制御をするため,入力と出力の記事を分けることにしました。Bootloaderを使ったプログラミングだとRB4とRB5は、入力として利用できないので注意してください。原因不明で、現在も検証中です。

I/Oポートの概要

I/Oポートについては、すでに出力制御で記事にしているのでそちらを参考にしてください。

I/Oレジスタの構造

 入力は、下記のようにマイコンへ入力されます。Dフリップフロップと3ステートバッファーで制御されています。
 InputBufferを通過してD型フリップフロップへ入力します。※詳しくは、下記のリンクより
※「EN」が1のときに、Dの値を取り込み「EN」が0のときに、入力を保持します

18F14K50のデータシートより

回路図

 実験した回路図です。今回は、RB4へ接続しようとしましたが、RB4とRB5で上手く制御できなく、RB6となりました。回路図の修正ができず大変申し訳ありません。Bootloaderを利用しなければ普通に動作します。

プログラムの設定

 PICマイコンは、TRISレジスタで入力か出力を決定します。PIC18F14K50は、「Aポート」「Bポート」「Cポート」があるので、下に示したサンプルのように全てのポートへ設定します。

 出力に設定:0
 入力に設定:1

サンプルプログラム

 Bootloaderを使ったプログラミングのため、そのままコピー&ペーストしても動作できないので注意してください。Bootloaderについては、下記のリンク先の記事を参考にしてください。

#include <xc.h>
#define _XTAL_FREQ 48000000
#define SW PORTBbits.RB6
void main(void) {
        
//ポートセット 出力のみであれば、全て『0』を設定する
    TRISA = 0b00000000;          //LEDの接続されているポートを出力に設定
    TRISB = 0b01000000;          //LEDの接続されているポートを出力に設定
    TRISC = 0b00000000;          //LEDの接続されているポートを出力に設定
     
    LATA = 0;                    //PortAのすべてのビットを「0」
    LATB = 0;                    //PortBのすべてのビットを「0」
    LATC = 0;                    //PortCのすべてのビットを「0」
    
    while(1){      
        if(SW == 1){
            LATCbits.LATC0=1;
            __delay_ms(500);
            LATCbits.LATC0=0;
            __delay_ms(500);
        }
    }  
    return;
}

まとめ

 今回の実験では、RB4とRB5が入力として利用することができませんでした。Bootloaderを使わなければ問題なかったのですが、どいうわけか、RB4とRB5が入力として機能しませんでした。
 
 確認したこと
  ・オートプルアップを停止
  ・通信機能を停止

 RB4とRB5については、さらにアナログ機能も持っていますが、18F14k50はレジスタでピンの指定をすることでアナログとなる仕様なので、なぜ動作しないのか理解できません。さらに、Bootloaderを使わなければ、同じプログラムが動作するので、より「???」状態となりました。かれこれ1時間程度悩みながら原因を特定しようと試みましたが、解決に至らずであきらめることにしました。
 また、時間があるときに原因を特定できるように努力しようかなと思いました。よって、Bootloaderを使ったプログラミングの場合、気を付けて作業をするようにしてください。

 Bootloaderのプログラムをしっかり読まないとだけなのか??

Follow me!

18F14K50 I/Oポートの設定(入力の制御)スイッチ” に対して1件のコメントがあります。

  1. Twicsy より:

    I am not sure where you're getting your info, but
    good topic. I needs to spend some time learning more or
    understanding more. Thanks for wonderful info I was looking for this information for my
    mission.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です