注意 : この日本語版文書は参考資料としてご利用ください 最新情報は必ずオリジナルの英語版をご参照願います tinyavr 1 シリーズのイベント処理入門 tinyavr 1 シリーズのイベント処理入門 前提条件 ハードウェア要件 ATtiny817 Xplained Pro 評価用キット Micro-USB ケーブル (Type-A/Micro-B) ブレッドボード ポテンショメータ 3x ポテンショメータ接続用ケーブル ( オスコネクタ - メスコネクタ付き ) インターネット接続 ソフトウェア要件 Atmel Studio 7.0 ウェブブラウザサポートするブラウザの一覧は以下でご覧になれます : http://start.atmel.com/static/ help/index.html?guid-51435ba6-0d59-4458-a413-08a066f6f7ca 実習の所要時間 : 約 120 分 はじめに 本書の実践トレーニングにより Atmel Studio および Atmel START と それらが提供する高機能なユーザインターフェイスおよび開発ツールを使って AVR アプリケーションを開発する方法が学べます Atmel START を使うと Microchip 社製マイクロコントローラを使った開発が容易に始められます MCU を選択し 各種ソフトウェアコンポーネント ( ドライバ ミドルウェア サンプルプロジェクト ) を組み込みアプリケーション向けに簡単かつ効率的な方法で設定できます 設定を完了した後は Atmel Studio またはサードパーティー製開発ツールを使ってプロジェクトを生成できます 最終製品向けに機能を拡張するためのコード開発と ダウンロードしたコードのコンパイル / プログラミング / デバッグには IDE(Atmel Studio 等 ) を使います Atmel START は以下の機能を提供します : ソフトウェアおよびハードウェア要件に基づいて MCU を選定するための支援 サンプルコードの入手と開発 ドライバ ミドルウェア サンプルプロジェクトの設定 適切な PINMUX レイアウトを設定するための支援 システムクロックの設定 ATtiny817 Xplained Proi 評価用キットは AVR ATtiny817 マイクロコントローラを評価するためのハードウェアプラットフォームを提供します このキットはデバッガを内蔵し Atmel Studio とのシームレスな統合を提供します このキットにより ATtiny817 の各種機能を容易に利用でき ユーザ回路にデバイスを簡単に組み込む事ができます 本書に記載したトレーニング課題により Atmel START を使ってアプリケーションを設定する方法が学べます 各課題では Atmel START プロジェクトを再構成した後 Atmel Studio 7 を使ってアプリケーションを実装します Training Manuals DS00002533A_JP - p. 1
tinyavr 1 シリーズのイベント入門 本書では アプリケーションを実装するために GPIO RTC ADC CPUINT USART モジュールとイベントシステムを使います 図 1. ATtiny817 Xplained Pro 本書の主な内容は以下の通りです Atmel START でドライバを設定する PINMUX ドライバを設定する RTC オーバーフロー割り込みによって LED のトグルをトリガする USART を設定する (USART シリアルポートターミナルに文字列を出力 ) RTC オーバーフロー割り込みによって ADC 変換をトリガした後 ADC 結果準備完了割り込みによって USART ターミナルへの ADC データ出力をトリガする RTC オーバーフロー割り込みによって ADC 変換をトリガした後 ADC 結果が定義したウィンドウ外であった場合に USART ターミナルへの ADC データ出力をトリガする RTC オーバーフローイベントによって ADC 変換をトリガした後 ADC 結果が定義されたウィンドウ外であった場合に IRQ によって CPU を復帰させる Atmel Studio 内で Data Visualizer を使って USART 出力を組み込みターミナルとグラフに表示する Training Manuals DS00002533A_JP - p. 2
目次 前提条件... 1 はじめに... 1 1. 本書で使うアイコン.... 5 2. 課題 1: RTC オーバーフロー割り込によって LED のトグルをトリガする... 6 2.1. Atmel START プロジェクトを作成する... 6 2.2. Atmel Studio 内 Atmel START プロジェクトの概要... 14 2.3. コード開発... 16 2.4. アプリケーションのデバッグ... 16 3. 課題 2: RTC 割り込みによって USART ターミナルへの文字列の送信をトリガする... 20 3.1. Atmel START 内での USART の設定... 20 3.2. USART 関数を拡張する... 24 3.3. Data Visualizer ターミナルへの UART 出力... 26 3.4. RTC 割り込みによって USART 送信をトリガする...27 4. 課題 3: ADC ISRRDY 割り込みによって USART ターミナルへの ADC データ出力をトリガする.... 32 4.1. Atmel START 内で ADC ドライバを追加する... 32 4.2. Atmel START 内で ADC を設定する... 33 4.3. アプリケーションコードに ADC 機能を追加する... 36 4.4. ポテンショメータを ADC に接続する... 38 4.5. ADC 機能を観察する... 39 5. 課題 4: ADC WCMP 割り込みによって Data Visualizer への ADC データ出力をトリガする...41 5.1. Atmel START 内で ADC を再構成する... 41 5.2. Atmel Studio 内でアプリケーションを更新し ADC データを Data Visualizer グラフに出力する... 43 6. 課題 5: RTC 割り込みの代わりにイベントシステムを使う... 46 6.1. Atmel START 内でイベントシステムを設定する.... 46 6.2. イベントシステムドライバコードの開発... 49 7. まとめ... 51 8. 改訂履歴... 52 Microchip 社のウェブサイト... 53 Training Manuals DS00002533A_JP - p. 3
顧客変更通知サービス... 53 カスタマサポート... 53 Microchip 社のデバイスコード保護について... 53 法律上の注意点... 54 商標... 54 DNV による品質管理システム認証... 55 各国の営業所とサービス... 56 Training Manuals DS00002533A_JP - p. 4
1. 本書で使うアイコン 本書では 課題の説明を読みやすくするために 以下のアイコンを使います Info: 関連する情報を示します Tip: 役に立つヒントやテクニックを示します To do: 実行する目的を示します Result: 課題の手順を実行した結果を示します Warning: 重要な情報を示します Execute: 必要に応じてターゲットの外で実行するアクションを示します Training Manuals DS00002533A_JP - p. 5
2. 課題 1: RTC オーバーフロー割り込によって LED のトグルをトリガする この課題では RTC オーバーフロー割り込によって LED の状態をトグルするアプリケーションを開発します Atmel START を使って RTC クロック PINMUX を設定します この設定に基づき Atmel Studio 7 プロジェクトを生成します Atmel START によって生成した PINMUX および RTC ドライバ関数を使って Atmel Studio 7 内でコードを開発します Info: ATtiny817 Xplained Pro ボードでは LED0 を PB4 ピンに接続しています 使用する周辺モジュール : RTC GPIO (PB4) クロックの詳細 : メインクロック : 3.333 MHz RTC クロック : 1 khz 2.1 Atmel START プロジェクトを作成する PINMUX ドライバ RTC ドライバ クロックを Atmel START 内で設定し プロジェクトを作成します To do: Atmel START プロジェクトを新規作成します 1. Atmel Studio を起動します 2. [File] [New] [Atmel Start Project] を選択します 3. [CREATE NEW PROJECT] ウィンドウが Atmel Studio 7 内で開きます 下図の通り [Filter on device...] テキストボックスに 817X と入力した後 リストから[ATtiny817 Xplained Pro] を選択してハイライト表示にした状態で [CREATE NEW PROJECT] をクリックします Training Manuals DS00002533A_JP - p. 6
図 2-1. 新規プロジェクトを作成する Info: [MY SOFTWARE COMPONENTS] ウィンドウが開きます 4. [MY SOFTWARE COMPONENTS] ウィンドウ内で プロジェクトの名前を変更します ( 下図内の 赤枠 1 2 参照 ) [MY PROJECT] をクリックしてから [Rename Component] を選択します 図 2-2. コンポーネントの名前を変更する Info: [RENAME COMPONENT] ウィンドウが開きます 5. [RENAME COMPONENT] ウィンドウ内で 新規プロジェクトの名前として ATtiny817_getting_start_events を 指定し [Rename] をクリックします Training Manuals DS00002533A_JP - p. 7
6. ウィンドウの左側にあるナビゲーションタブ内のをクリックして PINMUX Configurator を 開きます Info: PINMUX Configurator には 選択されたデバイスパッケージのイラストが表示されます このイラストは 現在どのピンがどの周辺モジュールによって使われているのかを示します GPIO ピンは ここで設定できます Info: ここでは PB4 を ATtiny817 Xplained Pro 上の LED0 として設定します 下図内の赤枠 1~4 に設定を示します 図 2-3. PINMUX Configurator - LED0 の設定 7. 上図内の赤枠 1~4 は 以下の通りに設定します PINMUX リスト内で PB4 をクリックします [User label:] に LED0 と入力します [Pin mode:] で [Digital output] を選択します [Initial level] が Low である事を確認します Info: ATtiny817 Xplained Pro に関連する技術文書は Atmel Studio 内の [ATtiny817 Xplained Pro] ページからダウンロードできます ([Technical Documentation] を選択 ) [ATtiny817 Xplained Pro] ページは ATtiny817 Xplained Pro ボードを PC に接続している時に表示されます 8. RTC コンポーネントを追加します : Training Manuals DS00002533A_JP - p. 8
ウィンドウの左側にあるナビゲーションタブ内の をクリックした後に をクリックします Info: [ADD SOFTWARE COMPONENTS] ウィンドウが開きます 図 2-4. RTC コンポーネントを追加する 9. RTC の設定 : 上図の通り [ADD SOFTWARE COMPONENTS] ウィンドウ内で [Drivers] を展開し スクロール ダウンして [RTC] をクリック ( 選択 ) してから [Add component(s)] ボタンをクリックします する と RTC_0 モジュールが 下図の通りにプロジェクトに追加されます Info: 下図の赤枠 1 2 は上記の手順 8 で操作しました 以下では 赤枠 3~7 で RTC を設定します Training Manuals DS00002533A_JP - p. 9
図 2-5. RTC の設定 10. 上図の赤枠 3~7 は以下の通りに設定します [RTC_0] をクリックして RTC ドライバの設定ページを開きます [RTCEN] チェックボックスを ON にします これにより Atmel START が生成する RTC 初期化ルーチンは RTC を有効にします [PRESCALER] ドロップダウンメニューをクリックし 32 を選択します (RTC クロックプリスケーラを 32 に設定します ) Info: 既定値の RTC クロック源は 32 khz の内部超低消費電力オシレータであるため このプリスケーラ設定によって RTC カウント周波数は 1 khz に設定されます Training Manuals DS00002533A_JP - p. 10
次に [PER] テキストボックスに 10 進値 500 (16 進値 0x1f4 に等価 ) を入力する事で RTC 周期を定義します さらに [OVF] チェックボックスを ON にする事で RTC オーバーフロー割り込みを有効にします Info: 以上の設定により RTC オーバーフロー割り込みによるトリガは概ね毎秒 2 回生成されます (1 khz の RTC クロック周波数に対し周期を 500 クロックサイクルに設定したため ) 11. CPUINT グローバル割り込みの有効化 : Info: CPUINT モジュールは 図 2-6 に示す通り 3 ステップで設定します [DASHBOARD] 画面の右上隅にある [Show system drivers] スライダは ON にしておく必要があります [CPUINIT] をクリックして CPUINT の設定画面を開きます [CPU_SREG: Global Interrupt Enable] チェックボックスを ON にします これにより Atmel START が生成する初期化ルーチンはグローバル割り込みを有効にします Training Manuals DS00002533A_JP - p. 11
図 2-6. CPUINT の設定 Info: ガできます 以上により RTC と CPUINIT が設定され RTC はオーバーフロー割り込みをトリ 12. クロックの設定 : ウィンドウの左側にあるナビゲーションタブ内のをクリックしてクロックの設定画面を開きます Training Manuals DS00002533A_JP - p. 12
Info: [CLOCK CONFIGURATOR] 画面が開きます そこには各種のオシレータおよび クロック源が表示されます その中から必要なクロック源を選択して設定します 設定すると 対応する出力周波数が計算されて表示されます この画面内の各エレメントの設定ダイアログは 対応する歯車アイコンをクリックすると開きます [Oscillators] セクションには 選択したデバイスで利用可能なオシレータが表示されます [Source] セクションでは 入力信号とプリスケール係数を選択する事により クロック周波数を設定します 13. [Main Clock] の歯車アイコンをクリックする事により メインクロック向けの [Clock Settings] ダイアログを開きます ここには 既定値クロック設定が下図の通りに表示されます Info: [CLOCK SETTINGS] ウィンドウが開きます 図 2-7. メインクロックの設定 Info: このアプリケーションでは既定値クロック設定を変更しません ここではメインクロック源として 20 MHz 内部オシレータが選択され プリスケーラの分周比は 6 に設定されます その結果得られる CPU クロック周波数は 3.33 MHz です 各設定フィール ドの左横にあるアイコンをクリックすると 個々のビット設定に関するデータシートの説明が表示されます 図が示す通り RTC クロック周波数は既に 1 khz に設定されています 14. [Close] をクリックして [CLOCK SETTING] ウィンドウを閉じます 15. 次に [GENERATE PROJECT] ボタンをクリックします 16. 下図の通りにプロジェクトの保存先パスを選択し [OK] をクリックします Training Manuals DS00002533A_JP - p. 13
図 2-8. プロジェクトインポートウィンドウ Result: Atmel Studio 内で [Atmel START] プロジェクトが作成されました 2.2 Atmel Studio 内の Atmel START プロジェクトの概要 Atmel START プロジェクトは 周辺モジュールのドライバ関数およびファイルと 全てのドライバを初期化する main() 関数を生成します Atmel START はフォルダとファイルを以下の通りに生成します START が生成する周辺モジュールドライバ向けのヘッダファイルとソースファイルは src および include フォルダに格納されます include フォルダ内の atmel_start_pins.h ファイルは PINMUX ドライバ関数を格納します utils フォルダは ドライバとアプリケーション自体によってよく使われる一部の関数を定義したファイルを格納します atmel_start.c ファイルは プロジェクト向けに定義された MCU ドライバ ミドルウェアを初期化するための atmel_start_init() 関数を格納します Atmel START 内で割り込みを有効にした場合 生成された ISR は driver_isr.c に格納されます To do: Atmel START プロジェクトの概要を確認します Training Manuals DS00002533A_JP - p. 14
図 2-9. プロジェクトの概要 1. 生成された Studio プロジェクト ATtiny817_getting_started_events の [Solution Explorer] サブウ ィンドウが上図の通りに表示されます 表示されない場合 [Solution Explorer] タブ ( 上図内の赤枠 1) をクリックします メニューの [View] をクリックしてから [Solution Explorer] を選択して開く事 もできます [Solution Explorer] サブウィンドウ内で main.c ファイルをダブルクリックして開き ます 2. atmel_start_init() 関数を右クリックし [Goto Implementation] をクリックします atmel_start_init() から呼び出される system_init() 関数に対しても同様の操作を行い 生成された周辺モジュールドライバ向けの初期化関数が system_init() によって呼び出される事を確認します Info: mcu_init() 関数は 消費電力を削減するために 全てのピンの内部プルアップ抵抗を有効にします system_init() 関数は 全てのドライバ初期化関数を呼び出すと共に LED0 に割り当てられたポートピンを 初期レベルが定義された出力モードに設定します 3. CLKCTRL_init() 関数を右クリックして [Goto Implementation] を選択し 既定値クロック設定がコメントアウトされている事を確認します Info: START 内で既定値ではないクロック設定が選択されている場合 それは CLKCTRL_init() に反映されます 4. 下図の通り [Solution Explorer] サブウィンドウ内で atmel_start_pins.h ファイルを開いてから下向き三角をクリックする事で このファイル内で定義されている関数のリストを開き 便利な各種の GPIO 関数が生成された事を確認します 図 2-10. atmel_start_pins.h 関数 Training Manuals DS00002533A_JP - p. 15
Result: Atmel START プロジェクトの概要を確認しました 2.3 コード開発ここでは ATtiny817 Xplained Pro 開発キット上の LED0 の状態をトグルするために RTC オーバーフロー割り込みを設定します To do: RTC 割り込みハンドラ内に LED0 をトグルするためのコードを書きます 1. ATtiny817_getting_started_events プロジェクト内で driver_isr.c ファイルを開きます To do: driver_isr.c ファイルを編集します 2. 以下の通り ISR(RTC_CNT_vect) 割り込みハンドラにコード LED0_toggle_level(); を挿入します 名前が示す通り この関数は RTC オーバーフロー割り込みが実行されるたびに LED0 に接続したピンのレベルをトグルします ISR(RTC_CNT_vect) { /* Insert your RTC Overflow interrupt handling code */ LED0_toggle_level(); } /* Overflow interrupt flag has to be cleared manually */ RTC.INTFLAGS = RTC_OVF_bm; Info: RTC クロックは 1 khz で動作し RTC 周期は 500 に設定されているため RTC オーバーフロー割り込みは毎秒 2 回実行されます 従って LED0 は毎秒 2 回トグルします 3. main.c ファイルは変更せずにそのまま使います 最上部のツールバーで [Build] [Build Solution] をクリックするか Atmel Studio 内で <F7> を押す事により このソリューションをビルドします Note: エラーが発生する事なくソリューションは正常にビルドされます 2.4 アプリケーションのデバッグ To do: RTC オーバーフロー割り込みによって LED0 をトリガするアプリケーションをデバッグします Training Manuals DS00002533A_JP - p. 16
1. Micro-USB ケーブルをコンピュータに接続する事により ATtiny817 Xplained Pro キットに給電します 2. 下図の通り Studio 内で [Debug] [Start Debugging and Break] をクリックするか <Alt+F5> を押 す事により キットにアプリケーションをプログラミングしてデバッグを開始します 図 2-11. デバッグの開始とブレーク Info: 組み込みデバッガファームウェアのバージョンが Atmel Studio のバージョンよ り低い場合 [Firmware Upgrade] ダイアログが開きます 図 2-12. ファームウェアのアップグレード [Upgrade] をクリックし 進捗バーが処理の完了を示したら [Close] をクリックします [Debug] [Start Debugging and Break] をクリックするか < Alt+F5> を押す事により デバッグを開始し ます Training Manuals DS00002533A_JP - p. 17
Result: キットにアプリケーションがプログラミングされ デバッグセッションが main.c 内のコードから始まります 3. 図 2-11 に示す通り RTC.INTFLAGS = RTC_OVF_bm; の左の余白をクリックする事で driver_isr.c 内のコードにブレークポイントを配置します このブレークポイントは LED0_toggle_level(); 関数呼び出しが実行された後にセットされます 4. [Debug] [Continue] をクリックするか <F5> を押すか 再生ボタンをクリックする事によ り ブレークポイントに達するまでアプリケーションを実行します Tip: 再生ボタン ります は Atmel Studio の最上段のツールバー内と [Debug] メニュー内にあ 5. 全ての PORTB ピンのステータスを確認するため [I/O View] ウィンドウを開き ([Debug] [Windows] [I/O] を選択 ) [I/O Ports (PORTB)] レジスタグループをクリックします ( 図 2-13 参照 ) Info: [I/O View] ウィンドウでは 全ての周辺モジュールのステータスとレジスタ値を確認できます 下図では PB0~PB7 ピンの状態が OUT レジスタの Bits 列に右から左へ順番に示されています 下図では PB4 ピン (LED0) のレベルは HIGH です ( 塗りつぶされた四角はビットステータス 1 (HIGH) を表し 空白の四角はビットステータス 0 (LOW) を表します ) Training Manuals DS00002533A_JP - p. 18
図 2-13. I/O View 6. をクリックして実行を再開し ブレークポイントに達するたびに PORTB の中の OUT レジスタの値が 0x00 と 0x10 の間でトグルする事を確認します これは PB4 ピンのセットとリセットが繰り返され それに対応して LED0 がトグルしている事を示します 7. 図 2-11 内の をクリックする事でブレークポイントを削除し <F5> を押すか をクリックす る事でコードを再実行します これにより LED0 は毎秒 2 回の速さでトグルし続けます 8. [Debug] [Stop Debugging] をクリックするか <Ctrl+Shift+F5> を押すか をクリックする事 により デバッグセッションを終了します Result: RTC オーバーフロー割り込みによって LED0 をトグルするアプリケーションが ATtiny817 Xplained Pro 評価用キットに正しくプログラミングされました Training Manuals DS00002533A_JP - p. 19
3. 課題 2: RTC 割り込みによって USART ターミナルへの文字列の送信をトリガする この課題では USART モジュールを設定して文字列を送信する方法と Atmel Studio Data Visualizer に 組み込まれたターミナルで文字列 Hello World! を表示する方法を学びます RTC オーバーフロー割り 込みの発生時に USART からの文字列の読み出しをトリガし その文字列をターミナルで出力するアプリ ケーションを開発します 最初に Studio 内で Atmel START を使って 課題 1 のプロジェクトを再構成します START 内で プ ロジェクトに USART コンポーネントを追加して設定します 基本的な USART ドライバは START か ら Studio 内のプロジェクト向けに自動的に生成されます 拡張した USART 関数コードは Studio 内で ユーザが自分で追加する必要があります 使用する周辺モジュール : USART RTC ( 前の課題から使用 ) GPIO (PB4 前の課題から使用 ) クロックの詳細 : メインクロック : 3.333 MHz RTC クロック : 1 khz ( 前の課題から使用 ) 3.1 Atmel START 内での USART の設定 To do: Atmel Studio 内でプロジェクトを再構成する事により Atmel START 内で USART ド ライバを追加してモジュールを設定します Info: ATtiny817 Xplained Pro は Atmel 組み込みデバッガ (EDBG) を備えています コンピュータに接続した時 このデバッガは自らを仮想 COM ポートインターフェイスを備えた複合 USB デバイスとして認識します 仮想 COM ポートは EDBG を介して ATtiny817 上の UART に接続されます これにより ターミナルソフトウェアを介してターゲットアプリケーションと容易に通信する事ができます このポートは可変 baud レート パリティ ストップビット設定を提供します ATtiny817 上の設定は ターミナルソフトウェア内で与えられた設定と一致する必要があります Tip: ATtiny817 Xplained Pro 上のデバイスの USART TX ラインは EDBG 仮想 COM ポートに 接続され PB2 ピンで利用できます 1. 課題 1 の ATtiny817_getting_started_events プロジェクトを開きます 2. [Solution Explorer] ウィンドウ内で [ATtiny817_getting_started_events] を右クリックすると サブウィンドウが開きます 下図の通り このサブウィンドウ内で [Re-Configure Atmel START Project] を選択します Training Manuals DS00002533A_JP - p. 20
図 3-1. Atmel START プロジェクトの再構成 Info: Atmel START は Studio 内の既定値ウェブブラウザ内で開きます To do: USART コンポーネントを追加します 3. をクリックして [ADD SOFTWARE COMPONENTS] ウィンドウを開きます 4. 下図に示す通り [Drivers] カテゴリを展開し スクロールダウンして [USART] ドライバをクリッ クで選択してから [Add Component(s)] をクリックします Training Manuals DS00002533A_JP - p. 21
図 3-2. ソフトウェアコンポーネントを追加する tinyavr 1 シリーズのイベント処理入門 Result: USART ドライバがプロジェクトに追加されます To do: USART の baud レートを 9600 に設定し トランスミッタを有効にします 5. 新しく追加された [USART_0] ボックスをクリックしてドライバ設定画面を開きます 図 3-3. USART の設定 Training Manuals DS00002533A_JP - p. 22
6. 上図内の赤枠で示した項目を設定します [SIGNALS] の下の [TXD] ドロップダウンメニューをクリックします TXD ピンとして PB2 を選択します [TXEN] チェックボックスを ON にします これにより START が生成する USART 初期化ルーチンは USART トランスミッタを有効にします 既定値レートが 9600 である事を確認します ( このまま変更しません ) Result: 以上で USART ドライバの設定は完了します 7. ウィンドウの最下段にある [GENERATE PROJECT] ボタンをクリックする事で Atmel Studio 内 でプロジェクトコードを再生成します 図 3-4. プロジェクトコードの再生成 Result: 上図の [Project Summary] ウィンドウが開きます Info: [Project Summary] は Studio プロジェクトに加えられた変更の概要を示します このウィンドウ内の [View Diff...] をクリックすると 外部の WinMerge ツールが開き ファイルの変更内容が表示されます 既定値では WinMerge ツールは Studio 内にインストールされません このツールは以下の方法でインストールします Training Manuals DS00002533A_JP - p. 23
http://downloads.sourceforge.net/winmerge/winmerge-2.14.0- Setup.exe からツールをダウン ロードします ツールを既定値パス (C:\Program Files (x86)\winmerge) またはユーザ定義パスにインストール します Atmel Studio 内のメニューで [Tools Options] [Atmel Start] [File Compare] を選択します [Path of the application used for comparing files] に C:\Program Files (x86)\winmerge \WinMergeU.exe と入力し [Command line arguments to be used for file comparison:] に %original %mine /s /u と入力します 図 3-4 のウィンドウ内で [OK] をクリックします 以上により [View Diff...] が使えるようになります 8. driverisr.c ファイルは上書きしないため このファイルの内容を確認する必要はありません この ファイルのチェックボックスは OFF にしたまま [OK] をクリックして Atmel Studio 向けにプロジ ェクトを再生成します Result: Studio 内でプロジェクト (Atmel START 内で実行した設定の更新を含む ) が再 生成されます 3.2 USART 機能を拡張する To do: USART モジュールから文字列 Hello World! を送信してターミナルに出力するよう Atmel Studio 内でコードを追加します 1. 図 3-5 の通り Studio 内の [Solution Explorer] ウィンドウで src ディレクトリの下の usart.c ファイルをダブルクリックして開きます 2. 赤枠 2 の下向き三角をクリックする事により 関数リストを展開します このリストには Atmel START が自動的に生成した全ての USART ドライバ関数が示されます この中に このプロジェクトで使う USART_0_putc(const uint8_t data) と USART_0_tx_empty() が含まれている事を確認します いずれかの関数を選択すると その関数の宣言へジャンプします 図 3-5. USART ドライバの関数リスト Training Manuals DS00002533A_JP - p. 24
3. main.c ファイル内で 文字列を USART TX バッファに書き込むための関数を手動で実装します Hello World!\n を保持する char 配列 hello と 文字列の長さを定義する HELLO_LEN 定義を宣言します const char hello[]="hello World!\n"; #define HELLO_LEN 13 USART_0_putc() 関数と USART_0_tx_empty() 関数に基づいて usart_put_string() 関数を実装します これらの関数は usart.c ファイル内でインクルードされます //USART Functions void usart_put_string(const char str[], const uint8_t STR_LEN){ for (int i=0; i<str_len; i++){ while(!usart_0_tx_empty()); USART_0_putc(str[i]); } } main() 関数内の while(1) ループの前に usart_put_string() への呼び出しを追加します usart_put_string(hello, HELLO_LEN); main.c の完全なコードを図 3-6 に示します ( 赤枠内は追加するコードです ) 図 3-6. main.c に USART 関数を追加する 4. <F7> を押すか [Build] [Build Solution] をクリックする事により ソリューションをビルドします Training Manuals DS00002533A_JP - p. 25
Info: ソリューションはエラーなしでビルドされます Result: 以上により 文字列 Hello World! を USART へ送信するアプリケーションが実装 されました 3.3 Data Visualizer ターミナルへの UART 出力 To do: 評価用キットから EDBG 仮想 COM ポートを介して送信される文字列を表示するため Studio 内で Data Visualizer ターミナルを設定します 1. Studio 7 内で [Tools] [Data Visualizer] をクリックする事により Data Visualizer を開きます 2. 下図に示す手順の通り [Data Visualizer] ウィンドウ内で 左端の [Configuration] をクリックし [External Connection] グループを展開して [Serial Port] をダブルクリックします 3. [Serial Port Control Panel] 内の COM ポートのドロップダウンリストを展開し 評価用キット上の EDBG 仮想 COM ポートに関連付ける COM ポートを選択します Tip: ATtiny Xplained Pro キットに関連付けられている EDBG 仮想 COM ポートの番号は Windows のデバイスマネージャ ( スタート コントロールパネル デバイスマネージャ ポート ) で確認できます 4. 下図の通り シリアルポート設定を既定値から変更せずに [Connect] をクリックしてターミナルを開きます 図 3-7. USART シリアルポートを選択する 5. <Ctrl+Alt+F5> を押すか [Debug] [Start Without Debugging] をクリックする事により デバイスをプログラミングしてプログラムを実行します 6. [Data Visualizer] タブ内のターミナルに下図の通り Hello World! が出力される事を確認します Training Manuals DS00002533A_JP - p. 26
図 3-8. ターミナルに出力された文字列 Result: UART を使った文字列 Hello World! の送信を Data Visualizer ターミナルで確認し ました 3.4 RTC 割り込みによって USART 送信をトリガする To do: RTC オーバーフロー割り込みによって Hello World! の Data Visualizer ターミナルへの送信をトリガするよう アプリケーションを更新します To do: 新しい main.h ファイルを追加します 1. 下図の通り [Solution Explorer] 内でプロジェクト [ATtiny817_getting_start_events] を右クリックして [Add] [New Item] をクリックします Training Manuals DS00002533A_JP - p. 27
図 3-9. 新しいアイテムを追加する 2. 下図の通り ポップアップウィンドウ内で [Include File] を選択し ファイル名を main.h に変 更してから [Add] をクリックします Result: main.h という名前の空白のファイルがプロジェクトに追加され Solution Explorer 内の main.c ファイルのすぐ下に表示されます 図 3-10. main.h ファイルを追加する 3. Solution Explorer 内で main.h ファイルを選択して開きます To do: 新しく作成した main.h ファイルを更新します Training Manuals DS00002533A_JP - p. 28
4. 下図の通り main.h に 1 行 extern volatile uint8_t sendflag; を追加します 図 3-11. main.h ファイルを更新する Info: USART 送信を初期化するため アプリケーションは変数 sendflag を driver_isr.c 内で使います 5. Solution Explorer から driver_isr.c ファイルを開きます To do: driver_isr.c ファイルを更新します 6. 下図の通り driver_isr.c をインクルードする事により driver_isr.c 内で sendflag 変数を使えるようにします 7. RTC ISR 内で sendflag 変数に 1 を書き込む事により フラグを立てます これにより RTC オーバーフロー割り込みが実行された事を CPU に知らせる事ができます 図 3-12. driver_isr.c ファイルを更新する To do: main.c ファイルを更新します Training Manuals DS00002533A_JP - p. 29
8. 以下の通りに main.c 内で main.h ファイルをインクルードし sendflag 変数を宣言します #include "main.h" volatile uint8_t sendflag = 0; 9. main.c 内で main() 関数の while(1) ループ内に以下のコードを追加します if (sendflag) { usart_put_string(hello, HELLO_LEN); sendflag = 0; } このコードは sendflag がセットされているかどうか確認し セットされていれば文字列 Hello World! を USART ターミナルへ出力するために usart_put_string() を呼び出します sendflag は driver_isr.c で定義された RTC オーバーフロー割り込みルーチンが実行されるたびにセットされます USART 送信後に sendflag をリセットする事で 次の割り込みに備えます main.c ファイル内の全ての変更内容を下図の赤枠内に示します 図 3-13. main.h ファイルを更新する 10. <F7> を押してソリューションをビルドします Training Manuals DS00002533A_JP - p. 30
Info: ソリューションはエラーなしでビルドされます 11. <Ctrl+Alt+F5> を押すか [Debug] [Start Without Debugging] をクリックする事により キット をプログラミングしてアプリケーションを開始します Info: アプリケーションはキット上で実行を開始します 12. 下図の通り Data Visualizer ターミナルを開き Hello World! が概ね毎秒 2 回表示される事 を確認します 図 3-14. RTC 割り込みによりターミナルへの文字列出力が繰り返しトリガされる Result: RTC オーバーフロー割り込みは 文字列 Hello World! の Data Visualizer ターミ ナルへの UART 送信を毎秒 2 回トリガします Training Manuals DS00002533A_JP - p. 31
4. 課題 3: ADC ISRRDY 割り込みによって USART ターミナルへの ADC データ出力をトリガする ATtiny817 は ADC モジュールを 1 つ備えています 以下では この ADC モジュールを設定し アプリケーションコードを更新します 追加した ADC 機能を観察するため ポテンショメータを ADC 入力ピンに接続します ADC データを USART へ送信し Data Visualizer のターミナルウィンドウで観察します このアプリケーションは課題 2 で使ったプロジェクトに基づきます 課題 3 では ADC 機能を実行し て ADC データを USART ターミナルへ出力するアプリケーションを開発します 最初に Atmel START 内で ADC ドライバを追加し 次に ADC モジュールを設定します Atmel Studio では 2 つの ADC 関数を手動で追加する必要があります RTC オーバーフロー割り込みによって ADC 変換の開始を トリガし ADC データ準備完了割り込みによって USART ターミナルへの ADC データの送信をトリガ します 使用する周辺モジュール : ADC USART ( 前の課題から使用 ) RTC ( 前の課題から使用 ) GPIO (PB4 前の課題から使用 ) クロックの詳細 : ADC クロック : 3.333 MHz メインクロック : 3.333 MHz ( 前の課題から使用 ) RTC クロック : 1 khz ( 前の課題から使用 ) 4.1 Atmel START 内で ADC ドライバを追加する To do: Atmel START を使って プロジェクトに ADC ドライバを追加します 1. 課題 2 の ATtiny817_getting_started_events プロジェクトを開きます 2. プロジェクト名を選択し [Solution Explorer] ウィンドウ内で右クリックして [Re-Configure Atmel START Project] を選択します Info: Atmel START は 既定値ウェブブラウザ内で開きます 3. [Atmel START] ウィンドウ内でをクリックし [ADD SOFTWARE COMPONENT] ウィンドウから [Drivers] を展開します 4. [ADC] を選択してをクリックする事により ADC をプロジェクトに追加します Training Manuals DS00002533A_JP - p. 32
Result: ADC ドライバが ATtiny817_getting_started_events に追加されます 4.2 Atmel START 内で ADC を設定する ATtiny817_getting_started_events に ADC を追加したら 次は ADC ドライバを設定します To do: ADC モジュールを設定します 1. [Atmel START] ウィンドウ内で [ADC_0] をクリックします 2. 図 4-1 の赤枠内の項目を順番に設定します [ENABLE: ADC Enable] チェックボックスを ON にする事で ADC を有効にします [PA6] チェックボックスを ON にする事で PA6 を ADC のアナログ入力として有効にします 次に [MUXPOS:Analog Channel Selection Bits] ドロップダウンメニューから [ADC input pin 6] を選択する事で 有効にした PA6 を ADC 入力ピンとして有効にします [RESSEL:ADC Resolution] ドロップダウンメニューから [8-bit mode] を選択する事で ADC 分解能を 8 ビットに設定します [REFSEL: Referance Selection: ] ドロップダウンメニューから [VDD] を選択する事で 参照電圧を設定します [RESRDY:Result Ready Interrupt Enable] チェックボックスを ON にする事で 結果準備完了割り込みを有効にします Training Manuals DS00002533A_JP - p. 33
図 4-1. Atmel START 内の ADC 設定 tinyavr 1 シリーズのイベント処理入門 Training Manuals DS00002533A_JP - p. 34
Note: 各設定フィールドの左横にある? アイコンをクリックすると 個々のビット設定に関 するデータシートの説明が表示されます 3. をクリックする事により プロジェクトを生成します 下図の [Procect Summary] ウィンドウが開きます 図 4-2. Atmel START が生成したプロジェクトコードのサマリ 4. 図 4-2 内の赤枠が示す通り driver_isr.c ファイルに対する [View Diff] をクリックします すると 課題 2 のバージョンと Atmel START が再生成したバージョンの間のコードの違いが示されます 図 4-3. Atmel START による変更前と変更後の driver_isr.c コードの比較 Training Manuals DS00002533A_JP - p. 35
図が示す通り Atmel START が再生成したバージョンでは ISR(ADC0_RESRDY_vect) 関数が追加され LED0_toggle_level(); と sendflag = 1; の 2 行が削除されています 再生成バージョンは 課題 2 バージョンに含まれていたコードも含めて更新する必要があります 他の 3 つのファイルに対する [View Diff] をクリックすると これらのファイルは変更せずに単純に上書きできる事が分かります 5. 図 4-2 内の赤枠で示す通り これらの 3 つのファイルを選択して Atmel START 内でプロジェクトを再生成します これらの 3 つのファイルは変更する必要がなく 図 4-2 の最下段にある [OK] ボタンをクリックすると Atmel START が生成したコードのバージョンによって上書きされます main.c および driver_isr.c ファイルは手動で更新する必要があります (driver_isr.c は図 4-3 の通りに変更します ) Result: Atmel START プロジェクトは 新たに追加された ADC ドライバを含めて Atmel Studio 内で再生成されました 4.3 アプリケーションコードに ADC 機能を追加する Atmel START を使って ADC モジュールを追加および再構成した後に Atmel Studio を使ってアプリケーションコードを更新する必要があります To do: Atmel START で追加した ADC ドライバを使うため ATtiny817_getting_started_events 内でコードを更新します 更新するのは main.c main.h driver_isr.c ファイルです 1. 以下の手順により main.c 内のコードを更新します 更新後のコードを図 4-4 に示します ADC 結果用に変数 adc_result を宣言します volatile uint8_t adc_result = 0; ADC 変換を開始するための関数 ADC_start_conversion() と ADC 結果を読み出すための関数 ADC_get_result() を追加します //ADC Functions void ADC_start_conversion(){ ADC0.COMMAND = ADC_STCONV_bm; //Set start conversion enable mask bit } void ADC_get_result(){ adc_r esult = ADC0.RESL; } main 関数内の while ループの中で 課題 2 で文字列 hello を送信するために使ったコードをコメントアウトし 代わりに USART を介して adc_result を送信するためのコードを追加します //usart_put_string(hello, HELLO_LEN); USART_0_putc(adc_result); Training Manuals DS00002533A_JP - p. 36
図 4-4. Atmel Studio 内で main.c を更新する 2. adc_result 変数のグローバル宣言と 2 つの関数 (ADC_start_conversion() ADC_get_result() ) を図 4-5 の通りに main.h に追加します 図 4-5. Atmel Studio 内で main.h を更新する 3. 図 4-6 に示した手順により driver_isr.c 内のコードを更新します ヘッダに #include "main.h" を追加します アプリケーションコードが RTC オーバーフローのたびに ADC 変換をトリガするよう RTC 割り込みハンドラ ISR(RTC_CNT_vect) に ADC_start_conversion() を追加します ADC_start_conversion(); Training Manuals DS00002533A_JP - p. 37
アプリケーションコードが ADC 変換のたびに ADC 結果の読み出しをトリガするよう ADC 割り込みハンドラ ISR(ADC0_RESRDY_vect) に ADC_get_result() を追加します ADC_get_result(); USART を使って新しい ADC 結果がターミナルウィンドウへ送信されるよう sendflag を RTC 割り込みハンドラ内から ADC 割り込みハンドラ内へ移動します sendflag = 1; 図 4-6. Atmel Studio 内で driver_isr.c を更新する 4. をクリックするか <F7> を押す事により プロジェクトをビルドします コンパイラがエラーも警告も出力しない事を確認します Result: 以上により ADC 機能のコードは完成します 4.4 ポテンショメータを ADC に接続するポテンショメータは スライド式または回転式の接点を持つ 3 端子の可変抵抗器であり 可変分圧器として使えます 下図の右上に示す通り ポテンショメータは 3 本のピンを備えています To do: ブレッドボードと 3 本のケーブル ( 一端がオスコネクタで他端がメスコネクタ ) を使ってポテンショメータを ATtiny817 Xplained Pro に接続します 1. ポテンショメータはブレッドボードに取り付けます ( 各ピンがブレッドボードのどの端子に接続されているか注意してください ) 2. ケーブルを使って ポテンショメータの各ピンを以下の通りに ATtiny817 Xplained Pro に接続します ピン 1 VCC ピン 2 PA6 Training Manuals DS00002533A_JP - p. 38
ピン 3 GND 図 4-7. ポテンショメータを ATtiny817 Xplained Pro に接続する 4.5 ADC 機能を観察する以上により ADC ドライバをプロジェクトに追加し ADC が使えるようにアプリケーションコードを更新し ポテンショメータを ADC 入力ピンに接続しました 次は Atmel Studio 内で Data Visualizer を使って ADC 機能を観察します. 1. [Debug] [Start Without Debugging] を選択するか 最上段のメニューバーで をクリックす る事により コードをプログラミングします 2. [Data Visualizer] タブをクリックする事により Data Visualizer を開きます USART ターミナル への出力は図 4-8 の通りに表示されるはずです 図 4-8. USART ターミナルウィンドウからの出力 Note: USART ターミナルウィンドウ内の出力は ASCII フォーマットで表示されます このフォーマットは ポテンショメータのノブを回した時の出力への影響を観察するには最適ではありません 3. 図 4-9 内の赤枠が示す通り [Hexadecimal Values] チェックボックスを ON にする事により 16 進値の出力フォーマットを選択できます Training Manuals DS00002533A_JP - p. 39
図 4-9. USART ターミナルウィンドウからの出力を 16 進フォーマットにする Result: ポテンショメータのノブを回すと ADC 入力ピン (PA6) への入力電圧が変化します これは USART ターミナルウィンドウに出力される ADC 結果の変化として観察できます Note: ポテンショメータのノブを回すと USART ターミナルウィンドウに出力される ADC 結果は 0x00~0xFF のレンジで変化します これは ADC 分解能を 8 ビットに設定したためです Training Manuals DS00002533A_JP - p. 40
5. 課題 4: ADC WCMP 割り込みによって Data Visualizer への ADC データ出力をトリガする この課題では ADC ウィンドウ比較 (WCMP) 割り込みを使って UART ターミナルと Data Visualizer 内の グラフへの ADC データ出力をトリガするアプリケーションを開発します ADC ウィンドウ比較機能を使うと 予め定義した方法で ADC 出力にフィルタを適用できます この機 能は ウィンドウコンパレータ割り込みイネーブル (INTCTRL.WCOMP) ビットがセットされている時に 有効です 4 通りのウィンドウモードオプションを選択できます ( 値がウィンドウより小さい時 値がウ ィンドウより大きい時 値がウィンドウ内である時 値がウィンドウ外である時のいずれかで ADC 結果 を出力 ) このモードは CTRLE.WINCM フィールドに書き込む事により設定します ウィンドウコンパ レータの下側および上側しきい値は WINLT および WINHT レジスタで設定する必要があります ADC 出力が利用可能となり その値が設定したモードの条件を満たしている時にのみ ADC 割り込みがトリガ されます 最初に Studio 内で Atmel START を使って 課題 3 で使ったプロジェクトを再構成します Atmel START では 結果準備完了 (RESRDY) 割り込みの代わりに WCMP 割り込みオプションを使って ADC ドライバを更新します 5.1 Atmel START 内で ADC を再構成する 1. 課題 3 の ATtiny817_getting_started_events プロジェクトを開きます 2. [Solution Explorer] 内でプロジェクト名 [ATtiny817_getting_started_events] を右クリックしてから [Re-Configure Atmel Start Project] を右クリックします 3. Atmel START ウィンドウ内で [ADC] コンポーネントをクリックします 4. スクロールダウンして 図 5-1 の通りに ADC を再構成します 変更項目は赤枠で示しています 図 5-1. START 内で ADC を再構成する 5. 設定手順は以下の通りです [RESRDY: Result Ready Interrupt Enable] フィールドのチェックボックスを OFF にします [WCMP: Window Comparator Interrupt Enable] フィールドのチェックボックスを ON にしま す ( 上で無効にした RESRDY 割り込みの代わりに WCMP 割り込みを有効にする ) [WINCM: Window Comparator Mode] ドロップダウンメニューから [Outside Window] を選択します [WINHT: Window Comparator High Threshold] フィールドに 200 (16 進値の 0xc8) を入力します Training Manuals DS00002533A_JP - p. 41
[WINLT: Window Comparator Low Threshold] フィールドに 100 (16 進値の 0x64) を入力します 6. ウィンドウの最下段にある [GENERATE PROJECT] ボタンをクリックする事により Atmel Studio 内でプロジェクトを再生成します 図 5-2 に示す通り [Project Summary] ウィンドウが開きます 図 5-2. 再生成されたプロジェクトコード 7. driver_isr.c ファイルに対する [View Diff] ( 上図の赤枠内 ) をクリックする事で Atmel START による再生成前後のコードの違いを確認します 図 5-3. driver_isr.c の View Diff 8. 図 5-2 では main.c と driver_isr.c は選択していません これらは 後で手動による変更が必要で す Training Manuals DS00002533A_JP - p. 42
[OK] をクリックしてプロジェクトを再生成します Result: Atmel START プロジェクトは 更新された ADC ドライバを含めて Atmel Studio 内で再生成されました 5.2 Atmel Studio 内でアプリケーションを更新し ADC データを Data Visualizer グラフに出力する To do: driver_isr.c ファイル内のコードを更新します 1. Atmel Studio 内で driver_isr.c ファイルを開いて ISR(ADC0_RESRDY_vect) 関数を ISR(ADC0_WCOMP_vect) 関数に置き換えます ( 下図の赤枠内 ) 図 5-4. Driver_isr.c の更新 2. [Data Visualizer] タブをクリックし ウィンドウの左側で [Configuration] タブを展開します 下図の通り [Visualization] をクリックし [Graph] をダブルクリックします Training Manuals DS00002533A_JP - p. 43
図 5-5. Data Visualizer グラフの選択 3. 図 5-6 に示す通り [Serial Port Control Panel] からグラフウィンドウ内の [New plot] までターミ ナル入力をドラッグします ( 赤矢印 1) 次に 入力を [Points] として選択します ( 赤枠 2) Training Manuals DS00002533A_JP - p. 44
図 5-6. Data Visualize グラフのデータ出力 4. [Debug] [Start Without Debugging] を選択する事により コードをプログラミングします 5. ポテンショメータのノブを回し グラフにプロットされる ADC データを観察します 6. グラフ上のプロット点と [Terminal] に表示される ADC 値 ( 図 5-6 内の赤枠 3) が正しく対応している事を確認します ADC 値が 100~200 のレンジ内である場合 データはグラフにプロットされません Result: Data Visualizer グラフに ADC データがプロットされます Training Manuals DS00002533A_JP - p. 45
6. 課題 5: RTC 割り込みの代わりにイベントシステムを使う この課題では RTC オーバーフロー割り込みの代わりに RTC オーバーフローイベント信号を使って ADC 変換をトリガします イベントシステム (EVSYS) を使うと 周辺モジュールから別の周辺モジュールへ直接信号を送る事ができます これにより ある周辺モジュール ( イベントジェネレータ ) で変化が生じた時に他の周辺モジュール ( イベントユーザ ) の動作をトリガできます これは CPU を使わずにイベントチャンネルを介して行われます チャンネルパスは メインクロックに対して同期または非同期にできます この課題では RTC オーバーフローイベントを使って ADC 変換をトリガします 6.1 Atmel START 内でイベントシステムを設定する To do: Atmel START 内でイベントシステムを設定します 1. 課題 4 で使ったプロジェクト ATtiny817_getting_started_events を開きます 2. [Solution Explorer] 内で [Ttiny817_getting_started_events] を右クリックしてから [Re-Configure Atmel Start Project] を選択します 3. [Atmel START] ウィンドウ内で [ADD SOFTWARE COMPONENT] ボックスをクリックした後に [ADD SOFTWARE COMPONENT] ウィンドウから [Drivers] を展開します 4. [Events] ドライバを選択してから [Add Component(s)] をクリックします ( 図 2-4. RTC コンポーネン トを追加する参照 ) Note: [Events] ドライバがプロジェクトに追加されます 次に EVENT_SYSTEM 周辺モジュー ルを設定する必要があります 5. 下図 ( 赤枠 1~3) の通りに 非同期イベントチャンネル 0 を設定します Training Manuals DS00002533A_JP - p. 46
図 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. 47
Info: 以上でイベントジェネレータ イベントチャンネル イベントユーザの定義によ るイベントシステムの設定が下図の通りに完了します 図 6-3. イベントユーザの選択 7. RTC は Atmel START 内で以下の通りに再構成します ウィンドウの左端で [DASHBOARD] をクリックし 既存の [RTC_0] モジュールをクリックして RTC 設定ウィンドウを再度開きます [OVF: Overflow Interrupt enable] チェックボックス ( 下図内の赤 枠 ) を OFF にします 図 6-4. RTC の再構成 8. [GENERATE PROJECT] ボタンをクリックします 下図に示す通り [Project Summary] ウィンドウ が開きます Training Manuals DS00002533A_JP - p. 48
図 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. 49
下のコードに示す通り #include main.h を追加します ISR(ADC0_WCOMP_vect) 関数に 2 行 (ADC_get_result(); と sendflag=1;) を追加します ISR(RTC_CNT_vect)() 関数は削除します ( 代わりにイベントシステムを使うため ) 2. driver_isr.c ファイル内の完全なコードは以下の通りです #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; 3. <F7> を押してソリューションをビルドします Info: ソリューションはエラーなしでビルドされます 4. [Starting Without Debugging] をクリックするか <CTRL+ALT+F5> を押す事により プロジェクトを実行します Info: アプリケーションはキット上で実行を開始します 5. [Data Visualizer] タブをクリックし ポテンショメータを調整します すると 図 5-6 に示す通り ADC データがターミナルに出力されると共にグラフにプロットされます Result: イベントシステムは RTC オーバーフロー割り込みの代わりとして 期待通り に機能しました Training Manuals DS00002533A_JP - p. 50
7. まとめ RTC による ADC 変換トリガを割り込みまたはイベントシステムを使って実装するための練習課題を提供しました Atmel Studio 7: Data Visualizer を使うと USART ターミナルまたはグラフ画面で容易にデータ出力を確認できます Atmel START を使うと 周辺モジュールドライバを追加 / 削除する事によりプロジェクトを容易に設定 / 再構成し ドライバ関数をコード内に自動的に生成する事ができます Atmel Studio を使うと アプリケーションのリアルタイムデバッグを容易に実行できると共に I/O 画面を使ってマイクロコントローラのレジスタをリアルタイムに変更できます アプリケーションのデバッグには ブレークポイントや I/O 画面等 各種のデバッグ手法が使えます Training Manuals DS00002533A_JP - p. 51
8. 改訂履歴 リビジョン日付改訂内容 A 2017 年 8 月本書は初版です Training Manuals DS00002533A_JP - p. 52
Microchip 社のウェブサイト tinyavr 1 シリーズのイベント処理入門 Microchip 社は自社が運営するウェブサイト (www.microchip.com) を通してオンラインサポートを提供しています 当ウェブサイトでは お客様に役立つ情報やファイルを簡単に見つけ出せます インターネットブラウザから以下の内容がご覧になれます 製品サポート - データシートとエラッタ アプリケーションノートとサンプルプログラム 設計リソース ユーザガイドとハードウェアサポート文書 最新のソフトウェアと過去のソフトウェア 一般的技術サポート - よく寄せられる質問 (FAQ) 技術サポートのご依頼 オンラインディスカッショングループ Microchip 社のコンサルタントプログラムおよびメンバーリスト ご注文とお問い合わせ - 製品セレクタと注文ガイド 最新プレスリリース セミナー / イベントの一覧 お問い合わせ先 ( 営業所 / 販売代理店 ) の一覧 顧客変更通知サービス Microchip 社の顧客変更通知サービスは お客様に Microchip 社製品の最新情報をお届けする配信サービスです ご興味のある製品ファミリまたは開発ツールに関連する変更 更新 エラッタ情報をいち早くメールでお知らせします Microchip 社ウェブサイト (http://www.microchip.com/) にアクセスし [DESIGN SUPPORT] メニューの下の [Product Change Notification] からご登録ください カスタマサポート Microchip 社製品をお使いのお客様は 以下のチャンネルからサポートをご利用になれます 代理店または販売担当者 各地の営業所 フィールドアプリケーションエンジニア (FAE) 技術サポートサポートは販売代理店までお問い合わせください 各地の営業所もご利用になれます 本書の最後のページには各国の営業所の一覧を記載しています 技術サポートは以下のウェブページからもご利用になれます http://www.microchip.com/support Microchip 社のデバイスコード保護機能 Microchip 社製デバイスのコード保護機能について以下の点にご注意ください Microchip 社製品は 該当する Microchip 社データシートに記載の仕様を満たしています Microchip 社では 通常の条件ならびに仕様に従って使用した場合 Microchip 社製品のセキュリティレベルは 現在市場に流通している同種製品の中でも最も高度であると考えています しかし コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です 弊社の理解では こうした手法は Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります このような行為は知的所有権の侵害に該当する可能性が非常に高いと言えます Microchip 社は コードの保全性に懸念を抱くお客様と連携し 対応策に取り組んで参ります Training Manuals DS00002533A_JP - p. 53
Microchip 社を含む全ての半導体メーカーで 自社のコードのセキュリティを完全に保証できる企業はありません コード保護機能とは Microchip 社が製品を 解読不能 として保証するものではありません コード保護機能は常に進歩しています Microchip 社では 常に製品のコード保護機能の改善に取り組んでいます Microchip 社のコード保護機能の侵害は デジタルミレニアム著作権法に違反します そのような行為によってソフトウェアまたはその他の著作物に不正なアクセスを受けた場合 デジタルミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があります 法律上の注意点 本書に記載されているデバイスアプリケーション等の情報は ユーザの便宜のためにのみ提供されるも のであり 更新によって無効とされる事があります お客様のアプリケーションが仕様を満たす事を保証する責任は お客様にあります Microchip 社は 明示的 暗黙的 書面 口頭 法定のいずれであるかを問わず 本書に記載されている情報に関して 状態 品質 性能 商品性 特定目的への適合性をはじめとする いかなる類の表明も保証も行いません Microchip 社は 本書の情報およびその使用に起因する一切の責任を否認します Microchip 社の明示的な書面による承認なしに 生命維持装置あるいは生命安全用途に Microchip 社の製品を使用する事は全て購入者のリスクとし また購入者はこれによって発生したあらゆる損害 クレーム 訴訟 費用に関して Microchip 社は擁護され 免責され 損害をうけない事に同意するものとします 暗黙的あるいは明示的を問わず Microchip 社が知的財産権を保有しているライセンスは一切譲渡されません 商標 Microchip 社の名称とロゴ Microchip ロゴ AnyRate AVR AVR ロゴ AVR Freaks BeaconThings BitCloud CryptoMemory CryptoRF dspic FlashFlex flexpwr Heldo JukeBlox KeeLoq KeeLoq ロゴ Kleer LANCheck LINK MD maxstylus maxtouch MediaLB megaavr MOST MOST ロゴ MPLAB OptoLyzer PIC picopower PICSTART PIC32 ロゴ Prochip Designer QTouch RightTouch SAM-BA SpyNIC SST SST ロゴ SuperFlash tinyavr UNI/O XMEGA は米国およびその他の国における Microchip Technology Incorporated の登録商標です ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLight Load IntelliMOS mtouch Precision Edge Quiet-Wire は米国における Microchip Technology Incorporated 社の登録商標です Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyCom chipkit chipkit ロゴ CodeGuard CryptoAuthentication CryptoCompanion CryptoController dspicdem dspicdem.net Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit Serial Programming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet ロゴ Mindi MiWi motorbench MPASM MPF MPLAB Certified ロゴ MPLIB MPLINK MultiTRAK NetDetach Omniscient Code Generation PICDEM PICDEM.net PICkit PICtail PureSilicon QMatrix RightTouch ロゴ REAL ICE Ripple Blocker SAM-ICE Serial Quad I/O SMART-I.S. SQI SuperSwitcher SuperSwitcher II Total Endurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA ZENA は米国およびその他の国における Microchip Technology Incorporated の商標です SQTP は 米国における Microchip Technology Incorporated のサービスマークです Silicon Storage Technology は 米国以外の国における Microchip Technology Inc. の登録商標です GestIC は 米国以外の国における Microchip Technology Inc. の子会社である Microchip Technology Germany II GmbH & Co. KG の登録商標です その他の商標は各社に帰属します 2017, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. Training Manuals DS00002533A_JP - p. 54
ISBN: 978-1-5224-2364-5 DNV による品質管理システム認証 ISO/TS 16949 Microchip 社では Chandler および Tempe( アリゾナ州 ) Gresham( オレゴン州 ) の本部 設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得 しています Microchip 社の品質システムプロセスおよび手順は PIC MCU および dspic DSC KEELOQ コードホッピングデバイス シリアル EEPROM マイクロペリフェラル 不揮発性メモリ アナログ製品に採用されています さらに 開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています Training Manuals DS00002533A_JP - p. 55
各国の営業所とサービス 北米アジア / 太平洋アジア / 太平洋ヨーロッパ 本社 アジア太平洋支社 中国 - 厦門 オーストリア - ヴェルス 2355 West Chandler Blvd. Suites 3707-14, 37th Floor Tel:86-592-2388138 Tel:43-7242 -2244-39 Chandler, AZ 85224-6199 Tower 6, The Gateway Fax:86-592 -2388130 Fax:43-7242 -2244-393 Tel:480-792-7200 Harbour City, Kowloon 中国 - 珠海 デンマーク - コペンハーゲン Fax:480-792 -7277 香港 Tel:86-756-3210040 Tel:45-4450-2828 技術サポート : Tel:852-2943-5100 Fax:86-756 -3210049 Fax:45-4485 -2829 http://www.microchip.com/ Fax:852-2401 -3431 インド - バンガロール フィンランド - エスポー サポート オーストラリア - シドニー Tel:91-80 -3090-4444 Tel:358-9 -4520-820 URL: Tel:61-2 -9868-6733 Fax:91-80 -3090-4123 フランス - パリ www.microchip.com Fax:61-2 -9868-6755 インド - ニューデリー Tel:33-1-69-53-63-20 アトランタ 中国 - 北京 Tel:91-11 -4160-8631 Fax:33-1-69-30-90-79 Duluth, GA Tel:86-10 -8569-7000 Fax:91-11 -4160-8632 フランス - サンクルー Tel:678-957-9614 Fax:86-10 -8528-2104 インド - プネ Tel:33-1-30-60-70-00 Fax:678-957 -1455 中国 - 成都 Tel:91-20 -3019-1500 ドイツ - ガーヒング オースティン TX Tel:86-28 -8665-5511 日本 - 大阪 Tel:49-8931-9700 Tel:512-257-3370 Fax:86-28 -8665-7889 Tel:81-6 -6152-7160 ドイツ - ハーン ボストン 中国 - 重慶 Fax:81-6 -6152-9310 Tel:49-2129-3766400 Westborough, MA Tel:86-23 -8980-9588 日本 - 東京 ドイツ - ハイルブロン Tel:774-760-0087 Fax:86-23 -8980-9500 Tel:81-3-6880-3770 Tel:49-7131u-67-3636 Fax:774-760 -0088 中国 - 東莞 Fax:81-3 -6880-3771 ドイツ - カールスルーエ シカゴ Tel:86-769 -8702-9880 韓国 - 大邱 Tel:49-721-625370 Itasca, IL 中国 - 杭州 Tel:82-53 -744-4301 ドイツ - ミュンヘン Tel:630-285-0071 Tel:86-20 -8755-8029 Fax:82-53 -744-4302 Tel:49-89-627-144-0 Fax:630-285 -0075 中国 - 杭州 韓国 - ソウル Fax:49-89-627-144-44 ダラス Tel:86-571 -8792-8115 Tel:82-2 -554-7200 ドイツ - ローゼンハイム Addison, TX Fax:86-571 -8792-8116 Fax:82-2-558-5932 or Tel:49-8031u-354-560 Tel:972-818-7423 中国 - 香港 SAR 82-2-558-5934 イスラエル - ラーナナ Fax:972-818 -2924 Tel:852-2943-5100 マレーシア - クアラルンプール Tel:972-9 -744-7705 デトロイト Fax:852-2401 -3431 Tel:60-3 -6201-9857 イタリア - ミラノ Novi, MI 中国 - 南京 Fax:60-3 -6201-9859 Tel:39-0331-742611 Tel:248-848-4000 Tel:86-25 -8473-2460 マレーシア - ペナン Fax:39-0331 -466781 ヒューストン TX Fax:86-25 -8473-2470 Tel:60-4 -227-8870 イタリア - パドヴァ Tel:281-894-5983 中国 - 青島 Fax:60-4 -227-4068 Tel:39-049-7625286 インディアナポリス Tel:86-532 -8502-7355 フィリピン - マニラ オランダ - ドリューネン Noblesville, IN Fax:86-532 -8502-7205 Tel:63-2 -634-9065 Tel:31-416-690399 Tel:317-773-8323 中国 - 上海 Fax:63-2 -634-9069 Fax:31-416 -690340 Fax:317-773 -5453 Tel:86-21 -3326-8000 シンガポール ノルウェー - トロンハイム Tel:317-536-2380 Fax:86-21 -3326-8021 Tel:65-6334-8870 Tel:47-7289-7561 ロサンゼルス 中国 - 瀋陽 Fax:65-6334 -8850 ポーランド - ワルシャワ Mission Viejo, CA Tel:86-24 -2334-2829 台湾 - 新竹 Tel:48-22-3325737 Tel:949-462-9523 Fax:86-24 -2334-2393 Tel:886-3 -5778-366 ルーマニア - ブカレスト Fax:949-462 -9608 中国 - 深圳 Fax:886-3 -5770-955 Tel:40-21-407-87-50 Tel:951-273-7800 Tel:86-755 -8864-2200 台湾 - 高雄 スペイン - マドリッド ローリー NC Fax:86-755 -8203-1760 Tel:886-7 -213-7830 Tel:34-91-708-08-90 Tel:919-844-7510 中国 - 武漢 台湾 - 台北 Fax:34-91-708-08-91 ニューヨーク NY Tel:86-27 -5980-5300 Tel:886-2 -2508-8600 スウェーデン - ヨーテボリ Tel:631-435-6000 Fax:86-27 -5980-5118 Fax:886-2 -2508-0102 Tel:46-31-704-60-40 サンノゼ CA 中国 - 西安 タイ - バンコク スウェーデン - ストックホルム Tel:408-735-9110 Tel:86-29 -8833-7252 Tel:66-2 -694-1351 Tel:46-8 -5090-4654 Tel:408-436-4270 Fax:86-29 -8833-7256 Fax:66-2 -694-1350 イギリス - ウォーキンガム カナダ - トロント Tel:44-118 -921-5800 Tel:905-695-1980 Fax:44-118 -921-5820 Fax:905-695 -2078 Training Manuals DS00002533A_JP - p. 56