2006年8月23日 (水)

STK-7125とかVS-RC003とか

ロボコンマガジンNo.47を読んでいてVS-RC003にLPC2148が使われていることも知りました。それによりますと

★IXBUS拡張基板が接続可能です。拡張基板のラインナップとして、ジャイロ/加速度センサ基板、LED基板、アナログ入力基板、デジタル入出力基板などの販売を予定しています

とのこと。ということはEZ-SERVO(mini EZ-ARM7)でもこれらの拡張基板が使えるということなのでしょうか。なんか得した気分ですが、詳細はまだ調べていないので取らぬ狸の皮算用かもしれません。おそらくI2Cの拡張規格だと思われます。

この間までARMなんて全然使われていないなあと思っていたくせに、時代はLPC21xxを使ったARM7か?とか思ってみたり。D/Aを使って音声再生とかも今後やってみてもいいなあ。とりあえずは内蔵ROMに埋め込める分だけで。この調子でいくと通常の歩行制御やモーション再生のプログラムだけではROMは絶対に使い切らないと思われます。

いしかわきょーすけさんのページで紹介されていたアルファプロジェクトのSH/TinyボードSTK-7125もとっても気になりますがここはぐっと我慢します。

| | コメント (2) | トラックバック (0)

2006年8月11日 (金)

OptimizeでEZ-SERVOのキットが購入できるようになっているようです

OptimizeにてEZ-SERVOのキットの購入ができるようになっています。とりあえず予備がほしかったので1個ポチッとな。mini EZ-USBもついでにもう1個買いました。

EZ-SERVOにフラッシュを書き込むとPWMのレジスタが中途半端な値になるときがあるのか書き込み途中でロボットの姿勢がちょっとヤバイ状態になることがあります。書き込み時間が短い間はまだいいのですがソフトの容量が増えるにつれ書き込み時間も延びるのでだんだん見逃せなくなってきました。この辺はjtag_flash.exe経由でPWMが暴走しないようにレジスタ設定を事前にして欲しいところです。現状では足だけはサーボの電源を切ることで対処していますがあまり使い勝手はよくありません。

CPUやCPLDの電源とサーボの電源を分離してサーボの電源のみOFFするように改造するのが現状ではよいのですがどうしたものか・・・。それとも何か使い方を間違っているのでしょうか・・・?この辺は人柱になっているだけに厳しいところですね。

| | コメント (0) | トラックバック (0)

2006年8月 8日 (火)

RoboshellのPWM幅

Roboshellをそのまま使ってPWMを出力すると私が使っているミニスタジオのサーボRB995では最大幅振ることができません。そこで現状がどうなっているかを確認し、RB995の最大幅が設定できるように修正をしました。現状の設定ではKONDOのサーボに合わせてあるようです。

具体的にはPWM_SDC.hの下記の値をRB995に合うように修正しました。

#define PWM_BASE_TIME 4827  // 4400d(2320us)->4827d(2500us)
#define PWM_HOME_TIME 2750 //1.5msec
#define PWM_MIN_TIME 927   // 1020d(550us)->927d(500us)

実際に最大値、最小値を設定してみてPWMの波形が500us-2500usまで設定できるようになったことをオシロで確認しました。

これで膝のP軸が最大幅近くに設定したくてもできなかったのができるようになるはずです。サーボ角度の設定などを支援するRDC.exeは幸いにもminimam値、maximam値を超えた値でもちゃんと設定してくれるので助かります。

次はホームポジションが少し前かがみになっていたのを修正します。

| | コメント (0) | トラックバック (0)

2006年8月 4日 (金)

math.hを使うには(解決)

math.hの件ですが、解決しました。なんともありがちなスタックのオーバーフローが原因だったようです。結局、自前でsqrt,atanなどの関数を用意してデバッグをはじめていたのですが、挙動がおかしいのです。グローバル変数が動かしているうちにどんどん破壊されていきます。グローバル変数をどのファイルにおくかといった配置によって同じ変数でも破壊されたりされなかったりします。グローバル変数でvolatileをつけていない部分もありvolatileを片っ端からつけていきましたがやはりグローバルデータが一部破壊されていきます。これがスタックがオーバーフローしている可能性が高いと思った理由です。

具体的にはどうしたかというとC:\EZ-ARM\_commonにあるlpc2138.ldというファイルの

/* Memory Definitions */

MEMORY
{
  CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
  DATA (rw) : ORIGIN = 0x40003000, LENGTH = 0x00001000
}

/* Memory Definitions */

MEMORY
{
  CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
  DATA (rw) : ORIGIN = 0x40005000, LENGTH = 0x00001000
}

のようにしました。

LPC2138のRAM領域は0x40000000から始まっていますので0x3000(12kB)をスタックに割り当てていたことになっていたと思うのですが、これを0x5000(20kB)にまで増やしました。解釈は間違っているのかもしれませんが、とにかくこれでグローバルデータの破壊の問題もmath.hにある関数を使うとまともなバイナリができない問題も解決しました。スタックってこんなに積みあがるのかなあ?といった疑問もありますが結果として動作するようになったのでたぶんそういうことなんでしょう。贅沢ですねRAMが32kBもあるって。SISOさんshin1さんをはじめH8/Tinyで計算歩行をしている方々はかなり苦労されているのではないかと推測します。

アドバイスをくれた森 秀樹さん、ぐ~たらパパ・おかださん、ありがとうございました。森さんからアドバイスをいただいたsoft-floatのオプション設定もやってみましたが挙動は変わりませんでした。LPC2138にFPUはありませんがデフォルトではFPUを使う命令は出力されないようです。

とりあえずこれで計算モーションが動きはじめました。でも、まだ考え違いがあるようで足の振り上げ方がおかしいです。でも俄然やる気になってきました。

| | コメント (5) | トラックバック (0)

2006年8月 3日 (木)

math.hを使うには(未解決)

今まで私はgccをあまり使ったことはありません。math.hなどのシステムライブラリもあまり使ったことがありません。H8/TinyやR8CではROMやRAMがあまりないのでそもそもライブラリを使うということが選択肢に入りませんでしたし、画像処理や計算歩行などはやっていなかったのでmath.hにあるような関数自体も必要ではありませんでした。しかし今回はAMR7TDMIをコアに持つ大容量高速なLPC2138を使用しているわけですからこれを使わない手はありません。

今回math.hを使うにはどうしたらよいかを調べたのでメモしておきたいと思います。とはいってもまだ正常に動作していませんが・・・。

まずgccでmath.hに含まれる関数を使用するにはnewlibと呼ばれるライブラリをインストールしておく必要があるらしいのですがこれはTeamKNOxさんのところに書いてある手順でGCCをインストールすると既にインストールされているようです。OptimaizeさんのHPで紹介されているCygwinベースのGCCでも勝手にインストールしてくれるようです。

次にmath.hを使用したファイルに#include <math.h>を追加してmath.hのライブラリであるlibm.aをリンクするオプション-lmをmakefileに追加するのですが問題なのは追加するその場所です。TeamKNOxさんのmakefileを見るとLIBSという記述が見受けられますので単純にここに入れればよいのかと思われましたがundefined reference to `sqrt'のような感じでエラーとなってしまいます。

$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(OBJ)  -o $@

となっている部分を

$(CC) $(CFLAGS) $(LDFLAGS)  $(OBJ) $(LIBS) -o $@

と$(OBJ) と$(LIBS)の位置を入れ替えてあげることでエラーを回避できるようになりました。よくわかりませんが-lmはとにかく後ろの方につかないといけないようです。

これでコンパイルはエラーなしに通るようになりましたが、できたバイナリが正常に動作しません(泣)。libm.aが正常にリンクされていないのではないかと思いましたが、C:\GNUARM\arm-elf\libの中のlibm.aをリネームしてみるとエラーがでるので違うようです。

うーん、仕方がないので自前で必要な関数を用意することにしますか。まず確認でってやるとつまづいてばかりでちょっと悲しくなります。

| | コメント (4) | トラックバック (0)

2006年8月 1日 (火)

計算歩行モーションを実行できるようにデバッグ

私が今使用しているRoboShellではパラパラ漫画方式のモーション再生を支援してくれる仕組みは入っているのですが、計算歩行などを使ったオリジナルモーションを実行できる仕組みはありません。まずは簡単にこのパラパラ漫画方式のテーブルを書き換えるやり方で計算歩行をさせようと考えて実装してみたのですが、どっぷりはまってしまって実行するとリセットがかかったり暴走したりするバグに悩まされていました。

コンパイルするたびに挙動が変わり2週間近くぼちぼちと調査をいていたのですが、先日ようやくその対処ができてオリジナルモーションを作成するメドが立ってきました。

とりあえず作ったのは現状を維持するために今のPWMの値を読み出してそのまま設定するといったものだったのですが、これがいけなかったようです。つまりモーション実行をしてもなんにも動作しないはずだったのですがこうすることによって暴走が引き起こされていました。

PWM_Value()という関数で現状のPWM値を読み出すのですが PWMの割り込みルーチンであるPWM_SDC_ISR()でも同じ変数を同じ関数で参照しており、割り込みが発生していたときに割り込み関数内で割り込み前にアクセスしていた変数(もしくは関数)にアクセスすると正しく割り込みが処理されないのではないかと推測しています。割り込み後に正常に割り込み前の状態に戻れないために暴走していたのではないかというわけです。とにかく割り込みで使用する変数には同じ値が入っている専用の変数を用意しお互いが別々の関数および変数を参照するようにすると暴走は発生しなくりました。

JTAGデバッガを使っても暴走していたのですが、JTAGデバッグで根気良くソースを追いかけていき暴走直前の位置がわかり解決に至りました。これ以外にも機能を大きく削減してみたり、ポートをON・OFFさせるルーチンを随所にいれてオシロで観測しながら怪しいところをしぼりこんでいってこの変数がどうも問題らしいということを突き止めました。それにしてもかなり時間がかかってしまいました。

仕事であればどうにか調べて裏を取るところなのですが現状ではモーション再生を優先して後で調べたいと思います。TamKNOxさんならわかるかもしれませんね。これが動かないことには計算歩行ができなかったので、出鼻をくじかれた感じですがなんとかモーション作りに入っていけそうです。

| | コメント (2) | トラックバック (0)

2006年7月26日 (水)

Eclipseを3.2にバージョンアップ

Eclipseのバージョン3.2が正式リリースされていたのでアップデートしました。これが思いっきりはまってしまいました。結局うまくいかなかったのはEmbedded CDTのインストールだったのですが、何が悪いのかわからなくて時間がかかってしまいました。Eclipseは3.2の正式リリースに伴ったLanguagePacksもリリースされていましたが英語のままで行くことにしました。

Eclipse3_2version_2 

EmbeddedCDTのインストールではまったのはembeddedcdt-200xmmdd と zylincdt-200xmmddはどちらもEclipseフォルダにコピーする必要があるのですがembeddedcdt-200xmmddのみをコピーしていたためにコンパイルは通るがデバッグできないといった状態になって中途半端に動作する状態になっていました。それだけなんですけどね・・。

ま、おかげでzylinのメーリングリストのアーカイブから最新情報をゲットできることもわかったし、一応環境もちゃんとバージョンアップできたし前向きに考えることにしましょう。ちなみに最新版のzylincdt-20060707はうまくデバッガの設定方法がわかりませんでした。

| | コメント (0) | トラックバック (0)

2006年7月22日 (土)

センサーボード実装完了

センサボードの実装が完了しました。あわせてロボットとは切り離してデバッグができるようmini EZ-ARM7にEZ-SERVOのセンサーボードが取り付けられるようなマザーボードも作成しました。配線数があるので結構大変でした。

Sencer_arm7

加速度センサと距離センサはケーブルをセンサーボードに直付けしています。ケーブルの先はコネクタが突いていて切り離せるようになっています。動作確認とロボットへの取り付けは明日以降の予定です。

Onlysencer Onlyarm7

| | コメント (0) | トラックバック (0)

2006年7月19日 (水)

LPC2138のフラッシュ書換え回数

SISOさんの掲示板でSISOさんがLPC2138のフラッシュ書換え回数に関して質問されていたので気になり調べてみました。

データシートのP.12 6.2 On-Chip Flash program memoryに記載があり、10万回書換え20年のデータ保持が保証されているようです。

これもSISOさん絡みで東芝セミコンダクターのロジックICの検索をしたのですが、インターフェースが変更されて非常によくなっています。以前はわかりづらくてどうしようもない感じでしたが、非常に直感的に選択できるインターフェースに変更されていました。直感的にわかるって重要ですね。

| | コメント (0) | トラックバック (0)

2006年7月 7日 (金)

EZ-SERVOでシリアル通信が可能になりました

オプティマイズで販売が開始されているEZ-SERVOでシリアル通信ができるようになりました。ついでだったのでパワーLEDをつけました。ユニバーサルエリアって結構便利ですね。いろいろ追加しやすくてとても素敵です。今回はシリアルをステレオケーブルで接続することにしました。

Ezservoserial

最初、思ったとおりに動かなくていろいろしているうちにLPC2138のFlashにも書き込めないことが判明。CPLDは書き込みOK、FlashはNG、以前に買ったmini EZ-ARM7にはOKということで、はんだ不良だったらいいなとEZ-SERVOのJTAG周辺のはんだをあてなおしたところFlashに見事に書き込めるようになりました。

しかし、オプティマイズでダウンロードしてきたhexファイルでは正しく受信することはできず、TeamKNOxさんのところからダウンロードして先日コンパイルしたHexファイルを書き込んでようやく正常に受信することができるようになりました。オプティマイズさんのところからダウンロードしたHEXファイルではHPにも書いてあるとおり38400bpsでしたが、TeamKNOxさんのところのHEXファイルでは57600bpsです。オシロでボーレートを確認しました。

オプティマイズさんのHEXファイルの確認をしているときはUSB-シリアル変換器を使用していたのですが、TeamKNOxさんのHEXファイルの確認をするときは、まずUSB-シリアル変換器でやってNGでデスクトップのシリアルポートからやってみるとOKで、USB-シリアル変換器がダメだったのか!と思いきや、もう一度USB-シリアル変換器でやっても、なぜかいけてしまったのでUSB-シリアル変換器がおかしくなっていただけのかもしれません。まあ、何はともあれ通信できるようになってめでたしめでたし。

PC側のソフトであるRSCからもPWMのスライダを動かすとPWM波形が変わっているのでとりあえずの送信・受信はできるようになったようです。でも使い始めたばっかりなのでRSCの使い方がよくわかりません・・・。これからいろいろ試していきたいと思います。

ONOさんもうずうずされているようですね。ONOさんもどうですか~、一緒にやりましょうよ(笑)。みんなでやればARM7も怖くないですよ、きっと。でも8月上旬までキットは販売されないようなのでそれまでは私が人柱となってがんばりますかね(笑)。

| | コメント (0) | トラックバック (0)

2006年7月 5日 (水)

EZ-SERVOを入手しました

オプティマイズで公開が開始されたばかりのEZ-SERVOですが、実は手元にあったりします。いいなーと思って6月の頭くらいに有償でも構わないので基板を使わせていただけないかとTeamKNOxさんに問い合わせたところ、現在公開されているツールを使用するなら無料で提供していただけると言う話になりまして、日曜日の晩にようやくその基板が私の手元に届きました。ケーブルは私が後から取り付けたものです。

Ezservo_1

SISOさんも迷われているみたいですね~。どうですか~一緒にやりませんか、LPC2138(笑)。私もARM7は初めてなのでさっぱりわかりません。一緒に悩みませんか~?mini EZ-USBを使ったJTAGデバッグもかなりいい感じですよ~。正直、H8/TinyやR8Cで使ってきたE8よりもレスポンスがよいのでびっくりしています。

| | コメント (0) | トラックバック (0)

2006年7月 4日 (火)

Roboshellをコンパイル

TeamKNOxさんのところで公開されているRoboshellのコンパイルがEclipseでできるようになりました。

最初Eclipseでうまくコンパイルができませんでした。TeamKNOxさんに直接質問したところmakeのインストールができていないのではないかということでしたので、make.exeの最新版(3.81)もインストールしたりしてみましたがあまり関係なかったようです。make単体のインストールは石井勝さんのまさーるのページのここを参考に今回初めて行いました。特にこれといった問題もなくインストールできました。

あれこれやってみた結果、どうやらGNUARMのパスが通っていなかったらしくオプティマイズさんEZ-ARM7のGCC開発環境で紹介されているsetenvを実行してからうまくいくようになりました。コマンドプロンプトでmakeを実行できるのを確認してからEclipseで確認した方がよいとTeamKNOxさんからアドバイスを受けましたのでそのように確認しました。cygwinを使っている場合はcleanを実行する際にdelではなくrmを使用しないとエラーが出ますのでお気をつけください。

一応、デバッガもちゃんと動作しているようです。

| | コメント (2) | トラックバック (0)

2006年7月 3日 (月)

オプティマイズにてEZ-SERVOのページが公開されています

オプティマイズにて工事中ながらEZ-SERVOの公開が始まったようです。キット予定5000円ですか。安いですね。このCPU+CPLDというのが私の心をとてもくすぐります。

| | コメント (0) | トラックバック (0)

2006年6月27日 (火)

mini EZ-ARMの開発環境設定

オプティマイズさんのmini EZ-ARMの環境設定を行いました。私は統合開発環境(IDE)好きなのでTeamKNOxさんで紹介のあったEclipseを使った環境としました。Eclipseはフリーの統合開発環境としては有名なようでいろんなところで紹介されています。とりあえずこちらで説明されている通りにインストールしました。EclipseはJAVAベースで動作しているのでJAVAのVMEもインストールする必要があること以外は特に問題なくインストールができました。JAVAのインストールの仕方も詳細に知りたいという方は、こちらもStepByStepで解説してくれていますので役に立つかもしれません。ビデオで説明してくれるモードもあって(英語ですが・・)、間違いが少なそうです。

また、こちら説明にしたがって環境を日本語化しようと思いましたが、Embedded CDTを使おうと思うとEclipseのバージョンが3.2以降となります。またEmbedded CDTを使う場合は、EclipseのCDTは削除する必要があります。Eclipseは3.2だと現在では3.2RC7が最新のようなのでこちらをインストールしました。日本語化のパッケージは3.1までしかでていないようなので今回は見送りました。

EclipseのCDTではBreakpointなどをうまく設定できなくてイマイチ使い方がわからなかったのですが、ZylinのEmbedded CDTを使うことで特に問題なくBreakpointを設定することができるようになりました。とりあえずこのままいこうと思います。レスポンスもとてもいいです。E8とかはFlashに書き込みながら動作するのでワンテンポ遅い感じでどうしてもイライラしがちでしたが、mini EZ-USB+mini EZ-ARMの環境ではJTAGで動作しているからか動作がとても軽いといった印象を受けました。もちろん、使いこなすのはこれからなのでいろいろ問題がでてくるかもしれません。

とりあえずこれでmini EZ-ARM開発環境も整いました。

| | コメント (5) | トラックバック (0)