目次
  1. はじめに:RL78が日本の組込みで選ばれる理由
  2. 開発環境とSmart Configurator
  3. UART通信の実装(SAU)
  4. I2C通信の実装(IICA / 簡易I2C)
  5. タイマ(TAU)でPWM・インターバル
  6. 12bit A/Dコンバータの実装
  7. 低消費電力モード(HALT/STOP/SNOOZE)
  8. よくあるトラブルと対策
  9. まとめ

はじめに:RL78が日本の組込みで選ばれる理由

RL78は、ルネサス エレクトロニクスの16bit低消費電力マイコンファミリです。産業機器・白物家電・車載のボディ系・センサーノードなど、日本の組込み機器で非常に広く採用されています。1.6〜5.5Vの広い動作電圧、豊富なフラッシュ容量ラインナップ、そして優れた低消費電力性能が特徴です。

ARM Cortex-M系のSTM32などと比べると情報が英語中心になりがちなSTM32に対し、RL78は日本語ドキュメントとサンプルが充実しており、国内の量産案件で扱いやすいのも大きな利点です。本記事では、RL78でもっとも使用頻度の高いUART・I2C・タイマ・ADCの4つのペリフェラルを、Smart Configuratorのコード生成を活用して実装する方法を解説します。

弊社での活用実績

テクノスフィアでは RL78/G13・G14・G23 を用いた計測機器・センサーノード・制御基板の 組込み受託開発 を多数手がけています。生産終了したRL78基板の 逆アセンブル・再構築 実績もあり、本記事は実案件のノウハウをもとに構成しています。

開発環境とSmart Configurator

RL78の開発では、以下の組み合わせが標準です。

要素選択肢備考
統合開発環境CS+ / e2 studioCS+は純正・軽量、e2 studioはEclipseベースでRX/RAと統一可
コンパイラCC-RLルネサス純正Cコンパイラ。無償版は容量制限あり
コード生成Smart ConfiguratorGUIでペリフェラルを設定し初期化コードを自動生成
デバッガE2 Lite / E2オンチップデバッグエミュレータ

Smart Configurator(旧コード生成/Applilet)は、クロック・端子・ペリフェラルをGUIで設定すると、R_Config_xxx_Create()R_Config_xxx_Start() といった初期化・制御関数を自動生成してくれます。手書きでレジスタを叩く必要がほぼなくなり、開発工数を大幅に削減できます。

命名規則について

Smart Configuratorが生成する関数名は R_Config_<周辺>_<動作> の形式です(例:R_Config_UART0_Start)。本記事のコードはこの生成コードを呼び出す前提で記載しています。世代や設定により関数名が若干異なる場合があります。

UART通信の実装(SAU)

RL78のUART・SPI・簡易I2Cは、SAU(Serial Array Unit)という共通のシリアルユニットで実現します。Smart ConfiguratorでSAUのチャネルを「UART」モードに設定し、ボーレートと端子を割り当てると、送受信関数が生成されます。

UART送信

#include "r_cg_macrodriver.h"
#include "r_cg_userdefine.h"
#include "Config_UART0.h"

/* UART0 を開始(Smart Configurator 生成)*/
R_Config_UART0_Start();

/* 文字列を送信 */
uint8_t tx_buf[] = "Hello RL78!\r\n";
R_Config_UART0_Send(tx_buf, sizeof(tx_buf) - 1);

/* 送信完了は割り込みコールバックで通知される */

UART受信(割り込み)

受信はリングバッファに溜め、コールバック内で処理するのが定石です。Smart Configuratorが生成する受信完了コールバック r_Config_UART0_callback_receiveend() をユーザーコード領域に実装します。

static volatile uint8_t g_rx_data;

/* 受信開始(1バイトずつ受信) */
R_Config_UART0_Receive(&g_rx_data, 1);

/* 受信完了コールバック(自動生成のひな型に追記)*/
void r_Config_UART0_callback_receiveend(void)
{
    /* g_rx_data に1バイト受信済み。処理後、再度受信を仕掛ける */
    ring_buffer_push(g_rx_data);
    R_Config_UART0_Receive(&g_rx_data, 1);
}
注意

SAUのチャネル割り当ては端子(ピン)と密接に紐づきます。基板設計時に「使いたいUART/SPI/I2Cが同じSAUユニット内で競合しないか」を必ず確認してください。SAUのユニット数(SAU0/SAU1)やチャネル数は品種によって異なる(小型品はSAU0のみ等)ため、対象デバイスのデータシートで構成を確認してください。

I2C通信の実装(IICA / 簡易I2C)

RL78のI2Cには2種類あります。用途で使い分けます。

方式特徴向く用途
簡易I2C(SAU)SAUのチャネルをI2Cモードで使用。マスタ送受信が中心センサー・EEPROMへの単純アクセス
IICA(専用ユニット)アービトレーション・クロックストレッチ・マルチマスタ対応本格的なI2Cバス、スレーブ動作、複数マスタ環境

温湿度センサーやEEPROMを1つ読むだけなら簡易I2Cで十分です。バス上に複数マスタがいる、スレーブとして応答する、といった場合はIICAを選びます。

#include "Config_IICA0.h"

#define SENSOR_ADDR  (0x48 << 1)  /* 7bitアドレスを左シフト */
static uint8_t reg = 0x00;
static uint8_t rx[2];

/* レジスタ0x00 を指定して2バイト読み出す */
R_Config_IICA0_Master_Send(SENSOR_ADDR, &reg, 1, 0);   /* 第4引数=継続フラグ */
R_Config_IICA0_Master_Receive(SENSOR_ADDR, rx, 2, 0);
/* 完了は IICA のコールバックで判定 */
int16_t value = (rx[0] << 8) | rx[1];
プルアップ抵抗を忘れずに

I2CのSDA/SCLは外部プルアップ抵抗(一般に2.2k〜10kΩ)が必須です。RL78内蔵プルアップでは不足することが多く、通信が不安定になる主因です。波形が鈍る場合は抵抗値を下げます。

タイマ(TAU)でPWM・インターバル

TAU(Timer Array Unit)は複数チャネルを持つ汎用タイマで、以下のような用途に使えます。

  • インターバルタイマ:一定周期で割り込みを発生(制御周期・ソフトタイマの土台)
  • PWM出力:マスタチャネルで周期、スレーブチャネルでデューティを設定し、LED調光やモーター制御へ
  • 入力パルス測定:外部信号の周期・パルス幅を計測(流量計・回転数センサー)
  • 外部イベントカウント:エンコーダや接点入力のカウント
#include "Config_TAU0_0.h"

/* 1ms インターバルタイマを開始 */
R_Config_TAU0_0_Start();

/* インターバル割り込みコールバック(自動生成)*/
void r_Config_TAU0_0_interrupt(void)
{
    g_msec_tick++;          /* ソフトウェアタイマのカウントアップ */
    if (g_msec_tick % 100 == 0) {
        g_flag_100ms = 1;   /* 100ms ごとの処理要求 */
    }
}

PWMを使う場合は、Smart Configuratorで「インターバルタイマ(PWM出力)」を選び、マスタ/スレーブのチャネルを割り当てます。デューティ比は R_Config_TAU0_n_Set_PWM_Duty() 相当の関数や、コンペアレジスタへの直接書き込みで動的に変更できます。

12bit A/Dコンバータの実装

RL78は12bit逐次比較型(SAR)A/Dコンバータを内蔵します。温度センサー・電圧監視・アナログ入力の読み取りに使います。Smart ConfiguratorでA/D変換チャネル・基準電圧・変換モード(ワンショット/連続)を設定します。

#include "Config_ADC.h"

uint16_t ad_value;

R_Config_ADC_Start();
R_Config_ADC_Set_OperationOn();

/* 変換完了コールバック(自動生成)*/
void r_Config_ADC_interrupt(void)
{
    R_Config_ADC_Get_Result_12bit(&ad_value);
    /* 例:基準電圧 3.3V のとき電圧[mV] に換算 */
    uint32_t mv = ((uint32_t)ad_value * 3300) / 4095;
}
精度を出すコツ

サンプリング時間を十分に確保し、アナログ入力源のインピーダンスを下げることが精度の鍵です。高インピーダンス源はOPアンプでバッファするか、サンプリング時間を延ばします。基準電圧のノイズ対策(デカップリング)も忘れずに。

低消費電力モード(HALT/STOP/SNOOZE)

RL78が選ばれる最大の理由のひとつが低消費電力性能です。電池駆動機器では、いかにCPUを止めている時間を長くするかが平均電流を決めます。

モード動作復帰要因
HALTCPU停止、周辺は動作継続任意の割り込み
STOP高速発振も停止し最小消費電流外部割り込み・一部周辺の割り込み
SNOOZECPUを起こさずADC変換やUART/CSI受信を実行条件成立でHALT/STOPへ自動復帰

SNOOZEモードはRL78の強力な機能です。たとえば「STOP中に一定周期で起き、CPUを起こさずにADCで電圧を測り、しきい値を超えたときだけCPUを起こす」といった動作が可能で、センサーノードの平均電流を桁違いに下げられます。

/* メインループの基本形:処理がなければ眠る */
while (1) {
    if (g_flag_100ms) {
        g_flag_100ms = 0;
        do_periodic_task();
    }
    /* やることが無ければ HALT で待機(割り込みで復帰)*/
    HALT();
}

よくあるトラブルと対策

症状主な原因対策
UARTが文字化けするボーレート誤差・動作クロック設定ミス高速オンチップオシレータの周波数とSAUの分周設定を確認。誤差±2%以内に収める
I2Cが応答しない(NACK)アドレスのシフト忘れ・プルアップ不足7bitアドレスを左1bitシフト。プルアップ抵抗を実装し波形を確認
STOP復帰後に動作が不安定発振安定待ち不足STOP復帰後は発振安定時間を確保してから周辺を再開
消費電流が下がらない未使用端子の処理不足・周辺停止漏れ未使用端子を入力プルアップ等で固定。使わない周辺はクロック供給を停止
書き込みできないオプションバイト・オンチップデバッグ設定セキュリティ設定とデバッガ接続(RESET/TOOL端子)を確認

まとめ

この記事のまとめ

  • RL78は16bit低消費電力マイコンで、日本の産業・車載・家電で広く採用されている
  • UART・SPI・簡易I2CはSAU、本格的なI2CはIICAで実装する
  • Smart Configuratorのコード生成で R_Config_xxx 関数が生成され、開発工数を削減できる
  • TAUはインターバル・PWM・パルス測定に、12bit ADCは電圧監視・センサー読み取りに使う
  • HALT/STOP/SNOOZEを使い分けることで電池駆動機器の平均電流を大幅に下げられる

RL78を使った組込みシステム開発・量産設計でお困りのことがあれば、テクノスフィアにお気軽にご相談ください。新規開発はもちろん、生産終了基板の再設計やSTM32など他マイコンへの移植も対応します。

RL78 を使ったセンサー・計測機器・制御基板の試作・量産設計、既存基板の RL78 化や移行も 組込み制御・マイコン開発 として対応しています。

/この内容の受託開発・PoC相談はこちら\

Renesas RL78 受託開発・量産設計

RL78を使った計測機器・センサーノード・制御基板の設計から量産、生産終了基板の再設計・他マイコン移植まで、組込み開発歴20年超のエンジニアが一貫対応します。

よくある質問(FAQ)

RL78のUART・I2C・SPIはどのペリフェラルで実装しますか?

UART・SPI・簡易I2CはSAU(Serial Array Unit)で実装します。アービトレーションやクロックストレッチが必要な本格的なI2Cマスタ/スレーブはIICA(専用I2Cユニット)を使います。Smart Configuratorでチャネルと動作モードを選ぶと対応する R_Config_xxx 関数が自動生成されます。

開発環境はCS+とe2 studioのどちらを使うべきですか?

どちらもCC-RLとSmart Configuratorを利用できます。CS+は純正・軽量で日本語情報が豊富、e2 studioはEclipseベースでRX/RAなど他のルネサスデバイスと操作を統一できます。複数デバイスを扱うならe2 studioが扱いやすいです。

RL78で消費電力を下げるには?

処理がないときはHALT/STOPモードに遷移させ割り込みで復帰させます。SNOOZEモードを使うとCPUを起こさずにADC変換やシリアル受信を実行でき、電池駆動機器の平均電流を大幅に下げられます。

STM32など他マイコンとどう違いますか?

RL78は16bitで超低消費電力・低コストに強く、日本語情報が豊富で国内量産に向きます。32bitの高性能処理やARMエコシステムが必要ならSTM32が有利です。要件に応じて STM32 と使い分けるのが実務的です。

次に読む|マイコン記事