Monthly Archives: November 2006

2つのインターフェイス

PS2のコントローラをRoboShellに接続して、DualShock対応まで確認できたことは前回までのブログのとおりである。PS2のコントローラは同期式のシリアル通信が使われている。この同期式のシリアル通信は調歩同期式と並んで、マイコンでは非常にポピュラーな周辺機能である。
当然、LPC2138にもこの機能が装備されている。今まではGPIOをソフトで制御して、この機能を実現してきたわけであるが、折角なのでこの機能を実装することにした。
必要なことは
 1.配線の変更
 2.ポートの変更
 3.SPI化
である。
 1.配線の変更
 今まではなんとなく、P0.10からのポートを使っていたが、SPIの部分に割り当てる必要がある。今時のマイコンは一つのピンに複数の機能がアサインされている。GPIOは最も基本的なものであるので、特に問題なく変更できた。
 2.ポートの変更
 ピンが代わるわけであるから、当然ポートにも変更が必要である。これは #define で宣言してあるので、その部分だけを変更すればOKである。ここでも抽象化が役に立っているわけだ。
 以上まででGPIOを使ったプログラムは問題なく動作する。
 3.SPI化
 SPI化に伴う、作業がいくつか発生する。
 1.初期設定
  各種レジスタの設定
  クロックの設定
  など
 2.プログラムの作成
  SPIの書き出し・読み込み
  LSB,MSB変換
  PS2コントローラはLSBファーストのシリアル通信フォーマットだが、今回利用したSSP(SPI1)ではMSBファーストしかサポートしていない。仕方が無いので、xSBを入れ替えるプログラムを作成した。
 以上、を踏まえてSPI化は成功した。SPIにしたメリットは大きい。クロック速度を自由に設定できるし、ソフトで読み取るよりも高速に読み出せる。プログラムが小さいこともメリットだ。ただ、別の機能をSPIで使うときもあると考えられるので、より自由度の高いGPIO方式も残しておくことにした。ヘッダファイルの #define でどちらの機能を使うか選択できるようにした。

DualShock 対応

ビルド 20061106 の改良として、DualShock の対応を行った。DualShock2まで一気に行きたかったけど、スタックの容量設定にてこずったので、ここまでで終了してしまった。 PS2 のコントローラ周りのプログラムは大きく変わってしまってそのテストとデバッグに時間がかかってしまった。
今回のキモはスタックの容量設定に尽きる。途中で変数が書き変わってしまうバグに悩まされたが、グローバル変数と割込みの退避領域が被ってしまっていた。
テストパターン
スタック増量前
>1211 0001 [Enter]
->GameTech コントローラモード
PS2コントローラの左方向キーを押しながら
>1200 [Enter]
0001


>0900 0001 0000 0000 [Enter]
->Motion 実行
PS2コントローラの左方向キーを押しながら
>1200 [Enter]
0002
^
….
….
============================
スタック増量後
>1211 0001 [Enter]
->GameTech コントローラモード
PS2コントローラの左方向キーを押しながら
>1200 [Enter]
0001


>0900 0001 0000 0000 [Enter]
->Motion 実行
PS2コントローラの左方向キーを押しながら
>1200 [Enter]
0001
^
….
….
PS2コントローラのパッド入力に対応した、ディスパッチャも問題なく動作する。
めでたし、めでたし。

Vista is not Ready ?

ありがちなタイトルだけど、俺んところではこんな感じ。一応、MSDNに登録しているので、RTMが出たのを機に試してみたけどなんかだめだった。
それまでのβ版やRCと変わらずだった。キーボードとかの選択画面が出ないのだ。新しいマシンを買えということなのか?でも、なんとなくわかる。ちょっと前にグラボ買ったけど、最近の8800シリーズなんかを搭載したマシンがVisitaっぽいもんね。凄い計算能力だし(ってコンピュータに計算能力なんて言葉を使うこと自体、どうかしているかも)。
まぁ、とりあえず8800シリーズがメインストリームに降りてくるまで、待ちと言うことで。開発環境とか色々あるしね。PS3のLinuxをインストールするための環境も整えてきたので、後はLCDをどうするかだな。

3ヶ月でアカの他人

RoboShell Composer のページを作るべく、RoboShell Composer を久々に操作してみた。やばい、完全に操作を忘れている。適当な操作を繰り返していると、なにやらおかしな動きが…。開発当時ではテストしてないモードに入ったみたい。いいのか? わるいのか? 操作を覚えていないくらいだから、コードの何かさっぱりわからん、先達はおっしゃった 「プログラムなんて3ヶ月経てば、アカの他人よ。」この3ヶ月はパラメータになっているので、3ヶ月の場合もあれば3日もある。
どうにかこうにか、直して前のと差し替えた。
フー、危ないところだった。
そろそろ、使う人が増え始めたので、クレームが来るところだった。

PS3 Linux

これが目的で購入したわけなんだけど、とりあえず関連するファイルは全てDLできた。後はモニターの手配だな。解像度は 1920×1080 のモニタが必要だ。後、HDCPも。これらを全てクリアするモニタはまだ、発売されていないのが悩ましい。まずはインストール手順の確認だな。

RT に行きます

 とりあえず、手持ちの PC に RoboShell の開発環境を入れてみた。全部、動作を確認できた。かなり良い感じだ。
 土曜日の15:30にRTに RoboShell システムを持っていきます。実物や開発環境が見たい方はどうぞ。中川さんに出来上がったら、見せると約束してやっと出来たのでもって行くわけです。
 ドタキャンになったら、またの機会ということで。
 

開発環境一新

昨日からいじくりまわしている開発環境がなんとか動作を開始した。
設定方法はこちら
makefile を修正したり、いくつかファンクションを書き足した RoboShell もリリースできた。

GCC 4.1.1

RoboShell 自体もある程度しっかりしてきたので、開発環境の整備に取り組み始めた。今までの開発環境のセッティングはお世辞にもわかりやすいとは言えなかった。
現在は最新のコンパイラ(GCC4.1.x)と組み込み用 Eclipse (Zylin) をきちんと組み合わせた環境を構築している。これにより、あのCygwin を入れることなく、開発環境を構築できるようになった。デバッガもさくさく動く。
 GCC4.0.x -> GCC4.1.x のインパクトはけっこうあると聞いていたが、さすがに RoboShell 程度のソフトだと何も書き換えずにビルドすることが出来た。
この環境設定について近日中にWEBを制作します。お楽しみに!!

RoboShellSystem

Board
Board


外部制御が可能になったので、本格的に組み立ててみた。ロボットに必要な機能は一通り装備しているので、モーションをはじめとしたデータの精度向上と新たなロジックを組み込んでいけば、なんとかロボは出来そうだ。

リベンジ(動きました)

前回、バグバグだったRoboShellだがなんとか動作を開始した。不具合のポイントは
 1.スタックの容量不足
 2.ディスパッチャのループの廻し方の不良
などであった。
リンカスクリプトなども修正して、動作を開始した。マルチタスクっぽい処理が堪能できるのはうれしい。もう少し、使い込んで精度と信頼性を上げていく。