ロボットを作りました

なんかずーっとほったらかしにしていたはてなダイアリー。テーマなしに書いてる日記さえも滞り気味だけど、こっちには開発日記をきちんと書いていこう、といろいろと思うところができたので今年の成果を少しずつまとめてみる。

まず、ロボット、買いました。開発環境もフリーで提供されているCPUボード+メカのキットを。買ったものは、以下の通り。

CPUはARM Cortex-M3という小型マイコン。ROMサイズが32kBという小さいものだけど、簡単なブログラムなら十分なくらい。開発環境は、チップメーカーのNXPのLPCExpressoをダウンロードすればC言語で開発可能。マイコンへの転送はPCにUSBでマスストレージとして接続して、ビルドしたbinファイルをコピーすればOKというお手軽さ。

Bluetoothモジュールに関しては、PC/Androidと接続するために購入。マイコン側から見ると単なるシリアル通信。モジュールは中でSPPに従ってマスターと通信する仕様。これでPCやAndroidと接続が可能に。

とりあえず、ハードについてこんな感じでスタート。

MacでTOPPERS/aspのコンフィギュレータを作成

TOPPERS/aspの環境を作るに当たり、まずコンフィギュレータをコンパイルする必要があるけど、これが一筋縄ではいかないので、そのメモ。

まず、コンパイルに必要なBOOSTはMacPortsからインストールしておく。MacPortsからインストールしたものは/opt/local/以下に配置されることを確認。

次に、http://www.toppers.jp/asp-kernel.html から該当CPUの簡易パッケージをダウンロードして、適当なフォルダに展開する。展開して出来たフォルダ内asp/cfg/cfg/Makefileを書き換える。16行目から20行目が次のようになっていると思う。

ifeq ($(OSTYPE),msys)
BOOST_LIBFILES = /mingw/lib/libboost_filesystem-mgw-mt-s.lib /mingw/lib/libboost_program_options-mgw-mt-s.lib
else
BOOST_LIBFILES = -lboost_filesystem$(LIBBOOST_SUFFIX) -lboost_program_options$(LIBBOOST_SUFFIX)
endif

これを次のように書き換える。

BOOST_LIBDIR = /opt/local/lib/
ifeq ($(OSTYPE),msys)
BOOST_LIBFILES = /mingw/lib/libboost_filesystem-mgw-mt-s.lib /mingw/lib/libboost_program_options-mgw-mt-s.lib
else
BOOST_LIBFILES =  $(BOOST_LIBDIR)/libboost_system$(LIBBOOST_SUFFIX).a $(BOOST_LIBDIR)libboost_filesystem$(LIBBOOST_SUFFIX).a $(BOOST_LIBDIR)libboost_program_options$(LIBBOOST_SUFFIX).a
endif

BOOST_LIBFILESが見つからなくてエラーになるので、絶対パスで指定することと、libboost_systemが見つからないことでエラーになるのを回避するために書き換えている。後述でコンパイル時にLIBBOOST_SUFIIXを指定するのでここでは書いているけど、直接書いてもOK。

で、次のようにmakeする。

make BOOST_DIR="/opt/local/include" LIBBOOST_SUFFIX="-mt-s" depend
make BOOST_DIR="/opt/local/include" LIBBOOST_SUFFIX="-mt-s"

すると、asp/cfg/cfg/内にcfgファイルが作成される。

コンパイルしてみる

とりあえず、次のようなソースを書いてみた。

#include "reg3067.h"


int main(void)
{
	int a;
	int b;

	P4DDR = 0xff;
	a=0;
	b=1000;

	P4DR = 0xc0;
	while(1)
	{
		if(a==0)
		{
			P4DR = 0xc0;
			a = 1;
		}
		else
		{
			P4DR = 0x00;
			a = 0;
		}

		while(b>0)
		{
			b=b-1;
		}

		b=100000;
	}
}

このソースは、AKI-H8/3069 LAN対応版用I/OボードのLEDを点滅させるもの。このソースをled.cとする。で、スタートアップルーチンをhttp://mes.sourceforge.jp/h8/h8osv1/crt/index.htmlからダウンロードし、次のようにしてmotファイルを作成する。

$  h8300-hms-gcc -T rom3068.x -nostartfiles -mh -mrelax -mint32 -O2 -W -Wall -o out.coff 30xxcrt0.S led.c
$ h8300-hms-objcopy -O srec out.coff out.mot

で、H8へ転送。

$ h8write -3069 -f20 out.mot /dev/cu.(USBtoSerialのパス)

で、実行したら、点滅した。

H8Writerをコンパイル

H8書き込みソフトOpen SH/H8 writerからソースをダウンロード。ソースのヘッダでFreeBSDの箇所を有効にする。で、コンパイルして、適当な場所にコピーしておく。

$ gcc -o h8rite h8write.c
$ sudo cp ./h8write /usr/local/bin/

USBtoSerialドライバのインストール

手持ちのUSBtoSerialがBaffalo製で、調べたら供給元メーカーがドライバを提供していたので、使ってみたけどH8との通信ができなかった(Windowsとの通信はできた)。なので、SourceForgeのドライバを使った。

http://sourceforge.net/projects/osx-pl2303/