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が点灯したり消灯したりします。チャタリングの影響は、ほとんどありません。
※コメント投稿者のブログIDはブログ作成者のみに通知されます