Menu

My Works
- TTL Pong
- Simple AVR DDS
- DSP プリセットラジオ
- 電動式 CVCC 電源装置
- OLED MP3 プレーヤ
- 電子メトロノーム
- 簡易 SD ロガー
- etc.

Report
- MIDI のハードウェア
- aitendo DSPラジオ一覧表
- etc.

Parts Collection
- Logic ICs
- Calculator LSIs
- etc.

Blog

Recent Updates

17/08/03
- Logic IC Collection

17/06/17
- Logic IC Collection

17/04/05
- Logic IC Collection
- MSM100
- MSL1200

17/03/23
- Logic IC Collection
- 英国郵便局規格TTL

16/09/23
- Logic IC Collection
- 沖電気 MSM500 シリーズ

16/08/21
- Logic IC Collection

16/08/03
- Calculator LSIs

16/04/03
- Logic IC Collection
- Calculator LSIs

16/03/16
- Logic IC Collection
- USSR IC Logo

16/03/13
- MAX232のチャージポンプ

16/01/22
- Simple AVR DDS

16/01/19
- 中国規格ロジック IC


R8C/Tiny マイコンを使ってみた

初版公開:2015/01/11
最終更新: 2015/01/21


先日 R8C/1B のマイコンをいくつか購入したので、それを使った開発ができるようになるまでをメモしていこうと思います。

R8C について

R8C/Tiny (以下単に R8C と表記)は Renesas 社の 16bit ワンチップマイコンです。最近の品種らしく全品種 Flash ROM を内蔵しているので、趣味の製作にも気軽に使うことができます。このマイコンはROM 書き込みに特殊な装置は不要なので、UART 経由でのプログラミングが可能です。トラ技に記事もありますし、コンパイラも HEW が使えますので、導入の敷居が低い MCU のひとつといえるでしょう。

アーキテクチャについて言えば、RISC である ARM や AVR と異なり、R8C は CISC となっています。89 個ある命令の実行クロック数や バイト数は命令の種類とアドレシングモードによってまちまちです。最小命令実行クロック数は 1 クロックからとなっていますが、そういう命令は NOP くらいなもので、だいたいレジスタ間演算で 2-4 クロックかかる見積もりです。そのかわり、大抵の命令でレジスタとメモリの間の演算が可能(直交性が高い)ので、アセンブリでプログラムを書くのにも適しています(滅多にしませんが)。総合すると性能は 0.5MIPS/MHz くらいになるのでしょうか。除算器・乗算器が(マイクロコードとはいえ)乗っているので、これが有利になることもあるかもしれません。

割り込みには 20〜30 クロック、復帰に 6 クロックかかります。割り込みトリガはマイコンの規模からすればなかなか豊富といえます。発振停止割り込み、優先レベル付き割り込みマスクなど、このあたりの機能はかなり充実しています。

ペリフェラル(周辺機能)は必要最小限といった印象で、お世辞にも強力といえるものではありません。IO ポートもあまり使いやすいものではなく、プルアップが限られた設定しかできなかったりして、駆動能力もちょっと低い(5mA)です。EEPROM もないものが多い(データ Flash で代替)です。

このように(アマチュアにとって)機能面であまり特筆すべきものはないのですが、最大の特徴はコストパフォーマンスにあると感じます。性能を必要としない用途にはいいんじゃないですか。あまり融通の利くマイコンではありませんが、とっつきにくくはないと思います。同じカタログスペックなら、PIC なんかよりはずっとおすすめです。

今回のターゲットデバイス

R5F211B4 (R8C/1B)

スペックシート

型名 Flash RAM EEPROM タイマ 周辺(IF) 周辺(その他) 電源 クロック 参考価格
R5F211B4SP 16kB 1kB なし
(2k Flash)
8bit*2
16bit*1
UART*2
SSU*1
I2C
10bit ADC 2.7 - 5.5 V 20MHz
内蔵4/8/12M/125k
\108
/12pcs

R8C/1x の中で ROM 容量が最大の品種です。IF 用のモジュールも各種内蔵しているので、何かと便利に使えそうです。ちょっと古いですが、非常に安く購入できました。

パッケージは SSOP 20ピンですが、出力可能な IO は 12 ピンしかありません。しかも ADC 入力ピンが LED 駆動用の IO ピンと兼用なので、ADC を使用するためにはピンをさらに犠牲にしなければいけません。プルアップの設定も限られていて、バス単位の設定であったり、設定ができないピンもあります。もっともこれらのウィークポイントは、Mx や Lx などの最近の品種では改善されてきています。

開発環境のダウンロード

HEW(High-performance Embedded Workshop) は Renesas 製 MCU のための GUI の 統合開発環境です。HEW の評価版を Renesas のウェブページからダウンロードします。この評価版ではリンクサイズが 64kB までの制限がありますが、ROM は 16k しか持たないので関係ありません。なおダウンロードには My Renesas へのユーザ登録が必要であり、実名、勤務先情報含む個人情報や使用目的などを要求されます。うーむ・・・。

HEW を起動して、「新規ワークスペース」から適当にたどっていけば、プロジェクトのテンプレートが出来上がります。最初に「C Startup Application」を選択すると、割り込みルーチンなどのテンプレート(スタートアッププログラム)を自動で生成するので便利です。ウィザードでは、アーキテクチャファミリの選択と ROM 容量の設定を間違えないように注意します。

昔懐かしい、味わい深いユーザインタフェースの HEW ですが、オートコンプリートが使えるし、動作が軽いので IDE としては好きなものの一つです。そういえば昔は「Hitachi Embedded Workshop」という名称だった気がします。

プログラム書き込み方法

R8C/1x のプログラム書き込み方法について説明します。

このマイコンのフラッシュROM は、汎用のシリアル通信(UART)により読み書きが可能です。特別なプログラマは必要ありません。マイコンの MODE 端子を "L" としたままリセットから復帰することで、ブートモードで起動(あらかじめプログラムされたブート ROM 領域が動作)されます。このブートモードで動作している間は、シリアル通信を通したフラッシュ ROM の読み書きが可能です。

フラッシュ ROM のシリアル書き込み方式に応じて、2 種類のブートモードがあります。


(仕様書より抜粋)

1. 標準シリアル入出力モード 2

リセットから 200ms 後の MODE 端子の状態が "L" である場合、このモードが選択されます。データは TxD1, RxD1 端子を通して送受信されます。R8C/1x では外部発振子の接続が必要です。

2. 標準シリアル入出力モード 3

リセットから 200ms 後の MODE 端子の状態が "H" である場合、このモードが選択されます。データは MODE ピンを通して送受信されます。外部発振子の接続は必要ありません。

モード 2 では特別な回路なしに通信できますが、ターゲットボードに外部発振子の接続が必要になってしまいます。一方、モード 3 では通信を行うためのアダプタが必要になりますが、外部発振子が不要であり、通信に使用するピンも 1 つ少なくて済みます。

モード 3 でのプログラミングのための、5V系シリアルと繋ぐアダプタ回路を作ってみました(ノンサポート)。キャパシタはフィルム系を使うのがベターです。

SW1 を押すとブートモードに入り、TXD、RXD と MODE ピンの間の通信が可能になります。SW1 を押したままの状態で書き込みを行います。SW1 を離すと、自動的に通常モードでリセットがかかります。

簡易版なのでタイミングは単純な CR 回路で生成していますが、3V/5V 両方で動作可能だと思います。また RXD にはスパイク状のノイズが入りますので、ビットレート設定等によっては動作しないかもしれません。

書き込みには Renesas の M16 Flash Starter やゆきさんの r8cprog などのソフトウェアが使用可能です。通信プロトコルは単純なのでプログラマの自作も簡単だと思います。r8cprog については、私の環境では書き込み・イレーズ後すぐに通信を行うと失敗する場合がある(モード3 では書き込み処理中に内部クロック周波数が変化するため?)ので、ウェイトをはさむように変更して使っています。

ID について

R8C はフラッシュ ROM プロテクト用に 7byte の ID シグネチャが存在します。この ID はフラッシュ ROM 上のあるアドレスに格納されていて、プログラムと同時に書き込みが可能です。フラッシュプログラマからこの ID を照合しない限り、プログラム書き込みやイレーズができないという仕組みになっています。ID の値は明示的に指定しない限り値は全て 0xFF となりますが、書き込みに失敗するとこの値が化けてしまい、二度と書き込めなくなってしまうかもしれません。

サンプルプロジェクト

サンプルプロジェクトとして、簡単な電子負荷を作ってみました。

参考書籍