admin のすべての投稿

マルツパーツの「マイコンレーサー2 」のプログラムをc言語で開発する方法

マルツパーツの「マイコンレーサー2 」のプログラムは
通常は専用の「ブロックコマンダー」を使って作成しますが、
姉妹品の「マイコンレーサーAdvance 」には
「より高度なプログラミングに挑戦したい方にはこちらがおすすめ。」
と言う事でHEWでビルドできるプロジェクトソースファイルが付属しています。

1500円をケチって「マイコンレーサー2」を買ってしまったけど
やっぱりc言語を使いたい。
と言う事で「マイコンレーサー2 」でHEWでの開発を試してみました。

まず
1. 「マイコンレーサー2 」で作った「ブロックコマンダー」のプログラムは「マイコンレーサーAdvance 」でも動く。
2. 使っている「ブロックコマンダー」は同じ物。
3. 回路的にも「マイコンレーサーAdvance 」で追加された操舵機能部分以外はほとんど同じ。
以上から多分「マイコンレーサー2 」でもHEWが使えると判断。

統合環境「HEW」に関して
HEWをインストールしていない場合は
https://www.renesas.com/ja-jp/products/software-tools/tools/compiler-assembler/compiler-package-for-r8c-and-m16c-families.html
ここからR8C,M16Cファミリ用C/C++コンパイラパッケージをダウンロードしてインストールしてください。
HEWをインストールしていてR8C,M16Cファミリ用C/C++コンパイラがインストールされていない場合も同じくここでダウンロードしてください。
インストールすると既存のHEW環境にコンパイラがインストールされます。

プログラムの書込みに関しては「マイコンレーサーAdvance 」の説明書にも書かれていなかったので
以下自分が調査した結果です。
Renesasは合併前の会社が提供していたままのツールが多くて
どれを使ったら良いのか、どれが使えるのか煩雑です。

フラッシュプログラマーに関して

 Renesas Flash Programmer V2.05 チップの選択一覧に無い。
 Renesas Flash Programmer V3.01 チップの選択一覧に無い。
 Renesas Flash Programmerは使えない

M16C Flash Starter
 com port の選択が 1~9までしか選択できない為使用不可
 (自分の環境ではcom18で認識されているため)

Flash Development Toolkit R(C R5F21344CNFPに設定 書込みOK
 「Error No 15024: ブートの合わせ込みに失敗しました」が発生した場合は
 接続ケーブルを差し直して、デバイスと再接続すればOKです。
 Flash Development Toolkitの使い方に関しては別途解説します。

Flash Development Toolkitは以下のページから「無性評価版をダウンロードしてください。」
https://www.renesas.com/ja-jp/products/software-tools/tools/programmer/flash-development-toolkit-programming-gui.html#

r8c_writer
 書込み可
 HEWに外部コマンドとして登録できるので便利
 
https://www2.himdx.net/mcr/product/download.html
 ルネサス統合開発環境用その他ソフト Ver.1.50 mcr_sonota_soft.zip
 をダウンロードして解凍してください。
 HEWへの登録手順は「r8c_writerの登録方法.txt」に記載されています。

今回は概要しか解説していませんが、
実際のc言語による開発手順をまとめる予定です(多分)

サクラVPSサーバーに Blynk ローカルサーバーをたててみました。

以前にもこのこのブログで何度か取り上げたことのある Blynk ですが
Serverのプログラムも配布されているので試しにサクラVPSサーバーにインストールしてみました。

プログラムのダウンロード先やインストール方法はココに書かれていますので参照してください。
http://docs.blynk.cc/#blynk-server

Adminページへのアクセスでちょっとハマってしまいました。
アクセスできるIPアドレスを設定するようになっているのですが
その設定ファイルがどこにあるのかが分かりませんでしたが

Advanced local server setup の下に書いてある
「server.properties」
で設定するようになっていました。

server.propertiesは説明ページからサンプルファイルへのリンクが有りますので
コピペして server.jar を置いたフォルダーと同じ階層に置いてください。
とりあえず
allowed.administrator.ips=0.0.0.0/0
にするとIPによるアクセス制限は外れます。

まだ Adminページへのアクセスしか確認していませんが
近日中に スマホの Blynk アプリから接続してみます。

screencapture-160-16-73-148-7443-admin-1473482596704

誰も教えてくれない「組込みC言語」 3

定数の命名ルール

#define 定義する定数名は大文字にする

これは変数と混同しない為のコーディングルールとして良く使われています。

1
2
#define		signal_max		200
#define		signal_min		100

ではなく

1
2
#define		SIGNAL_MAX		200
#define		SIGNAL_MIN		100

のように定義します。

この定数にも前回の変数の型をいれると

1
2
#define		U1_SIGNAL_MAX		200
#define		U1_SIGNAL_MIN		100

となります。

例えば

1
if(u1_port_00 > u1_signal_max)

だと u1_signal_max は 定数なのか 変数なのかパッと見わかりませんが
定数は大文字にするというルールを決めておけば
この場合の u1_signal_max は 変数だとすぐにわかります。
当然

1
if(u1_port_00 > U1_SIGNAL_MAX)

だと U1_SIGNAL_MAX は 定数だとすぐにわかります。

余談ですが
定数の読み「じょうすう」、「ていすう」どっちで読んでいますか?
自分は昔は「ていすう」と読んでいましたが、今は「じょうすう」とよんでいます。

誰も教えてくれない「組込みC言語」 2

組込みプログラムではバグを早期に発見できるように
変数名はサイズが分かるように命名します。

例えば

1
2
3
4
5
6
7
8
9
10
11
void main(void){
	unsigned char	i;
 
	while (1U)
	{
		P3.0 = 0;
		for(i=0;i<50000;i++){};
		P3.0 = 1;
		for(i=0;i<50000;i++){};
	}
}

このプログラムにはバグが有ります。
iは符号なし8bitの変数(0 ~ 255)ですが
その範囲を超えた 50000 と比較しています。
このサンプルの場合は宣言部と比較している箇所が近いために気付きやすいのですが
変数がグローバル変数で別のファイルに定義されている場合はちょっと見気付きません。

これをちょっと見でもバグだと気付くように変数名を変えてみましょう。

1
2
3
4
5
6
7
8
9
10
11
void main(void){
	unsigned char	u1_i;
 
	while (1U)
	{
		P3.0 = 0;
		for(u1_i=0;u1_i<50000;u1_i++){};
		P3.0 = 1;
		for(u1_i=0;u1_i<50000;u1_i++){};
	}
}

変数名を i から u1_i に変えました。
もうお気づきかと思いますが u1_i の u1 は この変数が符号なしの1バイトの変数を意味しています。

このように変数名に型を表すワードを明示しておけば、
u1_i<50000 この部分を見ただけで 変数が符号なしの1バイトの変数 と 1バイトの範囲を超えた値と比較しているのが一目瞭然となります。 u1 s1 u2 s2 s4 f4 f8 を変数の接頭語として良く使用します。 意味は以下のようになります。 u1 符号なし1バイト s1 符号あり1バイト u2 符号なし2バイト s2 符号あり2バイト u4 符号なし4バイト s4 符号あり4バイト f4  単精度実数 f8  倍精度実数

誰も教えてくれない「組込みC言語」 1

■組込み現場では int型は使わない。

組込み系のC言語の本にも
unsigned int i;
int j;
とかサンプルプログラムに書かれているが
これは間違いではないが実際に組込みプログラムに携わっているプログラマーは使わない(はず)

なぜならば int型は マイクロプロセッサに依存する為
16ビットだったり、32ビットだったりするからです。

他のプロセッサに移植する際に見つけにくいバグの1つとなってしまいます。

よって以下のプログラムは

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void main(void){
	unsigned int	i;
 
	while (1U)
	{
		P3.0 = 0;
		for(i=0;i<50000;i++){};
		P3.0 = 1;
		for(i=0;i<50000;i++){};
	}
}
 
void main(void){
	unsigned short	i;
 
	while (1U)
	{
		P3.0 = 0;
		for(i=0;i<50000;i++){};
		P3.0 = 1;
		for(i=0;i<50000;i++){};
	}
}

と書くべきだと思います。

サンプルプルプログラムに int型の宣言がある組込み向けc言語の解説書は自分的にはアウトです。
ただマイコンチップを特定の機種に絞っている本は別です。

ルネサスのRL78 Webシミュレータ

ルネサスは三菱電機、日立製作所、NECの各社の半導体部門の集合体なので
マイクロプロセッサも合併する前の流れがあって、当然開発環境も。
HEW、CS+、e²studio、サードパーティだとGHS社のMULTIとか。

ここ数日これらの開発環境を調べていたら
e²studioが面白い進化(?)をしていた。
e²studioは元々ルネサス・ヨーロッパ製のIDEでeclipse + CDT ベースとしている。
現在は日本でのサポート有り。

RL78 Webシミュレータを使って実機が無くても外部部品の入出力や端子計測が可能らしい。

これはWebシミュレータ専用の総合開発環境ではない為に、ターゲットボードやE1エミュレータを揃えれば
そのまま実機での評価に移行できる(はず)。

RL78 Web Simulatorのページ

実際の使用手順

Webシミュレータのボードのモデルは実際に販売されている
Renesas Starter Kit for RL78/G13 っぽいです。

ZEROPLUSのLAP-CがWIn10に対応&追加プロトコル無料

秋月電子やマルツパーツで販売されているZEROPLUSのLAP-Cシリーズのソフトウェア&ドライバーが
Win8、Win10対応になりました。
おまけに110種以上のプロトコルが無料に!
(最新版のソフトウェアーは標準ですべてのプロトコルに対応していますので別途プロトコルファイルをダウンロードする必要はありません。)

パソコンをWin10にアップデートしてから使えなくなっていたので
これで復活です。
ソフトウェアーダウンロードページ

対応プロトコル一覧

マルツオンライン(Amazon)

Cent じゃなくてSENT(Single-Edge Nibble Transmission)だよ

CentOSなら知っていた。
SENTって?
Weblioで調べても send の過去形・過去分詞 としか書いていない。
wikipediaにも波形の写真が載せて程度
https://en.wikipedia.org/wiki/SENT_%28protocol%29

まだ新しい規格(とは言っても2007年04月なので10年近く経とうとしている)なのでWebからもほとんど情報が拾えない。
SENT は SAE J2716 の「SENT – Single-Edge Nibble Transmission for Automotive Applications」であり
シリアル通信の規格の1つ。

仕様書はSAE Internationalのページから購入できる。
最新版「J2716_201604」

要は立下りから立下りまでのバルスの幅で4bitのデータを送る規格。
シンクロナスフレーム、ステータスフレーム、データフレームCRCフレーム、ポーズパルス(オプション)で構成されている。

長年プログラマーをやっているけど恥ずかしながら4bitの単位をニブル(Nibble)と言うのを知らなかった。

対応しているマイコンチップもまだ少なく
ルネサスのRH850ファミリ、MicrochipのdsPIC33/PIC24ファミリ、NXPのMPC574xPファミリ位しかお目に掛かれていない。

とりあえずMicrochipの「dsPIC33EV256GM102」で色々と実験する予定です。
Microchipの「Single-Edge Nibble Transmission)モジュール」のマニュアル