2015年07月25日

割り込み処理 -第1回:割り込みとは

Arduinoは色々な部品でできており、その中でもプログラムを実行している頭脳のような部品のことをマイコンといいます。マイコンはArduinoだけでなく多くの機器に使われています。
今回はマイコンが持っている機能の割り込み処理について説明します。


目次



1. 割り込み処理とは

割り込み処理の前にプログラムを実行する流れについて説明します。プログラム1つ1つの動きを処理と呼ぶことにします。プログラムを実行するとこの処理を順番に実行していきます。Arduinoの場合は最後の処理を終えた後、最初に戻ってまた順番に処理を実行していきます。

例えば、Arduinoに処理1〜5まであるスケッチを実行させると、Arduinoはそれらの処理を順番に実行し繰り返します。これが普通の流れです。

処理1 → 処理2 → 処理3 → 処理4 → 処理5 → 処理1 → 処理2 → 処理3 → …


一方、割り込み処理を行う場合は、文字通り別の処理が割り込みます。割り込み処理では、
「ある状態を割り込み条件とし、その条件を満たしたらそれまで行っていた処理を一時中断し割り込み処理を実行する。割り込み処理を終えたら元の処理を再開する」
ということを行います。

例えば、先ほどの処理1〜5まであるスケッチで割り込み処理が実行されるとこのようになります。

処理1 → 処理2 → 処理3 → 『割り込みの条件を満たす(割り込み発生)』割り込み処理処理3の再開 → 処理4 → 処理5 → 処理1 → 処理2 → 処理3 → …

処理3でなくても、割り込みが発生すればいつでも割り込み処理を実行します。

処理1 → 処理2 → 処理3 → 処理4 → 処理5 → 処理1 → 『割り込み発生』 → 割り込み処理 → 処理1の再開 → 処理2 → 処理3 → …


このように割り込み処理を行うことで、ある条件で行いたい処理を即座に実行することができます。


2. 割り込み処理の例

割り込み処理の例として、以前作成した7セグメントLEDを使ったタイマーを割り込み処理に変えた場合を説明します。

元々のスケッチの処理は大きく分けて3つです。この3つを順番に実行しています。
処理1:スイッチが押されたかの判定
処理2:表示する数字を計算
処理3:7セグメントLEDに数字を表示

23_割り込み処理_1.png

これを割り込み処理に変えるために、割り込み条件割り込み処理を加えます。割り込み条件は「スイッチが押された」にしようと思いますので、元々の処理1を削除します。
割り込み条件:スイッチが押されたとき
割り込み処理:スイッチが押された場合の数字を計算
処理1(元処理2):表示する数字を計算
処理2(元処理3):7セグメントLEDに数字を表示

これで割り込み処理を実行できるようになりました。
割り込みが発生しないときは処理1と処理2を実行し続けます。

23_割り込み処理_2.png

スイッチが押される(割り込み発生)とそれまで行っていた処理を一時中断し、スイッチが押された場合の数字を計算(割り込み処理)し始めます。それを終えると、元の処理に戻ります。

23_割り込み処理_3.png

割り込み処理の例の説明は以上です。


3. 割り込み処理の利点

割り込み処理の例として7セグメントLEDを使ったタイマーを説明しましたが、正直に言うと先ほどの例は割り込み処理でやってもやらなくても大して変わりません。割り込み処理の利点は割り込みが発生したら即座に処理が実行されるということです。逆に言えば即座に実行される必要がないのなら割り込み処理は不要です。
先ほどのタイマーの場合、人間がスイッチを押す動作はArduinoがスイッチの入力を処理する動作より遅いので、即座に実行する必要はありません。ですので、わざわざ割り込み処理を使う必要はありません。


割り込み処理の利点が活かせる例はある信号が変化した回数を数えるといった場合です。

割り込み処理を使わずに信号が変化した回数を数えると、信号の変化を数える処理とその他の処理が必要になります。
処理1 :信号が変化した回数を数える 
処理2:その他 

この場合、処理2を実行している間に信号が変化しても、その回数は数えられません
下図の場合、信号が3回変化していますが内2回は処理2実行中に変化していますので、プログラムが数えられるのは1回だけです。

23_割り込み処理2_1.png

一方、割り込み処理を使った場合はこのようになります。割り込み条件を信号が変化したとき、割り込み処理は信号が変化した回数を数える、です。
割り込み条件 :信号が変化したとき 
割り込み処理:信号が変化した回数を数える 
処理1(元処理2):その他 

割り込み処理を使えばその他の処理を行っていても、即座に信号が変化した回数を数える処理に移れるので、回数を正確に数えられます。
下図の場合、信号の変化に対して3回とも割り込みが発生しますので。正確に3回数えられます

23_割り込み処理2_2.png

このように素早く変化する信号を確実に捉えたいときは割り込み処理が大いに役立ちます。


これで割り込み処理の説明は終わりです。
次回は実際にarduinoを使って割り込み処理を使います。


マイコンのしくみと動かし方 [ トランジスタ技術special編集部 ]

価格:1,944円
(2015/7/24 11:13時点)




posted by ました at 10:49| Comment(0) | TrackBack(0) | 電子工作の知識 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。