Training Manuals DS00002533A_JP - p. 46
© 2018 Microchip Technology Inc.
tinyAVR 1 シリーズのイベント処理入門
tinyAVR 1 シリーズのイベント処理入門
図6-1. イベントソースの選択
設定手順は以下の通りです。
– ウィンドウの左側にある[EVENTS]アイコンをクリックします(上図内の赤枠1)。
– [Asynchronous Event Channel 0] (赤枠2)を選択して[EVENT SYSYEM SETTINGS] ウィンド ウを開きます。
– このウィンドウでスクロールダウンして[Real Time Counter overflow] オプションを選択し、
ウィンドウを閉じます。
6. 次に、図6-2(赤枠1~3)に示す通り、イベントユーザを設定します。
– [USERS ] の下の[ADC0] の歯車アイコン(赤枠1)をクリックします。
– [EVENT SYSTEM SETTINGS] ウィンドウが開くので、その中の[Start Event Input Enable] (赤
枠2)チェックボックスをONにします。
– [ASYNCUSER1]に対して[Asynchronous Event Channel 0] (赤枠3)を選択し、ウィンドウを閉 じます。
図6-2. イベント チャンネルの選択
Training Manuals DS00002533A_JP - p. 48
© 2018 Microchip Technology Inc.
tinyAVR 1 シリーズのイベント処理入門
Info: 以上でイベント ジェネレータ、イベント チャンネル、イベントユーザの定義によ
るイベントシステムの設定が下図の通りに完了します。
図6-3. イベントユーザの選択
7. RTCは、Atmel | START 内で以下の通りに再構成します。
ウィンドウの左端で[DASHBOARD] をクリックし、既存の[RTC_0] モジュールをクリックしてRTC 設定ウィンドウを再度開きます。[OVF: Overflow Interrupt enable] チェックボックス(下図内の赤 枠)をOFFにします。
図6-4. RTCの再構成
8. [GENERATE PROJECT] ボタンをクリックします。下図に示す通り、[Project Summary]ウィンドウ が開きます。
tinyAVR 1 シリーズのイベント処理入門
図6-5. 再生成後の[Project Summary]ウィンドウ
9. src/adc_window.c ファイルに対する[View Diff] (図内の赤枠)をクリックして、下図の通りに、コー ドの違いを確認します。
図6-6. src/adc_window.cのView Diff
10. src/adc_window.c は上書きするため、対応するチェックボックスをONにします。
11. [OK] をクリックしてプロジェクトを再生成します(adc_window は上書きされます)。
6.2 イベントシステム ドライバコードの開発
To do: 結果値が設定したウィンドウのレンジ外であった場合にターミナルへADCデータを送
信するため、driver_isr.c にコードを追加します。
1. driver_isr.c ファイルを以下の通りに更新します。
Training Manuals DS00002533A_JP - p. 50
© 2018 Microchip Technology Inc.
tinyAVR 1 シリーズのイベント処理入門
– 下のコードに示す通り、#include “main.h” を追加します。
– ISR(ADC0_WCOMP_vect) 関数に2行(ADC_get_result(); と sendflag=1;)を追加しま す。
– ISR(RTC_CNT_vect)() 関数は削除します(代わりにイベントシステムを使うため)。 2. driver_isr.c ファイル内の完全なコードは以下の通りです。
3. <F7>を押してソリューションをビルドします。
Info: ソリューションはエラーなしでビルドされます。
4. [Starting Without Debugging] をクリックするか<CTRL+ALT+F5>を押す事により、プロジェクト を実行します。
Info: アプリケーションはキット上で実行を開始します。
5. [Data Visualizer] タブをクリックし、ポテンショメータを調整します。すると、図5-6に示す通り、
ADCデータがターミナルに出力されると共にグラフにプロットされます。
Result: イベントシステムは、RTCオーバーフロー割り込みの代わりとして、期待通り
に機能しました。
#include <driver_init.h>
#include <compiler.h>
#include "main.h"
ISR(ADC0_WCOMP_vect) {
/* Insert your ADC window comparator interrupt handling code here */
ADC_get_result();
sendflag = 1;
/* The interrupt flag has to be cleared manually */
ADC0.INTFLAGS = ADC_WCMP_bm;
}