220 likes | 308 Views
R8C タイマの基礎. タイマの概要. ここでは、タイマの種類やできることの概要を学びます. タイマで出来ること. 一定の時間間隔を得る 一定時間間隔毎に割込みを発生させる パルス信号の出力 パルス数のカウント パルス幅やパルス周期の測定 ・・・ など. 一定時間間隔を得る. 時間. 割込み. クロックをもとに、一定時間間隔を得る まず、カウンタの値を任意の 初期値 (例 10 )に設定 クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす
E N D
タイマの概要 ここでは、タイマの種類やできることの概要を学びます
タイマで出来ること • 一定の時間間隔を得る • 一定時間間隔毎に割込みを発生させる • パルス信号の出力 • パルス数のカウント • パルス幅やパルス周期の測定 • ・・・ など
一定時間間隔を得る 時間 割込み • クロックをもとに、一定時間間隔を得る • まず、カウンタの値を任意の初期値(例 10)に設定 • クロックを利用してカウンタを1減らす(たとえば、20MHz(50ns))で1だけ減らす • 同じことを繰り返し、カウンタがアンダーフローしたら(0からさらに1減らしたら) • カウンタの値を初期値に戻す • 割込み • 以後、2→3を繰り返し
一定時間間隔を得る 時間 割込み • クロックをもとに、一定時間間隔を得る • まず、カウンタの値を任意の初期値(例 10)に設定 • クロックを利用してカウンタを1減らす(たとえば、20MHz(50ns))で1だけ減らす • 同じことを繰り返し、カウンタがアンダーフローしたら(0からさらに1減らしたら) • カウンタの値を初期値に戻す • 割込み • 以後、2→3を繰り返し
一定時間間隔を得る 時間 割込み • クロックをもとに、一定時間間隔を得る • まず、カウンタの値を任意の初期値(例 10)に設定 • クロックを利用してカウンタを1減らす(たとえば、20MHz(50ns))で1だけ減らす • 同じことを繰り返し、カウンタがアンダーフローしたら(0からさらに1減らしたら) • カウンタの値を初期値に戻す • 割込み • 以後、2→3を繰り返し
一定時間間隔を得る 時間 割込み • クロックをもとに、一定時間間隔を得る • まず、カウンタの値を任意の初期値(例 10)に設定 • クロックを利用してカウンタを1減らす(たとえば、20MHz(50ns))で1だけ減らす • 同じことを繰り返し、カウンタがアンダーフローしたら(0からさらに1減らしたら) • カウンタの値を初期値に戻す • 割込み • 以後、2→3を繰り返し
一定時間間隔を得る 時間 割込み • クロックをもとに、一定時間間隔を得る • まず、カウンタの値を任意の初期値(例 10)に設定 • クロックを利用してカウンタを1減らす(たとえば、20MHz(50ns))で1だけ減らす • 同じことを繰り返し、カウンタがアンダーフローしたら(0からさらに1減らしたら) • カウンタの値を初期値に戻す • 割込み • 以後、2→3を繰り返し • この動作で、カウンタとはプログラム中の変数ではない(ソフトウェアで機能を実現しているのではない) • 機能はハードウェアで実現されている(レジスタで初期値等を設定すれば自動的に一定時間間隔の割込みが発生する)
パルス信号を出力 時間 出力 • 割込みの代わりに、ある出力端子の電圧を反転させる機能をもたせれば • パルス信号を出力できる
パルス信号を出力2 時間 出力 • カウンタに設定できる初期値を2つ用意して交互に利用すれば(たとえば、High出力時間を決めるカウント値=2、Low出力時間を決めるカウント値=10 など) • パルス信号を出力できる
パルス数カウント 時間 パルス10回 割込み • これまでは、カウンタは内部クロックを元に動作していた • カウンタを、外部から入力されるパルスをもとに動作させたら? ↓ • 外部からの一定数のパルスが入力される毎に割込み発生
パルス数カウント 時間 パルス10回 割込み • これまでは、カウンタは内部クロックを元に動作していた • カウンタを、外部から入力されるパルスをもとに動作させたら? ↓ • 外部からの一定数のパルスが入力される毎に割込み発生
パルス数カウント 時間 パルス10回 割込み • これまでは、カウンタは内部クロックを元に動作していた • カウンタを、外部から入力されるパルスをもとに動作させたら? ↓ • 外部からの一定数のパルスが入力される毎に割込み発生
パルス数カウント 時間 パルス10回 割込み • これまでは、カウンタは内部クロックを元に動作していた • カウンタを、外部から入力されるパルスをもとに動作させたら? ↓ • 外部からの一定数のパルスが入力される毎に割込み発生
パルス数カウント 時間 パルス10回 割込み • これまでは、カウンタは内部クロックを元に動作していた • カウンタを、外部から入力されるパルスをもとに動作させたら? ↓ • 外部からの一定数のパルスが入力される毎に割込み発生
タイマで出来ること • 一定の時間間隔を得る • 一定時間間隔毎に割込みを発生させる • パルス信号の出力 • パルス数のカウント • パルス幅やパルス周期の測定 • ・・・ など
R8C/Tiny タイマの種類(p253) • タイマX • 8ビット・プリスケーラ付き8ビット・タイマ • パルス出力モード/パルス幅測定モード等がある • タイマZ • 8ビット・プリスケーラ付き8ビット・タイマ • ワンショット発生モード等がある • タイマC • 16ビット・タイマ • インプット・キャプチャ/アウトプット・コンペアモード等がある
カウンタのカウント方法 プリスケーラ付き (タイマX 、 タイマZ)(P255 図21-1など) • カウントソース • f1:20MHz • f8:(20/8)MHz • fRING: • f2:(20/2)MHz • 8ビットプリスケーラ • 初期値は0~255まで設定できる • 8ビットカウンタ • 初期値は0~255まで設定できる 例1) f1:20MHz 周期T=0.05μs プリスケーラ初期値 prex = 0 カウンタ初期値 tx = 0 初期化 prex=0 tx=0 1.プリスケーラダウンカウント 2.プリスケーラアンダーフロー 3.カウンタダウンカウント 4.カウンタアンダーフロー 5.イベント(割込みや出力反転等) タイマ周期 0.05μs×(prex+1)×(tx+1) =0.05μs (p259 式(21-1))
カウンタのカウント方法 プリスケーラ付き (タイマX 、 タイマZ)(P255 図21-1など) • カウントソース • f1:20MHz • f8:(20/8)MHz • fRING: • f2:(20/2)MHz • 8ビットプリスケーラ • 初期値は0~255まで設定できる • 8ビットカウンタ • 初期値は0~255まで設定できる 例2) f8:2.5MHz 周期T=0.4μs プリスケーラ初期値 prex = 2 カウンタ初期値 tx = 1 初期化 prex=2 tx=1 1.プリスケーラダウンカウント 2.プリスケーラアンダーフロー 3.プリスケーラ初期化(prex=2) 3.カウンタダウンカウント 1.プリスケーラダウンカウント 1.プリスケーラダウンカウント 1.プリスケーラダウンカウント 1.プリスケーラダウンカウント 1.プリスケーラダウンカウント 2.プリスケーラアンダーフロー 3.プリスケーラ初期化(prex=2) 4.カウンタダウンカウント 5.カウンタアンダーフロー 6.カウンタ初期化(tx=1) 5.イベント タイマ周期 0.4μs×(prex+1)×(tx+1) =0.4μs×3×2 = 2.4μs (p259 式(21-1))
演習1:タイマXインターバル・タイマ・モードによるLED点滅演習1:タイマXインターバル・タイマ・モードによるLED点滅 • p257-260を読み、プログラムを作成・実行して動作を確認する • プログラムは、リスト21-1~21-3(p260)およびset_MainCLK関数(p199)を基にして作成する • 割込み(可変ベクタテーブル)を利用するため、設定として、教科書p211「コンパイルオプションを使う方法」(図19-7)を読み、-fMVTオプションを指定する • タイマだけでは動作が速すぎるため、割込み処理関数が50回呼び出されるとLEDが反転するようにプログラムされている(リスト21-3) • シミュレータで実行の場合は、タイマX割込みをシミュレータで動作させるために、[表示]-[CPU]-[I/Oタイミング設定]によって、I/Oタイミング設定ウインドウを開き、[読み込み]によって、timerx.iosファイルを読み込む。(timerx.iosファイルは配布します)また、[表示]-[グラフィック]-[GUI I/O]によって、GUI I/Oウインドウを開き、右クリック「読み込み」で、timer_x.pnlを読み込んで、LEDをGUIで確認できるようにする。(timer_x.pnlは配布)その後、シミュレータを実行する。
シミュレーション図解 シミュレータ コンパイルしたプログラム をダウンロード GUII/Oを作成し利用 表示 グラフィック GUI I/O timer_x.pnlファイル (このファイルは配布) デバッグ ダウンロード タイマなどのハードウエアの動作を 記述したスクリプトファイルを登録 表示 CPU I/Oタイミング設定 timerx.iosファイル(このファイルは配布)
演習2:タイマZインターバル・タイマ・モードによるLED点滅演習2:タイマZインターバル・タイマ・モードによるLED点滅 • p261-268を読み、プログラムを作成・実行して動作を確認する • 教科書では、LEDを3個利用しているが、授業用回路には2個(p1_1, p1_2)しかないので、2個のLEDで動作するようにプログラムを修正する。