RL78/I1Eコード生成学習
2016/6/1

Rev. 1.00

ソフトウエア事業部 ソフトウエア技術部
ルネサスシステムデザイン株式会社

R20UT3809JJ0100© 2016 Renesas Electronics Corporation. All rights reserved.

はじめに
この資料はルネサスのマイコンを初めて使うお客様を対象としております。ルネサスの統合開発環境 CS+ for CC とその統合開発環境に含まれるコード生成を使ってプロジェクトの作成～デバッグまでを解説します。プロジェクトを演習A,B,Cと３つに分けて難易別に学習できるようにしました。

3.プログラム編集
1.CS+ プロジェクト作成

CS+

2.コード生成で周辺機能設定
5.実行&デバッグ

4.ビルド

使用ツールとバージョン
・マイコン

RL78/I1E (R5F11CCC)
https://www.renesas.com/ja-jp/products/microcontrollers-microprocessors/rl78/rl78i1x/rl78i1e.html
ここでは、FB-R5F11CCC-TB (株式会社内藤電誠町田製作所製CPUボード)を使用します。

・デバッガ
E1エミュレータ・統合開発環境(IDE) CS+ for CC V4.00
ビルドツール CC-RL V1.02© 2016 Renesas Electronics Corporation. All rights reserved.

http://japan.renesas.com/e1
http://japan.renesas.com/cs+
http://japan.renesas.com/rl78_c
ページ 2

演習内容

マイクアンプ回路

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 3

照度センサ
回路

タッチ
センサ
回路

演習A. 照度センサを使って明るさを検知
演習B. 簡易タッチセンサでLEDをON/OFF
演習C. マイクを使って音でLEDの輝度を変える

目次
はじめに

ページ 02

演習内容

ページ 03

演習A

ページ 05

プロジェクト作成

ページ 06

周辺機能設定

ページ 10コード生成とプログラム編集

ページ 15

プログラム実行とデバッグ

ページ 22

プログラムの解説

ページ 29

演習B

ページ 30周辺機能設定

ページ 32

コード生成とプログラム編集

ページ 35

プログラム実行とデバッグ

ページ 40プログラムの解説

ページ 43

演習C

ページ 44

周辺機能設定

ページ 46

コード生成とプログラム編集

ページ 50プログラム実行とデバッグ

ページ 56

最後に

ページ 57© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 4

演習A. 照度センサを使って明るさを検知

演習B. 簡易タッチセンサでLEDをON/OFF

演習C. マイクを使って音でLEDの輝度を変えるマイクアンプ
回路

演習A
A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える
照度センサで明るさを検知CS+上でリアルタイムに
照度センサの値を表示© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 5

照度センサ
回路

タッチ
センサ
回路

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

プロジェクト作成

２「RL78」を選択
３
使用するマイクロコントローラを選択

１「RL78/I1E R5F11CCC(36pin)」

CS+起動後に新しい

４

プロジェクトを作成

プロジェクトの種類を選択「アプリケーション(CC-RL)」

プロジェクト名を入力「CC_RL78I1E_R5F11CCC_seminar1」

ワンポイント５© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 6

新たな開発でCS+を使い始めるときは、ボタンをクリックしてください。スタート・パネルが表示され、新しいプロ
ジェクトを作成したり、最近使ったプロジェクトや、お気に入りのプロジェクトを開いたりなど、簡単にプロジェクトを作成/開くことが可能です。

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プロジェクト作成(プラグインの管理)

C. マイクを使って音でLEDの輝度を変える

７
使用するプラグインにチェックを入れる「コード生成プラグイン」「コード生成/端子図プラグイン」「プログラム解析プラグイン」「端子配置図プラグイン」
８「OK」を選択、

６
ツール → プラグインの管理表示に従い製品を再起動するを選択

ワンポイント
コード生成ツールに関連するプラグイン、プログラム解析プラグイ
ンは、初期状態では使用しない設定になっているため、コード生成と解析グラフは表示されません。
© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 7

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プロジェクト作成 (プロジェクト作成時に登録されるファイル)

C. マイクを使って音でLEDの輝度を変える[登録されるファイル一覧]
cstart.asm
スタートアップファイル。リセット後に最初に実行される。

hdwinit.asm
このプロジェクトで使用できるツール

ハードウェア初期化処理を行う。

stkinit.asm
スタック領域の初期化を行う。

プロジェクト作成時に登録される
ファイル

main.c
メイン関数を含む。

iodefine.h
SFR(周辺機能のレジスタ)を定義したファイル※コード生成で使うファイルは以下
cstart.asm, iodefine.h© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 8

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

プロジェクト作成 (コード生成の機能について)
端子図配置表,端子配置図:

周辺機能設定マイコンの設定状態を示す

端子配置図

コード生成が設定可能な周辺機能を表示
ワンポイント
コード生成は、周辺機能のドライバをCソース出力するツールです。
USB、CANなどミドルウェアと組み合わせて使用する周辺機能には、対応していません。
© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 9

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

周辺機能設定 (コード生成での設定について)

C. マイクを使って音でLEDの輝度を変える

２
選択された周辺機能の詳細設定を行う

このデモで設定する周辺機能
・共通/クロック発生回路(デフォルト設定で使用)→ メイン・システム・クロック、高速オンチップ・
オシレータ・クロック(fHOCO)
高速オンチップ・オシレータ(fHOCO) 32MHz
CPUと周辺クロック fHOCOを使用
・タイマ・アレイ・ユニット→ 1ミリ秒のインターバルタイマを設定
・ウォッチドッグタイマ→ 未使用にする

１

・A/Dコンバータ→ A0端子のA/D変換を行う

周辺機能を選択して設定© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 10A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

周辺機能設定 (共通/クロック発生回路)

C. マイクを使って音でLEDの輝度を変える

４

デフォルトで使用するので変更しない

５
オンチップ・デバッグ設定する

３
ダブルクリックで周辺機能を選択

ワンポイントオンチップ・デバッグ設定は、CC-RL(ビルド・ツール)のリンク・オプション[デバイス]項目へ設定が反映されます。

© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 11

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (タイマ・アレイ・ユニット)

８
チャネル0タブを選択

７
チャネル０、インターバル・タイマ選択

９
インターバル時間に1msを設定６
タイマ・アレイ・
ユニットを選択

ワンポイント
数値を入力する箇所では、マイコンの設定範囲を超えた場合、エラーを表示します。
例えば、インターバル時間に20nsと入力すると設定範囲外となり、エラーを表示します。

© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 12

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (ウォッチドッグ・タイマ)
１１
使用しないにチェックする

１０
ウォッチドッグ・
タイマを選択ワンポイントプロジェクト・ツリー・パネルの各周辺機能のアイコンは、以下を意味しています。
：使用している機能、© 2016 Renesas Electronics Corporation. All rights reserved.

：未使用の機能、ページ 13：設定内容に問題が発生、：設定内容の更新が必要

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (A/Dコンバータ)

１４

１３

入力端子に

使用する

ANI0を設定にチェックする

１５
変換チャネルにANI0を選択
１６
2.7≦AVDDを設定

１７

１２
A/Dコンバータ

他はデフォルトの設定を選択
ワンポイント
基準電圧を変えると、変換時間モードと変換時間の選択範囲が変更されます。電圧の入力が必要なのは、設定時間に影響するためです。
© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 14

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

コード生成とプログラム編集
１を押下生成されるファイル一覧
必ず生成されるファイル
r_cg_main.cr_cg_systeminit.c２
ファイルが生成されプロジェクトツリーに登録される

r_cg_macrodriver.hr_cg_userdefine.hr_cg_cgc.c /hr_cg_cgc_user.c

使用する周辺機能に応じて生成されるファイル
以下は、タイマ・アレイ・ユニット、A/Dコンバータを設定すると出力されるファイル
r_cg_tau.c /hr_cg_tau_user.cr_cg_adc.c /hr_cg_adc_user.c© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 15

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

コード生成とプログラム編集 (生成されるファイルの説明)
ワンポイント生成ファイルのルール
r_cg_main.c

メイン関数

r_cg_systeminit.c

hdwinit()を含む周辺機能の初期化

r_cg_macrodriver.h

コード生成で使うマクロ/定数定義

r_cg_userdefine.h

ユーザが使うマクロ/定数定義

r_cg_cgc.c /hr_cg_cgc_user.c

周辺機能、クロックに関する設定

r_cg_周辺機能.c / .h

周辺機能の初期化と制御するAPIを含む

r_cg_周辺機能_user.c

周辺機能の割り込み関数を含む。

© 2016 Renesas Electronics Corporation. All rights reserved.

周辺機能を制御するAPIには、周辺機能の開始/停止や、結果の取得、データの送受信などがあります。
例えば r_cg_tau.c には、タイマを開始/停止するAPIが含まれます。
 タイマ開始：R_TAU0_Channel0_Start()
 タイマ停止：R_TAU0_Channel0_Stop()
ユーザーが R_TAU0_Channel0_Start() を呼び出すとタイマが開始します。周期割り込みで呼び出される割込みハンドラ内に処理を記述します。
 カウント完了： r_tau0_channel0_interrupt()
このプロジェクトでは1ミリ秒ごとに上記関数が呼ばれます。

コード生成ツールが出力するAPIの詳細は、下記のユーザーズマニュアル
ユーザーは割り込み関数内に処理を追加する。 をご参照ください。
http://japan.renesas.com/products/tools/coding_tools/coding_assis
tance/cg_p/Documentation.jsp
CS+ コード生成ツール 統合開発環境 ユーザーズマニュアル RL78 API
リファレンス編（R20UT3102JJ0102）

ページ 16

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

コード生成とプログラム編集 (ソースファイルの編集)
ワンポイント４
r_cg_main.cを編集

ソースファイルを開くと/*Start ～*/, /*End～*/という記述があります。このコメント間にコードを書いてください。
コメントの外に書かれたコードは「コード生成」を実行すると記述が消去されてしまいます。
#include "r_cg_macrodriver.h"#include "r_cg_cgc.h"include の追加を書く場合#include "r_cg_tau.h"#include "r_cg_adc.h"/* Start user code for include. Do not edit comment generated here *//* End user code. Do not edit comment generated here */#include "r_cg_userdefine.h"/**********************************************************
Pragma directive
プラグマ命令を書く場合***********************************************************//* Start user code for pragma. Do not edit comment generated here */３/* End user code. Do not edit comment generated here *//**********************************************************
グローバル変数を書く場合
Global variables and functions***********************************************************//* Start user code for global. Do not edit comment generated here */編集したいファイルを/* End user code. Do not edit comment generated here */void R_MAIN_UserInit(void);

ダブルクリック© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 17

C. マイクを使って音でLEDの輝度を変える/************************************************** Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None*************************************************/
void main(void){
R_MAIN_UserInit();/* Start user code. Do not edit comment generated here */while (1U){;
mainの処理を記述}/* End user code. Do not edit comment generated here */}/************************************************** Function Name: R_MAIN_UserInit* Description : This function adds user code before implementing
main function.
* Arguments : None
* Return Value : None************************ ********* ***************/
void R_MAIN_UserInit(void) ユーザの初期化処理を記述{/* Start user code. Do not edit comment generated here */EI();/* End user code. Do not edit comment generated here */}/* Start user code for adding. Do not edit comment generated here *//* End user code. Do not edit comment generated here */ユーザ関数を新規に追加するときに記述

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラム追記部分

C. マイクを使って音でLEDの輝度を変える

コード生成とプログラム編集 (r_cg_main.c)
46
47
48
49

/*******************************************************
Global variables and functions********************************************************//* Start user code for global. Do not edit comment generated here */50

uint16_t gAdResult;

51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

/* End user code. Do not edit comment generated here */

70
71
72
73
74
75
76
77
78

// AD変換結果

void R_MAIN_UserInit(void);/******************************************************** Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None*******************************************************/
void main(void){
R_MAIN_UserInit();/* Start user code. Do not edit comment generated here */while (1U){;}/* End user code. Do not edit comment generated here */}© 2016 Renesas Electronics Corporation. All rights reserved.

/******************************************************* Function Name: R_MAIN_UserInit* Description : This function adds user code before implementing main function.
* Arguments : None
* Return Value :None*******************************************************/
void R_MAIN_UserInit(void){/* Start user code. Do not edit comment generated here */79

R_TAU0_Channel0_Start();

80
81
82

EI();
/* End user code. Do not edit comment generated here */}// タイマチャネル０開始

ワンポイント
コード生成で使用する変数のデータ型は、r_cg_macrodriver.hに定義されています。
typedef signed chartypedef unsigned chartypedef signed short
typedef unsigned short
typedef signed long
typedef unsigned long
typedef unsigned short
ページ 18int8_t;uint8_t;
int16_t;uint16_t;
int32_t;uint32_t;
MD_STATUS;

A. 照度センサを使って明るさを検知プログラム追記部分

コード生成とプログラム編集 (r_cg_tau_user.c)
29
30
31
32
33
34

/***********************************************
Includes***********************************************/#include "r_cg_macrodriver.h"#include "r_cg_tau.h"/* Start user code for include. Do not edit comment generated here */35#include "r_cg_adc.h”

36
37
38
39
40
41
42

/* End user code. Do not edit comment generated here */#include "r_cg_userdefine.h"

・・・
52
53
54
55
56
57
58
59
60

/***********************************************
Pragma directive***********************************************/#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)/************************************************ Function Name: r_tau0_channel0_interrupt* Description : This function INTTM00 interrupt service routine.
* Arguments : None
* Return Value : None************************************************/__interrupt static void r_tau0_channel0_interrupt(void){/* Start user code. Do not edit comment generated here */

61
62
63

A/DのAPIを使うための宣言

R_ADC_Start();}

A/D変換の開始/* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 19B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

A. 照度センサを使って明るさを検知プログラム追記部分

コード生成とプログラム編集 (r_cg_ad_user.c)
45
46
47
48

/******************************************************
Global variables and functions*******************************************************//* Start user code for global. Do not edit comment generated here */49

extern uint16_t gAdResult;

50
51
52
53
54
55
56
57
58
59
60

/* End user code. Do not edit comment generated here *//******************************************************* Function Name: r_adc_interrupt* Description : None
A/D変換が終了するごとに呼ばれる割り込み関数* Arguments : None
* Return Value : None******************************************************/__interrupt static void r_adc_interrupt(void){/* Start user code. Do not edit comment generated here */

61
62
63
64
65
66
67

R_ADC_Stop();
R_ADC_Get_Result( &gAdResult );}A/D変換を停止/* End user code. Do not edit comment generated here */A/D変換結果を変数へ代入/* Start user code for adding. Do not edit comment generated here *//* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 20B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

ハードウェア設定

VDD

CN1 12pin VDD
GND

CN1
ANI0

CN1 14pin GND
CN2 1pin

ANI0

上記をボードに接続

VDD

CN2

© 2016 Renesas Electronics Corporation. All rights reserved.

GND

ページ 21

ANI0

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (デバッグツールの設定)

１

３

２

デバッグ・ツール上で右クリック、「使用するデバックツール」→RL78 E1(Serial) を選択© 2016 Renesas Electronics Corporation. All rights reserved.

C. マイクを使って音でLEDの輝度を変える

デバッグ・ツール設定タブを選択し、E1のプロパティを開き、「エミュレータから電源を供給する」→ ”はい”
ページ 22「実行を一瞬してアクセスする」 → ”はい”
「表示更新間隔(ms)」 → ”100”A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変えるプログラムの実行とデバッグ (プログラムのビルド＆ダウンロード)
５
ダブルクリックで変数を選択し、右クリック
４[デバッグ]メニューから、でメニューを表示「ビルド＆デバッグ・ツールへダウンロード」

６
メニューよりウォッチ1を選択に登録を選択© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 23

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (デバッグ画面の説明)

C. マイクを使って音でLEDの輝度を変えるプログラム実行中でも表示される

ワンポイントE1のプロパティでダウンロード後にmain()シンボル
までプログラムが起動する設定になっています。リ
セット直後からの動作を確認した場合は「CPUリ
セット後に指定シンボルまで実行する」→「いいえ」にしてください。

カーソル位置が現在のPC値

プログラムがダウンロードされmainの先頭まで実行されている© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 24

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (デバッグ画面の説明)

C. マイクを使って音でLEDの輝度を変えるプログラム実行中でも表示される混合表示でアセンブラも表示

ワンポイント

汎用レジスタも表示可能© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 25

プログラム実行中に変数を表示させるためには、E1のデバッグツール設定で「実行を一瞬停止してアクセスする」”はい”にします。この一瞬という時間はウォッチに登録する変数の数で変わります。変数が1
つなら、停止する時間はおよそ3μ秒です。

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (ウォッチパネルで確認)

C. マイクを使って音でLEDの輝度を変える

７を押下して、プログラム実行８
数値が変化することを確認© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 26

ワンポイントCDSは暗いと抵抗値が高くなり、明るいと抵抗値が低くなります。回路は抵抗分圧しています。
そのため、CDSに光を当てると抵抗値が下がりANI0の電圧が上がります。逆に手をかざして暗くするとANI0の電圧が下がります。

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (解析グラフ表示)

C. マイクを使って音でLEDの輝度を変える

１２
自動調整を”行わない”、1グリッドあたりの時間を”500ms”にする
９
ウォッチ登録と同じ要領で解析グラフに登録

１０プログラム解析
を開く
１１
値の推移
を開く
１３

1グリッドあたりの値を”50”、オフセット1を “-700” にする© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 27

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (解析グラフ表示)

C. マイクを使って音でLEDの輝度を変える

１４を押下して、プログラム実行

１６
グラフがスクロール

１７
実行中も値が更新して表示される

される

手をかざすと値が下がる

ワンポイント１５

表示の更新は100msが最小値です。そのため、オシロスコープのようにリアルタイムに波形を取得することはできません。

解析グラフを選択© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 28

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

CPUを占有する処理プログラムの解説 (リセットからmain()の処理について)
タイマ・アレイ・ユニット
r_cg_tau.cr_cg_tau_user.c

A/Dコンバータ
r_cg_ad.cr_cg_ad_user.c

メインプログラムmain.cクロック
r_cg_cgc.cC. マイクを使って音でLEDの輝度を変える

周辺初期化プログラム
r_cg_system.c

スタートアッププログラム
cstart.asm

hdwinit( )スタック/変数を初期化

R_CGC_Create( )R_ADC_Create( )クロック、タイマ・アレイ・
ユニット、A/Dコンバータの周辺機能を初期化

R_TAU0_Create( )RAM領域/saddrのクリア
初期値あり変数の設定

main( )

R_TAU0_Channel0_Start( )チャネル0のタイマ開始、
その後は、無限ループ
r_tau0_channel0_interrupt( )

タイマ
割込み発生

ワンポイントR_ADC_Start( )A/D変換の開始
r_adc_interrupt( )1msec周期

A/D変換終了
割込み発生

タイマ割り込み、
A/D変換の処理がくり返される

A/D変換の停止
変換結果をgAdresultへ代入© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 29main()のwhile (1) { ; } は、割り込みを待つ無限ループです。CPUにとっては無駄な処理となります。
このプログラムの場合、割り込みが発生してから処理を行えばよいので、割り込みが発生するまでCPUを停止させるHALT()命令を使うと簡単に消費電力が低減できます。While (1) { HALT(); } と記述してください。

マイクアンプ
回路

演習B

照度センサ
回路

タッチ
センサ
回路

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える
LED

タッチするとタッチパッド照度センサ

ボード上のLED

CS+上でリアルタイムにがON/OFFする照度センサとタッチセンサの値を表示© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 30

処理のポイント
接続は下記の通り
ANI0:照度センサ
ANI1:タッチパッド
Port10: LED
タッチパッドに触るとボード上のLED1(P10)がON/OFFする
1msecごとにA/D変換を行い、ANI0とANI1を1msecごとに切り替える

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

ハードウェア設定

VDD

CN1 12pin VDD
CN1 14pin GND
GND

CN1
ANI0
LED1

ANI1

CN2 1pin

ANI0

CN2 2pin

ANI1

ANI1へ接続する回路を追加
タッチパッド
(銅板)

VDD

CN2
ANI1

ANI0
GND

© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 31

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (A/Dコンバータ)

２
入力端子にANI1を追加

１
A/Dコンバータを選択
他の設定は変更しない

下へスクロール© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 32

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (A/Dコンバータが出力するAPIを追加)
ワンポイント３

R_ADC_Set_ADChannelのように、デフォルトではコード生成されない関数があります。コード・
サイズ削減のため、一部のAPIは、コード生成の要否を選択式としています。
プロジェクト・ツリー・パネルのコード・プレビューにあるアイコンは下記を意味します。

コード・プレビューを展開：コード生成する、：コード生成しない

７
A/Dコンバータ
r_cg_adc.cを展開

４

５
R_ADC_Set_ADChannelを選択し、右クリックでメ
ニュー表示

コード生成の実行で選択した関数が出力される

６
コード生成を選択

関数の前に鍵が表示される© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 33

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (ポート)９
P10を出力に設定

１０
1を出力にチェック

Port1タブが前面

RL78/I1EボードはP10, P11にLEDが接続されています。
LEDを点灯させるには、P10, P11をLowにします。
Lowで動作することをアクティブ・ローと呼びます。
1ポートにつき電流は、ローレベル出力で最大40mAです。抵抗を介してLEDが接続されているので、LEDが点灯しても5mA程度しか流れません。LEDを接続するとき、ドライバICを必ず使わなくてもよいのです。

に表示される
８
Port1を選択

１１
周辺機能の設定が完了後“コードを生成する”押下
生成したソースを次ページより編集する© 2016 Renesas Electronics Corporation. All rights reserved.

ワンポイントページ 34

プログラム追記部分
赤字は演習Aとの差分コード生成とプログラム編集 (ｒ_cg_main.c)
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

/*******************************************************
Global variables and functions********************************************************//* Start user code for global. Do not edit comment generated here */uint16_t gAdResult;// AD変換結果
uint16_t gAdResult2;// AD変換結果2
uint8_t gAdSelect;// 変換するA/Dチャネル 0 = ANI0, 1= ANI1
uint16_t gTouchCount;// タッチパネルに触れていると判断した数
uint16_t gNoTocuhCount; // タッチパネルに触ってない回数
uint8_t gTouchSeparate; // タッチパネルに触っている状態 0=OFF, 1=ON/* End user code. Do not edit comment generated here */void R_MAIN_UserInit(void);/******************************************************** Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None********************************************************/
void main(void){
R_MAIN_UserInit();/* Start user code. Do not edit comment generated here */while (1U){;}/* End user code. Do not edit comment generated here */}© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 35

79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/******************************************************* Function Name: R_MAIN_UserInit* Description : This function adds user code before implementing main function.
* Arguments : None
* Return Value : None*******************************************************/
void R_MAIN_UserInit(void){/* Start user code. Do not edit comment generated here */R_TAU0_Channel0_Start(); // タイマチャネル０開始
gAdSelect = 0;
gTouchCount = 0;
gNoTocuhCount =0;
EI();/* End user code. Do not edit comment generated here */}プログラム追記部分
赤字は演習Aとの差分コード生成とプログラム編集 (ｒ_tau_user.c)
29
30
31
32
33
34

/*****************************************************
Includes******************************************************/#include "r_cg_macrodriver.h"#include "r_cg_tau.h"/* Start user code for include. Do not edit comment generated here */35#include "r_cg_adc.h”

36
37
38
39
40
41
42
43

/* End user code. Do not edit comment generated here */#include "r_cg_userdefine.h“

44extern uint8_t gAdSelect;

45
46
47
48
49
50
51
52

/* End user code. Do not edit comment generated here */

53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

/*****************************************************
Pragma directive******************************************************/#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)/* Start user code for pragma. Do not edit comment generated here *//*****************************************************
Global variables and functions******************************************************//* Start user code for global. Do not edit comment generated here *//* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 36

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/****************************************************** Function Name: r_tau0_channel0_interrupt* Description : This function INTTM00 interrupt service routine.
* Arguments : None
* Return Value : None******************************************************/
static void __near r_tau0_channel0_interrupt(void){/* Start user code. Do not edit comment generated here */ad_channel_t ch;
switch ( gAdSelect ){case 0:ch = ADCHANNEL0;
break;
case 1:ch = ADCHANNEL1;
break;
default:ch = ADCHANNEL0;
break;}
R_ADC_Set_ADChannel( ch );R_ADC_Start();

A/D変換を開始するときにチャネル番号を切り替える/* End user code. Do not edit comment generated here */}プログラム追記部分
赤字は演習Aとの差分コード生成とプログラム編集 (ｒ_adc_user.c)

・・・
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

/****************************************************** File Name : r_cg_adc_user.c* Version: Code Generator for RL78/I1E V1.02.00.06 [12 Aug 2015]* Device(s) : R5F11CCC* Tool-Chain : CCRL
* Description : This file implements device driver for ADC module.
* Creation Date: 2016/04/08******************************************************/
・・・

20
21
22
23
24
25
26
27

/*****************************************************
Global variables and functions******************************************************//* Start user code for global. Do not edit comment generated here */extern uint16_t gAdResult;extern uint16_t gAdResult2;
extern uint8_t gAdSelect;
extern uint16_t gTouchCount;
extern uint16_t gNoTocuhCount;
extern uint8_t gTouchSeparate;/* End user code. Do not edit comment generated here *//****************************************************** Function Name: r_adc_interrupt* Description : None
* Arguments : None
* Return Value : None******************************************************/
static void __near r_adc_interrupt(void){

ページ 37

B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/* Start user code. Do not edit comment generated here */uint16_t result;
R_ADC_Stop();
R_ADC_Get_Result( &result );switch ( gAdSelect ){case 0:gAdResult = result;
break;
case 1:gAdResult2 = result;

A/D変換結果をテンポラリ
変数へ代入
照度センサの結果を代入
タッチパッドの結果を代入

if ( result > D_TOUCH_AD){
gTouchCount++;
gNoTocuhCount = 0;}else if ( result > D_NOTOUCH_ADMIN ){gNoTocuhCount++;}

if ( gNoTocuhCount > D_NOTOUCH_COUNT ){gTouchCount = 0;
gTouchSeparate = 0;}

次ページへ
© 2016 Renesas Electronics Corporation. All rights reserved.

A. 照度センサを使って明るさを検知

プログラム追記部分
赤字は演習Aとの差分コード生成とプログラム編集 (ｒ_adc_user.c)

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

前ページから
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 }
117
118

if ( (gTouchCount > D_TOUCH_COUNT) &&( gTouchSeparate == 0) ){// LED点灯と消灯を繰り返す
P1_bit.no0 ^= 1;
gTouchSeparate = 1;}
break;}

default:
gAdResult = result;
break;

ワンポイント
タッチパッドの処理が複雑になっていますが、理由があります。下図は、タッチパッドを触った時の解析グラフの波形です。触った瞬間に電圧降下し、充電と放電を繰り返します。人間はキャパシタ(コンデンサ)の役割と同等なので、このような波形になります。
触ったと判断するのは、A/D値がD_TOUCH_AD(100)を下回った回数をカウントする変数 gTouchCount が一定の大きさを超えた場合です。また、タッチパッドに触ったままの状態では、何もしないようにしています。

gAdSelect++;
if ( gAdSelect >= D_MAXAD_CHANNEL ){gAdSelect = 0;}

タッチパッドに触った
D_TOUCH_AD値を/* End user code. Do not edit comment generated here */A/D変換の完了の最後の処理で次に変換するにタッチパッドのチャネル番号を指定する© 2016 Renesas Electronics Corporation. All rights reserved.

下回った回数を計測

AD値を示す変数
ページ 38

A. 照度センサを使って明るさを検知プログラム追記部分
赤字は演習Aとの差分

B. 簡易タッチセンサでLEDをON/OFF

コード生成とプログラム編集 (ｒ_cg_userdefine.h)
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

C. マイクを使って音でLEDの輝度を変える/****************************************************** File Name : r_cg_userdefine.h* Version: Code Generator for RL78/I1E V1.02.00.06 [12 Aug 2015]* Device(s) : R5F11CCC* Tool-Chain : CCRL
* Description : This file includes user definition.
* Creation Date: 2016/04/08******************************************************/#ifndef _USER_DEF_H#define _USER_DEF_H/******************************************************
User definitions******************************************************//* Start user code for function. Do not edit comment generated here */#define D_MAX_AD_CHANNEL

2// A/D変換するチャネル数#define D_TOUCH_AD#define D_NOTOUCH_ADMIN#define D_TOUCH_COUNT#define D_NOTOUCH_COUNT

100
900
10
100

// タッチパッドに触ったと判断する値// タッチパッド非接触時を判断するA/D最小値// タッチパッドを触ったと判断する回数// タッチパッドを触っていないと判断する回数/* End user code. Do not edit comment generated here */#endif© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 39ワンポイントr_cg_userdefine.hは、コード生成されるファイルには必ず includeされます。プログラムを記述すると
きにマジックナンバーを使わないためにユーザ専用に定義するファイルを用意しました。
define だけでなく、マクロ命令、enum、typedefなどを、ここへ書いてください。

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変えるプログラムの実行とデバッグ (プログラムのビルド＆ダウンロード)
１
ビルド&デバッグ・ツール
へダウンロード)を選択

２
ダウンロード後ウォッチ1
へ変数を登録© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 40A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変えるプログラムの実行とデバッグ (解析グラフに登録)
４３

プログラム解析のプロパティ

ウォッチ登録と同じ要領→ ”値の推移”タブを開いてで解析グラフに登録

チャネル2の設定を行う

ワンポイントグラフの表示が見づらいときは、オフセット値や1グリッドあたりの値を大きくすると表示を調整できます。
© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 41

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (解析グラフ表示)
タッチパッドを触るとLEDが点灯/消灯する

タッチパッドを触るとグラフ表示が変化© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 42

C. マイクを使って音でLEDの輝度を変える

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

CPUを占有する処理

C. マイクを使って音でLEDの輝度を変えるプログラムの解説 (リセットからmain()の処理について)
タイマ・アレイ・ユニット
r_cg_tau.cr_cg_tau_user.c

A/Dコンバータ
r_cg_ad.cr_cg_ad_user.c

メインプログラムmain.cチャネル0のタイマ開始、
その後は、無限ループ

クロック
r_cg_cgc.c

A/D変換割り込みの処理
r_adc_interrupt ( )A/D変換停止

R_ADC_Set_ADChannel( )A/D変換チャネル設定

変換チャネルによって処理を変える
R_ADC_Start( )A/D変換の開始
1msec周期

スタートアッププログラム
cstart.asm

main( )実行までは演習Aと同じシーケンス

r_tau0_channel0_interrupt( )

タイマ
割込み発生

周辺初期化プログラム
r_cg_system.cr_adc_interrupt( )変換チャネル1

A/D変換結果取得
タッチパッド？

変換チャネル0の処理
gAdResult=変換結果

yes

触っている状態をカウントする

gTouchCount++

A/D変換終了
割込み発生

触っていない状態をカウントする

gNoTouchCount++yes
一定時間
触っていない？

A/D変換の停止
変換結果をresultへ代入
変換チャネルに応じて処理する

gTouchCount = 0
gTouchSeparate = 0
フラグクリア

初めて触る？

タイマ割り込み、A/D変換

noの処理がくり返される© 2016 Renesas Electronics Corporation. All rights reserved.

yes

触っているか？

変換チャネルを変更

ページ 43yes
LED P11のON/OFF
gTouchSeparate = 1
タッチパッドを触ってるフラグをセットマイクアンプ
回路

演習C

照度センサ
回路

タッチ
センサ
回路

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える
RL78/I1Eを含めた等価回路
RL78/I1Eコンフィギュラブル・アンプ© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 44

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

ハードウェア設定

VDD

CN1 12pin VDD
CN1 14pin GND
GND

CN1
ANI2
LED2

ANX3

CN2 3pin

ANI2

CN2 6pin

ANX2

ANX2

CN2 7pin

ANX3

AMP2O

CN2 8pin

AMP2O

ANX2
AMP2O
ANI2

CN2

ANX3
© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 45

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (A/Dコンバータ)

２
入力端子に
ANI2を追加

１
A/Dコンバータを選択
他の設定は変更しない

下へスクロール© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 46

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

周辺機能設定 (タイマ・アレイ・ユニット)
４

７
チャネル1(スレーブ)

タイマ・アレイ・

タブを選択

C. マイクを使って音でLEDの輝度を変える

下記の設定にする ８デューティー 0
初期値 1
アクティブ・ハイ

ユニット1を選択

３
タイマ・アレイ・
ユニットを選択

５
一般設定タブでチャネル0,1をPWM出力(マスタ/スレーブ)にする

チャネル0(マスタ)タブが前面に表示
設定時の波形が６
PWMマスター周期を表示される

10msecに設定© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 47

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

周辺機能設定 (コンフィギュラブル・アンプ)

C. マイクを使って音でLEDの輝度を変える

１１
AMP2タブを選択
共通設定タブが前面

１０
動作設定,使用する,に表示される

AMP2へチェック

設定はスクロール先で行う。
この画面は設定後の表示

９コンフィギュラブ
ル・アンプを選択

１２+入力を”ANX2”-入力を”ANX3”
それぞれチェックする© 2016 Renesas Electronics Corporation. All rights reserved.

下へスクロール

ページ 48

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

周辺機能設定 (ポート)Port1タブが前面に表示される

１４
P11を出力, 1を出力
にチェック

１３
Port1を選択

ワンポイントにマウスカーソルを合わせると下記の文言が表示されます。

P12は兼用端子として多くの機能が割り当てられています。今は、すでにTO11機能が使われているため ”P12” としては使えないことを示しています。

© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 49

プログラム追記部分
赤字は演習Bとの差分コード生成とプログラム編集 (ｒ_cg_main.c)
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

/*****************************************************
Global variables and functions******************************************************//* Start user code for global. Do not edit comment generated here */uint16_t gAdResult;// AD変換結果
uint16_t gAdResult2;// AD変換結果2
uint16_t gAdResult3;// AD変換結果3
uint8_t gAdSelect;// 変換するA/Dチャネル 0 = ANI0, 1= ANI1
uint16_t gTouchCount;// タッチパネルに触れていると判断した数
uint16_t gNoTocuhCount; // タッチパネルに触ってない回数
uint8_t gTouchSeparate; // タッチパネルに触っている状態 0=OFF, 1=ON
uint16_t gTmCounter// タイマカウンタ/* End user code. Do not edit comment generated here */void R_MAIN_UserInit(void);/******************************************************** Function Name: main
* Description : This function implements main function.
* Arguments : None
* Return Value : None********************************************************/
void main(void){
R_MAIN_UserInit();/* Start user code. Do not edit comment generated here */while (1U){;}/* End user code. Do not edit comment generated here */}© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 50

81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/******************************************************* Function Name: R_MAIN_UserInit* Description : This function adds user code before implementing main function.
* Arguments : None
* Return Value : None*******************************************************/
void R_MAIN_UserInit(void){/* Start user code. Do not edit comment generated here */R_TAU0_Channel0_Start(); // タイマチャネル０開始
gAdSelect = 0;
gTouchCount = 0;
gNoTocuhCount =0;
アンプは最初から
gTmCounter = 0;
R_CAMP2_Start();
EI();
使えるようにする/* End user code. Do not edit comment generated here */}プログラム追記部分
赤字は演習Bとの差分コード生成とプログラム編集 (ｒ_tau_user.c)
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

/*****************************************************
Includes******************************************************/#include "r_cg_macrodriver.h"#include "r_cg_tau.h"/* Start user code for include. Do not edit comment generated here */#include "r_cg_adc.h”/* End user code. Do not edit comment generated here */#include "r_cg_userdefine.h“/*****************************************************
Pragma directive******************************************************/#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)#pragma interrupt r_tau1_channel0_interrupt(vect=INTTM10)#pragma interrupt r_tau1_channel1_interrupt(vect=INTTM11)/* Start user code for pragma. Do not edit comment generated here */extern uint8_t gAdSelect;
extern uint16_t gTmCounter;/* End user code. Do not edit comment generated here *//*****************************************************
Global variables and functions******************************************************//* Start user code for global. Do not edit comment generated here *//* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 51

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/****************************************************** Function Name: r_tau0_channel0_interrupt* Description : This function INTTM00 interrupt service routine.
* Arguments : None
* Return Value : None******************************************************/
static void __near r_tau0_channel0_interrupt(void){/* Start user code. Do not edit comment generated here */ad_channel_t ch;
switch ( gAdSelect ){case 0:ch = ADCHANNEL0;
break;
case 1:ch = ADCHANNEL1;
break;
case 2:ch = ADCHANNEL2;
break;
default:ch = ADCHANNEL0;
break;

チャネル番号2の変換結果
処理を追加}
R_ADC_Set_ADChannel( ch );R_ADC_Start();gTmCounter++;/* End user code. Do not edit comment generated here */}プログラム追記部分
赤字は演習Bとの差分コード生成とプログラム編集 (ｒ_tau_user.c)
95 /*******************************************************
96 * Function Name: r_tau1_channel0_interrupt
97 * Description : This function INTTM10 interrupt service routine.
98 * Arguments : None
99 * Return Value : None
100 *******************************************************/
101 static void __near r_tau1_channel0_interrupt(void)102 {/* Start user code. Do not edit comment generated here */103
104// LED P11点灯
105
P1_bit.no1 = 0;106107/* End user code. Do not edit comment generated here */
108
109 }
110 /*******************************************************
111 * Function Name: r_tau1_channel1_interrupt
112 * Description : This function INTTM11 interrupt service routine.
113 * Arguments : None
114 * Return Value : None
115 ********************************************************/
116 static void __near r_tau1_channel1_interrupt(void)117 {/* Start user code. Do not edit comment generated here */118
119// LED P11消灯
120
P1_bit.no1 = 1;121122
123 /* End user code. Do not edit comment generated here */
124 }
125
126 /* Start user code for adding. Do not edit comment generated here */127 /* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

ワンポイント
コード生成で10msecのPWMを作成しました。そのPWMに対する割り込みは2度発生します。下図はデューティ比75%の場合です。75%がLED点灯時間、25%がLED消灯時間となります。プログラム実行中にデューティ比を変更してLEDの輝度を変えています。

r_tau1_channel0_interrupt

10msecr_tau1_channel1_interrupt

ページ 5225%

75%

プログラム追記部分
赤字は演習Bとの差分・・・

コード生成とプログラム編集 (ｒ_adc_user.c)

・・・

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
：
46
47
48
49
50
51
52
53
54
55
56
57
58

60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

/****************************************************** File Name : r_cg_adc_user.c* Version: Code Generator for RL78/I1E V1.02.00.06 [12 Aug 2015]* Device(s) : R5F11CCC* Tool-Chain : CCRL
* Description : This file implements device driver for ADC module.
* Creation Date: 2016/04/08******************************************************//******************************************************
Includes******************************************************/#include "r_cg_macrodriver.h"#include "r_cg_adc.h"/* Start user code for include. Do not edit comment generated here */#include "r_cg_tau.h"/* End user code. Do not edit comment generated here */#include "r_cg_userdefine.h"/*****************************************************
Global variables and functions******************************************************//* Start user code for global. Do not edit comment generated here */extern uint16_t gAdResult;extern uint16_t gAdResult2;
extern uint16_t gAdResult3;
extern uint8_t gAdSelect;
extern uint16_t gTouchCount;
extern uint16_t gNoTocuhCount;
extern uint8_t gTouchSeparate;
extern uint16_t gTmCounter;/* End user code. Do not edit comment generated here */© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 53

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える/****************************************************** Function Name: r_adc_interrupt* Description : None
* Arguments : None
* Return Value : None******************************************************/
static void __near r_adc_interrupt(void){/* Start user code. Do not edit comment generated here */uint16_t result;
R_ADC_Stop();
R_ADC_Get_Result( &result );switch ( gAdSelect ){case 0:gAdResult = result;
break;
case 1:gAdResult2 = result;if ( result > D_TOUCH_AD){
gTouchCount++;
gNoTocuhCount = 0;}else if ( result > D_NOTOUCH_ADMIN ){gNoTocuhCount++;
}

次ページへ

プログラム追記部分
赤字は演習Bとの差分コード生成とプログラム編集 (ｒ_adc_user.c)

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

前ページから
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120

else
121
{
122
if ( gTmCounter > D_MIC_LEDOFFDEALY )
123
{
124
TDR11 = 0;
125
gTmCounter = 0;
126
}
127
}
128
break;
129
130
default:
131
gAdResult = result;132
break;
133
}
134
135
gAdSelect++;
136
if ( gAdSelect >= D_MAXAD_CHANNEL )
137
{
138
gAdSelect = 0;
139
}
140
141
/* End user code. Do not edit comment generated here */
142
143 }
144
145 /* Start user code for adding. Do not edit comment generated here */146 /* End user code. Do not edit comment generated here */if ( gNoTocuhCount > D_NOTOUCH_COUNT ){gTouchCount = 0;
gTouchSeparate = 0;}
if ( (gTouchCount > D_TOUCH_COUNT) &&( gTouchSeparate == 0) ){// LED点灯と消灯を繰り返す
P1_bit.no0 ^= 1;
gTouchSeparate = 1;}
break;
case 2:gAdResult3 = result;if ( gAdResult3 > D_MIC_ADTYP ){comp = ( gAdResult3 - D_MIC_ADTYP )*1000;
if ( comp > D_MIC_LEDMAXPWM ){comp = D_MIC_LEDMAXPWM;}
if ( ( gTmCounter > D_MIC_LEDCHANGE ) | ( comp > TDR11 ) ){ // LEDの明るさを100msecごとに変更する
TDR11 = comp;gTmCounter = 0;}}

© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 54

プログラム追記部分
赤字は演習Bとの差分コード生成とプログラム編集 (ｒ_cg_userdefine.h)
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

/****************************************************** File Name : r_cg_userdefine.h* Version: Code Generator for RL78/I1E V1.02.00.06 [12 Aug 2015]* Device(s) : R5F11CCC* Tool-Chain : CCRL
* Description : This file includes user definition.
* Creation Date: 2016/04/08******************************************************/#ifndef _USER_DEF_H#define _USER_DEF_H/******************************************************
User definitions******************************************************//* Start user code for function. Do not edit comment generated here */#define D_MAX_AD_CHANNEL

3// A/D変換するチャネル数#define D_TOUCH_AD#define D_NOTOUCH_ADMIN#define D_TOUCH_COUNT#define D_NOTOUCH_COUNT

100
900
10
100

// タッチパッドに触ったと判断する値// タッチパッド非接触時を判断するA/D最小値// タッチパッドを触ったと判断する回数// タッチパッドを触っていないと判断する回数#define D_MIC_ADTYP#define D_MIC_LEDOFFDEALY#define D_MIC_LEDCHANGE#define D_MIC_LEDMAXPWM

550
500
100
40000

// マイクA/D入力の無音状態値// LEDを消去するまでの時間 msec// LEDの輝度を変えるタイミング msec// LEDの輝度を変えるPWMの最大値/* End user code. Do not edit comment generated here */#endif© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 55

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF
C. マイクを使って音でLEDの輝度を変える

A. 照度センサを使って明るさを検知
B. 簡易タッチセンサでLEDをON/OFF

プログラムの実行とデバッグ (解析グラフ表示)
音の大きさに応じてLEDの輝度が変化する

マイク音を増幅した値をグラフ表示した(gAdResult3)、しかし100msec毎の変化しか表示できないため平坦なグラフになる© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 56

マイク
音入力

C. マイクを使って音でLEDの輝度を変える

最後に
他にもコード生成のガイドがあるのでご活用ください。
https://www.renesas.com/ja-jp/products/software-tools/tools/code-generator/code-generator-plug-in.html

RL78/I1Eコード生成 脈拍センサデモ
コンフィギュラブル・アンプ使用例
CS + for CA,CX コード生成
e2 studio コード生成

コード生成プラグイン学習ガイド
CS + for CA,CX コード生成
RL78/G13© 2016 Renesas Electronics Corporation. All rights reserved.

ページ 57