Upload
bathsheba-leonard
View
70
Download
0
Embed Size (px)
DESCRIPTION
R8C タイマの基礎. タイマの概要. ここでは、タイマの種類やできることの概要を学びます. タイマで出来ること. 一定の時間間隔を得る 一定時間間隔毎に割込みを発生させる パルス信号の出力 パルス数のカウント パルス幅やパルス周期の測定 ・・・ など. 一定時間間隔を得る. 時間. 割込み. クロックをもとに、一定時間間隔を得る まず、カウンタの値を任意の 初期値 (例 10 )に設定 クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす - PowerPoint PPT Presentation
Citation preview
R8C タイマの基礎
ここでは、タイマの種類やできることの概要を学びます
タイマの概要
タイマで出来ること
一定の時間間隔を得る 一定時間間隔毎に割込みを発生させる
パルス信号の出力 パルス数のカウント パルス幅やパルス周期の測定 ・・・ など
一定時間間隔を得る
時間
•クロックをもとに、一定時間間隔を得る1. まず、カウンタの値を任意の初期値(例 10)に設定2. クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす3. 同じことを繰り返し、カウンタがアンダーフローしたら( 0 からさらに1減らしたら)
• カウンタの値を初期値に戻す• 割込み
4. 以後、2→3を繰り返し
割込み割込み
一定時間間隔を得る
時間
•クロックをもとに、一定時間間隔を得る1. まず、カウンタの値を任意の初期値(例 10)に設定2. クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす3. 同じことを繰り返し、カウンタがアンダーフローしたら( 0 からさらに1減らしたら)
• カウンタの値を初期値に戻す• 割込み
4. 以後、2→3を繰り返し
割込み割込み
一定時間間隔を得る
時間
•クロックをもとに、一定時間間隔を得る1. まず、カウンタの値を任意の初期値(例 10)に設定2. クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす3. 同じことを繰り返し、カウンタがアンダーフローしたら( 0 からさらに1減らしたら)
• カウンタの値を初期値に戻す• 割込み
4. 以後、2→3を繰り返し
割込み割込み
一定時間間隔を得る
時間
•クロックをもとに、一定時間間隔を得る1. まず、カウンタの値を任意の初期値(例 10)に設定2. クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす3. 同じことを繰り返し、カウンタがアンダーフローしたら( 0 からさらに1減らしたら)
• カウンタの値を初期値に戻す• 割込み
4. 以後、2→3を繰り返し
割込み割込み
一定時間間隔を得る
時間
•クロックをもとに、一定時間間隔を得る1. まず、カウンタの値を任意の初期値(例 10)に設定2. クロックを利用してカウンタを1減らす(たとえば、 20MHz(50ns)) で1だけ減らす3. 同じことを繰り返し、カウンタがアンダーフローしたら( 0 からさらに1減らしたら)
• カウンタの値を初期値に戻す• 割込み
4. 以後、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
カウントソース•f1:20MHz•f8:(20/8)MHz•fRING:•f2:(20/2)MHz
8 ビットプリスケーラ•初期値は 0 ~ 255まで設定できる
8 ビットプリスケーラ•初期値は 0 ~ 255まで設定できる
8 ビットカウンタ•初期値は 0 ~ 255まで設定できる
8 ビットカウンタ•初期値は 0 ~ 255まで設定できる
例1)f1: 20MHz
周期T=0.05μs
プリスケーラ初期値
prex = 0
カウンタ初期値tx = 0
初期化prex=
0tx=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
カウントソース•f1:20MHz•f8:(20/8)MHz•fRING:•f2:(20/2)MHz
8 ビットプリスケーラ•初期値は 0 ~ 255まで設定できる
8 ビットプリスケーラ•初期値は 0 ~ 255まで設定できる
8 ビットカウンタ•初期値は 0 ~ 255まで設定できる
8 ビットカウンタ•初期値は 0 ~ 255まで設定できる
例2)f 8 :2.5MHz
周期 T=0.4μs
プリスケーラ初期値
prex = 2
カウンタ初期値tx = 1
初期化prex=
2tx=1
タイマ周期0.4μs×(prex+1)×(tx+1)=0.4μs×3×2 = 2.4μs ( p259 式 (21-1) )
1. プリスケーラダウンカウント2. プリスケーラアンダーフロー3. プリスケーラ初期化(prex=2)3. カウンタダウンカウント
1. プリスケーラダウンカウント1. プリスケーラダウンカウント1. プリスケーラダウンカウント1. プリスケーラダウンカウント1. プリスケーラダウンカウント2. プリスケーラアンダーフロー3. プリスケーラ初期化( prex=2)4. カウンタダウンカウント5. カウンタアンダーフロー6. カウンタ初期化( tx=1) 5. イベント
演習 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 は配布)その後、シミュレータを実行する。
シミュレーション図解
シミュレータシミュレータ
コンパイルしたプログラムをダウンロード
タイマなどのハードウエアの動作を記述したスクリプトファイルを登録
GUI I/O を作成し利用
デバッグ ダウンロード
表示 CPU I/O タイミング設定 timerx.ios ファイル(このファイルは配布)
表示 グラフィック GUI I/O timer_x.pnl ファイル (このファイルは配布)
演習 2 :
タイマ Z インターバル・タイマ・モードによるLED 点滅
p261-268 を読み、プログラムを作成・実行して動作を確認する 教科書では、 LED を3個利用しているが、授業
用回路には2個( p1_1, p1_2 )しかないので、 2 個の LED で動作するようにプログラムを修正する。