JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC16F18326 MCC IOC割り込みテスト

2024-01-24 07:43:49 | MPLAB X MCC
 PIC16F18326のIOC(ピン状態変化)割り込みのテストをします。

 テストする回路です。
 RC3の電圧変化を検知し、RC2に接続したLEDを点滅させてみます。
 RC3は内部でウィークプルアップ(WPU)しますので、プルアップ抵抗はつけていません。
 

 MPLAB X でprojectを作成し、MCCを立ち上げて各種設定をします。

 systemモジュールです。クロックは4MHzにしました。

 RC3をinputに、RC2をoutputに設定します。

 Interruptモジュールです。
 IOC割り込みを使いますので、IOCI Enabledにチェックを入れます。


 
 pinモジュールを設定します。
 RC3をウィークプルアップするため、WPUにチェックを入れます。
 割り込みのタイミングをIOC欄で立下り(negative)に設定しました。


 設定が終わったら、Generateし、main.cにプログラムを記入します。

プログラムです。ピンに状態変化が起きると割り込みが発生し、
 IOCCF3_SetInterruptHandler(LED_toggle);で指定されたルーチンを実行します。今回は、RC3の電圧の立下りで割り込みが発生し、LED_toggle()が実行されます。
----------------------------------------------------
/*
 * PIC16F18326 MCC IOC Interrupt test
 * 2024.01.23
 * JH7UBC Keiji Hata
*/

#include "mcc_generated_files/mcc.h"
#define LED LATC2

void LED_toggle(){
     __delay_ms(10);//チャタリング待ち
     if(RC3 == 0){
         LED = !LED;
    }
}

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     // Enable the Global Interrupts
     INTERRUPT_GlobalInterruptEnable();

     // Enable the Peripheral Interrupts
     INTERRUPT_PeripheralInterruptEnable();
     IOCCF3_SetInterruptHandler(LED_toggle);
     LED = 0;

     while (1)
    {
    }
}
----------------------------------------------------

 機械的なスイッチには、接点が閉じたり開いたりするときにチャタリングという現象が生じます。RC3のタクトスイッチを押したときの電圧波形です。
 スイッチをチョンと押したときで、接点が閉じている時間は約100ms(0.1s)です。この波形ではチャタリングは見られませんが、押し方によっては、立下りと立ち上がりにギザギザのチャタリングが発生します。
 ということで、、チャタリング待ちの時間は10msとしました。


 ブレッドボードです。SWを押すたびにLEDが点灯したり消灯したりします。チャタリングの影響は、ほとんどありません。



最新の画像もっと見る

コメントを投稿