まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

Similar documents
arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

講習会 Arduino

ワイヤレスセンサモジュール取扱説明書

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

TOPPERS活用アイデア・アプリケーション開発

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Java言語 第1回

Microsoft PowerPoint - prog03.ppt

スライド 1

スライド 1

プログラミング実習I

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

動作環境と操作の概要 A スマホのテザリングを使う方法と B WiFi ルーターを使う方法があります A スマホのテザリングを使う場合 図のように 1 台のスマホのテザリングを有効にして パソコンや他のスマホ タブレットを テザリング機器に WiFi 接続し ます 1スマホのテザリングを有効にします

8 II Δ N II p.1/83

1 1 Arduino とは Arduino アルドゥイーノ は ワンボードマイコンの一種で オープンソースハードウェアであ り 組み立て済みの基板を購入することもできるほか 誰でも自分の手で Arduino を組み立てる ことができます USBコネクタでPCと接続して利用します デジタルポートとア

tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができ

Android Layout SDK プログラミング マニュアル

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

C#の基本

Taro-82ADAカ.jtd

PowerPoint Presentation

ガイダンス

Mathematica で Arduino を利用する (2012 年度 ) はじめに情報工学部では全学科で Arduino を導入して フィジカルコンピューティングに関連した教育を行ってきている 電子情報工学科ではいくつかの実験演習を通じて Arduino を取り入れてきている ここでは 電子情報

LAeq(LX)を10分毎に24時間繰り返し測定し自動保存する

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft Word - XPC4ソフトマニュアル.doc

MS5145 USB シリアル エミュレーション モードの設定

フィルタとは

PowerPoint プレゼンテーション

訂正 _ 第 1 回 1 Arduino Arduino を用意する 入力 アナログ Analog 入出力 任意の電圧を扱える 電源系 外部入力 7 12V デジタル digital 入出力 リセットボタン Low High いわゆる 01 が入出力される 通常は Low 0V GND High 5

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi7.ppt

目次 Arduino で始めるソフトウェア開発 1 はじめてみよう Arduino 準備編 Arduino の購入 開発環境の準備 体験編 Arduino IDE の起動 Ar

PowerPoint プレゼンテーション

CONTEC DIOプロバイダ ユーザーズガイド

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

PowerPoint プレゼンテーション

プログラミング基礎

JDK のインストール (2012 年 8 月時点でのバージョン ) Java の実行環境 開発環境は さまざまな企業 団体が開発 配布を行っているが 当テキストでは Java の生みの親である Sun MicroSystems 社 ( 現 Oracle 社 ) の実行環境 開発環境を使用する Ja

AquesTalk for WinCE プログラミングガイド

Android 機器について 接続障害やバーコードデータの出力障害などは Android 機器の電源オフ オンと Wi-Fiをオフにすることで解消するケースが散見されます Android 機器で障害が発生した場合は まず 次の手順をお試し下さい 1. Android 機器の電源を切ります ( 再起動

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問


1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

プログラミング基礎I(再)

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

5400 エミュレーター 設置と操作の手引き(第8章~第10章)

コンピュータグラフィックス基礎              No

Javaプログラムの実行手順

PowerTyper マイクロコードダウンロード手順

Microsoft Word - VB.doc

<4D F736F F F696E74202D F4B87555F A838B B F5F91E63189F12E >

PowerPoint プレゼンテーション


PowerPoint Presentation

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

1. ネットワーク経由でダウンロードする場合の注意事項 ダウンロード作業における確認事項 PC 上にファイアウォールの設定がされている場合は 必ずファイアウォールを無効にしてください また ウイルス検知ソフトウェアが起動している場合は 一旦その機能を無効にしてください プリンターは必ず停止状態 (

rekordbox TM MIDI LEARN 機能操作ガイド

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

AutoSway_Gaide_kari4

Microsoft Word - SU1201MotorDriverSheildManual.doc

メディプロ1 Javaプログラミング補足資料.ppt

DCモータの制御

Microsoft Word - Ladder Tool 使çfl¨ã…žã…‰ã…¥ã‡¢ã…«ã…©ã…•ã…¼ã†ªã†Š_ docx

AquesTalk プログラミングガイド

Prog2_2nd

Delphi/400でFlash動画の実装

Prog2_2nd

起動画面

JavaプログラミングⅠ

Java講座

プログラミング入門1

Microsoft Word - CAN Monitor の使い方.doc

ワイヤレスバーコードリーダー CM-520W1 設定資料 Bluetooth SPPの設定

CS-DRC1操作説明書

Studuino ライブラリ環境設定Windows編

Microsoft Word - no202.docx

Studuinoライブラリ環境設定Mac編

Microsoft Word - no11.docx

スライド 1

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

新規コンポーネントの作成方法

三菱電機マイコン機器ソフトウエア株式会社

Prog1_2nd

Transcription:

8 タイマ割り込みを使ってみよう割り込み (Interrupt) とは, 言葉の意味の通り, ある作業中に割り込むことである. マイコンにおいてはとても重要な機能の一つである. 例えば, インスタントカップ麺にお湯を入れて 3 分間待ってから食べることを想像してみよう. お湯を入れてカップ麺ができるまでの 3 分間, 時計の針だけを見つめ続けて, 他には何にもせずに待ち続ける人はほとんどいないだろう. たいていの人は, お湯を入れてタイマを 3 分に設定し, タイマのベルが鳴るまでは, テレビを見たり, 本を読んだりと自分が好きなことをして過ごすと思う. そして, ベルが鳴ったら, 今していたことを中断し, ラーメンを食べ始める. この例のような, ある作業中にベルが鳴ったら他の作業を開始することを割り込み処理という. 割り込み処理は, マイコンを効率よく使用するためのプログラミングで欠かせない存在である. OpenCM 内では, 実世界のタイマと同じ役割をするタイマ割り込み機能が内蔵されている. ここでは, サンプルを通してタイマの基本的な使い方を学ぶ.[ ファイル ]-[ スケッチの例 ]-[05.Interrupt] から d_timer_interrupt_led を選択して開いてみよう. 以下は d_timer_interrupt_led のソースコードである 1

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマを Timer に割り当てるという意味である. プログラミングの初心者または苦手な人は, ひとまずタイマを使うためのおまじないと思っても構わない. 次に setup() 内であるが,19~34 行目でタイマの設定を行っている. これまでの例で setup() 内でピンを設定していたのと同じである.13 行目で生成された Timer の様々なメソッドを呼び出すことで, タイマの設定が行える. このサンプルでは Timer は 1 番のタイマ ( タイマ 1) に割り当てているので, 以下のメソッドは全てタイマ 1 に関する命令である. タイマの設定の詳細を説明する前に,OpenCM のタイマにおけるチャンネルについて説明しておく. チャンネルとは, タイマの動きに応じてアクションを起こす際の基準のことである.OpenCM ではタイマ 1 つに 4 つのチャンネルが存在し, タイマ 1 つで 4 つのアクションを起こすことができる. 以下に,setup() 内で行われているタイマ設定部分をまとめる. Timer.pause(); タイマを停止する. 設定を行うにあたっては, タイマを停止しておく. Timer.setPeriod(LED_RATE); タイマの時間をセットする. 単位はマイクロ秒である. LED_RATE は 11 行目で #define LED_RATE 100000 と宣言されており,100000 マイクロ秒, すなわち 0.1 秒とセットしたことになる. この場合, タイマは 0.1 秒まで計測を行い,0.1 秒が過ぎるとまた 0 からタイマがスタートする.Robotis Inc. によると, タイマにセットされる時間間隔として最低でも 8000 以上, すなわち 0.008 秒以上を推奨している. Timer.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE); タイマのモードを設定する. ここではタイマ 1 のチャンネル1を TIMER_OUTPUT_COMPARE モードに設定するという意味である.TIMER_OUTPUT_COMPARE モードとは,Timer.setPeriod で設定した割り込み間隔を 65536 等分した時間ごとに値が増加するカウンタカウントが増加し, そのカウントが setcompare で設定した値になった時に割り込みを発生させるモードである. Timer.setCompare(TIMER_CH1, 1); 割り込みを発生させるタイマのカウント数 ( 目標値 ) を設定する. このサンプルでは 1 と設定したため, カウントが1のタイミングでチャンネル 1 による割り込みが発生する. もし 5 と設定したら 5 までカウントしてから割り込みが発生する. 特殊なことをするのでなければ, 基本的には1にセットしておけばよい. Timer.attachInterrupt(TIMER_CH1, handler_led); チャンネル 1 による割り込みが発生したら handler_led という関数を呼び出す. Timer.refresh(); タイマのカウント数を 0 に戻す. 以前のカウント値が残っている可能性があるため,0 にリセットしてから利用する. Timer.resume(); Timer.pause() で止めたタイマの動作を再開させる. 2

以上の設定は複雑に見えるが, ほとんどはおまじないのようなものであり,Timer.setPeriod() 関数 でタイマの時間間隔 ( 割り込み発生周期 ) を設定することと, Timer.attachInterrupt() 関数で割り込み 発生時に呼び出す関数を設定することを理解していれば, 問題なく自由に使用できるはずである. void handler_led() 関数内の 42 行目,toggleLED(); という命令は,D14(BOARD_LED_PIN) の状態 を反転する命令であり,HIGH であれば LOW に,LOW であれば HIGH に変更される. そのため, D14 に繋がっている OpenCM 上の LED が点灯していれば消灯し, 消灯していれば点灯する. 最後に, タイマの時間間隔とカウントの違いについて, 補足説明しておく. まずタイマの時間間隔とは, どのくらいの間隔で割り込みを発生させるか ( 割り込み発生周期 ) を決めるもので, 設定すると設定した時間間隔でタイマが動く. カウントとは, 設定した時間間隔を 65535 等分した時間ごとに値が1ずつ増えるもので, タイマがスタートしてから設定した時間間隔が経過すると 65535 になる. 例えば, カウントが 4 のときに割り込みを発生するように設定すると, カウントが 4 になるたびに割り込みが発生する. ここで注意が必要なのは, カウントは割り込みのタイミングを決めるためのものであり, カウント数を変更しても割り込み周期は変わらないことである. また,1 カウントに必要な時間は, 割り込み発生周期を 65536 で割った時間となるため, 割り込み発生周期が異なれば 1 カウントの時間の長さも異なることにも注意が必要である. ただし, 単に一定間隔で割り込みを発生したければ, カウントの値にはあまり意味がなく,1 にしておけば良い. 9 キーボードから入力を受けてみよう 4.OpenCM で Hello World!! してみよう では, SerialUSB.print 命令を用いて OpenCM から PC に USB ケーブルを通して文字列を送信してみた. ここでは, その逆方向の通信である,PC 側のキーボードから入力された文字または文字列を OpenCM で受信するプログラムを紹介する.[ ファイル ]-[ スケッチの例 ]-[03.Communication] から c_serialusb_echo_interrupt を選択して開いてみよう. プログラムをコンパイルしダウンロードできたら, シリアルモニタを開き, 図 8.1 に示すように入力窓に文字列を入力して送信ボタンを押すと,OpenCM に文字列が送信される. サンプルプログラムがちゃんと動いていれば, 図 8.2 のような結果が得られるはずである. 図 8.1 シリアルモニタへの文字列の入力 3

図 8.2 サンプルプログラムの結果 以下に c_serialusb_echo_interrupt のソースコードを示す. setup() 内の 18 行目,SerialUSB.attachInterrupt(usbInterrupt); は usb からの受信が検出された場合に割り込みを発生し,usbInterrupt() 関数を呼び出すように設定する命令である. loop() 内では,0.1 秒 (100 ミリ秒 ) ごとに OpenCM 上の LED の点灯状態を反転させている.PC から USB ケーブルを通して何かを受信したら,18 行目で設定した通り, void usbinterrupt(byte* buffer, byte ncount) 関数が呼び出される. このとき, 受信内容が引数としてこの関数に渡される. 具体的には配列として文字列が渡され,buffer[] に受信した文字列が入り,nCount には受信した文字列の大きさ ( 文字数 ) が入る. usbinterrupt() 関数内では,OpenCM が受信した文字列とその長さを, SerialUSB.print() 関数と SerialUSB.println() 関数を用い, USB を通してPCに送信している. 4

( 応用課題 ) SerialUSB.print((char)buffer[i]); を SerialUSB.print((char)(buffer[i]+1)); に変更して実行結果を確認してみよう. さらに SerialUSB.print(buffer[i]); に変更して実行結果を確認してみよう. 実行結果の確認する際には, 下の ASCII テーブルを参考してほしい. 5