もともと私は R8C大好きだったけど、最近は R8Cは進化がなく、RL78推しがはっきりしてきた。
で、めちゃ安いマイコンを使わないといけなかったので、いろいろと調べて、安いRL78/G10の16PINを使うこととした。
余談になるけど、安いマイコンで探すと Silicon Lab のマイコンが40円ぐらいで販売されている。ROM2K RAM 256byte,ADCも付いている。今回は調べる時間が無かったので、採用しなかったけど、普通に通販で数十個のオーダーでこれだけの価格になるのはすごいことで、小規模のロットでも安く調達できるので、本気で採用を考えたい。
さて、RL78/G10だがちょうど良いことに 秋月で 小さいボードを販売していたので、これをつかってバラックを作ってみた。
http://akizukidenshi.com/catalog/g/gK-09035/
R5F10Y47ASP
コードフラッシュメモリ:4KB、RAM:512B
で 16pin の内電源以外の 14pinがフルに使える。
デバッグ用の2pin は兼用にしなければ、 12pinと言うことで、今回のプロジェクトではこのぐらいで収まりそう。
で、RL78は仕事では初めて使う。また、、コード生成もあるので、せっかくなのでこれを使おうと思う。
◆コード生成について
最初だけいろいろ戸惑ったところがあるけれど、順番に設定を入力していけばコード生成できる。
また、コード生成が重複している端子のチェックをしていて、使いたい機能があったとして、そこで使用する端子が他の機能に使われていると、選択項目に出てこないなどしてくれる、これば便利だ。
もっとも、一つの端子を複数の機能として使い分けをしたいと言うことには対応出来ないんだけど、本来ならばマニュアルをよく読んで、機能の割り振りをしないといけないところを、ウィザードで簡単にわかるのは良い。
このマイコンは UARTとしては 1CH. いわゆる SPI機能としては 2CH使える。 最初 UARTとSPI両方使おうかなと考えていたが、コード生成で選べないので、マニュアルを調べると UART使う場合には SPIは1CHも使えないことがわかった。
こんなことも、小ピンの安いマイコンにはよくあることだけど、たくさんコードを書いてから動かないとうんうんうなって、マニュアル調べて、出来ないとわかる・・という手間と時間を考えると、本当にありがたいことだ。
注意としてコード生成したファイルは必ず先頭が r_cg_xxxx となるがそのファイルは自動生成実行で上書きされてしまう。
これらのコードを覗いてみると以下のようなコメントがある。
/* Start user code for function. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
ユーザーが書いたコードはこのコメントの中にあれば残る。
最初に一回だけ自動生成で、あとは自分でメンテすると言うことであれば、べつにどこに何を書いてもいいんだけど、
後から設定を変更したいと言うことはよくあることなので、コードが消されないように注意したい。
何にしろ、使った事のないマイコンでわずか一日でPICマイコンのソースから移植できたのはすごいことだ。
◆RL78とPICマイコンのコード効率の違い
今回は いろいろ事情があって 最初にPIC16F887 でバラックを制作して評価した後、量産GOとなったので、小さくて安いマイコンということでRL78と言う流れになった。
今回は 入力された波形の周波数とDUTYを算出して、それであるモジュールを動かすみたいなシステムだ。
PICマイコンは古いこともあり、機能が非常に少なく、割り込みのチャタリング除去もハードでサポートしていないのでソフトでしないといけないとか余計な処理が入る。SPI機能も使わず、ポートパタパタでやっている。
一方RL78はSPI機能を使い、また、タイマーのキャプチャー入力のノイズ除去なんかも優秀だし、タイマの機能も多彩なので、タイマー設定しておけば、割り込み時にレジスタを取得するだけで正しい値が出てくる。
そう思うと RL78の方がコードが少なくてすむと考えていたが、実際にビルドしてみると PICマイコンの方がずいぶんとROMサイズが小さく収まる。
MPLAB メモリ使用
RL78のMAPの抜粋
.vect
00000000 0000007f 80 0
.const
00000080 00000080 0 2
<<中略>
.monitor1
000000ce 000000d7 a 1
.text
000000d8 00000bc4 aed 1
.RLIB
00000bc5 00000c31 6d 1
|
PIC16F は 2430bye
RL78G10 は 3120byte
PIC16Fは最適化無しで、RL78はデフォルトの最適化ありなのにこのように逆の結果となった。
移植なのでほとんど同じプログラムで、PIC16の方がコードが若干多いというのに。。
よく見てみると RL78/G10は Vecterに 128byte とられているのも痛い。
安いマイコンだと ROMの残容量っていうのが本当に苦しいところがあるけれど、PICマイコンのコード効率の高さというのもすごいものがあることがわかった。。