« 2006年10月 | メイン | 2006年12月 »

2006年11月30日

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 でどちらの機能を使うか選択できるようにした。

2006年11月26日

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コントローラのパッド入力に対応した、ディスパッチャも問題なく動作する。

めでたし、めでたし。

2006年11月25日

Vista is not Ready ?

ありがちなタイトルだけど、俺んところではこんな感じ。一応、MSDNに登録しているので、RTMが出たのを機に試してみたけどなんかだめだった。

それまでのβ版やRCと変わらずだった。キーボードとかの選択画面が出ないのだ。新しいマシンを買えということなのか?でも、なんとなくわかる。ちょっと前にグラボ買ったけど、最近の8800シリーズなんかを搭載したマシンがVisitaっぽいもんね。凄い計算能力だし(ってコンピュータに計算能力なんて言葉を使うこと自体、どうかしているかも)。

まぁ、とりあえず8800シリーズがメインストリームに降りてくるまで、待ちと言うことで。開発環境とか色々あるしね。PS3のLinuxをインストールするための環境も整えてきたので、後はLCDをどうするかだな。

2006年11月20日

3ヶ月でアカの他人

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

どうにかこうにか、直して前のと差し替えた。

フー、危ないところだった。
そろそろ、使う人が増え始めたので、クレームが来るところだった。

PS3 Linux

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

2006年11月17日

RT に行きます

 とりあえず、手持ちの PC に RoboShell の開発環境を入れてみた。全部、動作を確認できた。かなり良い感じだ。

 土曜日の15:30にRTに RoboShell システムを持っていきます。実物や開発環境が見たい方はどうぞ。中川さんに出来上がったら、見せると約束してやっと出来たのでもって行くわけです。

 ドタキャンになったら、またの機会ということで。

 

2006年11月16日

開発環境一新

昨日からいじくりまわしている開発環境がなんとか動作を開始した。

設定方法はこちら

makefile を修正したり、いくつかファンクションを書き足した RoboShell もリリースできた。

GCC 4.1.1

RoboShell 自体もある程度しっかりしてきたので、開発環境の整備に取り組み始めた。今までの開発環境のセッティングはお世辞にもわかりやすいとは言えなかった。

現在は最新のコンパイラ(GCC4.1.x)と組み込み用 Eclipse (Zylin) をきちんと組み合わせた環境を構築している。これにより、あのCygwin を入れることなく、開発環境を構築できるようになった。デバッガもさくさく動く。

 GCC4.0.x -> GCC4.1.x のインパクトはけっこうあると聞いていたが、さすがに RoboShell 程度のソフトだと何も書き換えずにビルドすることが出来た。

この環境設定について近日中にWEBを制作します。お楽しみに!!

2006年11月14日

RoboShellSystem

Board
Board

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

リベンジ(動きました)

前回、バグバグだったRoboShellだがなんとか動作を開始した。不具合のポイントは

 1.スタックの容量不足
 2.ディスパッチャのループの廻し方の不良

などであった。
リンカスクリプトなども修正して、動作を開始した。マルチタスクっぽい処理が堪能できるのはうれしい。もう少し、使い込んで精度と信頼性を上げていく。

2006年11月13日

かっこ悪い(ごめんなさい)

バージョンアップをした RoboShell をアップしたけど、けっこうバグバグ。今度からちゃんとテストしたやつを上げますので勘弁してください。
少し原因がわかったので修正します。

2006年11月11日

RoboShell バージョンアップ

暫くぶりにRoboShellをバージョンアップした。今度は PS2 のコントローラの対応だ。それに加えて、色々な方がRoboShellを使ってくれるようになったので、非常に心強い。今後も様々な機能を取り入れていこうと思う。

PS3ゲット

PS2と同様、発売日にゲットできた。元江戸っ子の特性だろうか?初物には目がないのだ。ただ、ゲットすることに労力はかけたくないので、予約したのだ。ただ、重い重すぎる。ショップの店員によると、7KGだそうだ。ソフトはRR7と暗めのFPS?レジスタンスを一緒に買ってきた。

目的はLinuxなんだけど、しばらく出そうにないね。これで開発環境を作るのが、目的なのだ!!

PlayStation Pad の読み込み6

手持ちのプレイステーション2のコントローラが4種類あるので、挙動を調べてみた。

 1.純正コントローラ(有線)
 2.ゲームテック(無線)
 3.サイバーガジェット(有線)
 4.MadCatz(無線)

2のゲームテックのコントローラは他のコントローラとビットの出方が違う。修正用のコードを付加することで、問題なく読めるようになった。ここでアイデアが沸いた。このコントローラの違いだが、コードで対応するか?パラメータで対応するかだ。コードと言うのはコントローラを決め打ちにしてコードを固定化するもの。パラメータとはどちらのコントローラでも使えるように、コーディングして実行時に選択する方式である。幸い、コード領域のバジェットは潤沢なので、パラメータ方式にしてみるか?

2006年11月10日

PlayStation Pad の読み込み5

ワイヤレスのコントローラも接続してみた。でも、挙動が純正品と違う?懸案事項であった振動機能も使えた。

RoboShellのコンソールから
1210 0001 でモータが振動し、
1210 0000 で振動が停止する。

海外から取り寄せたワイヤレスコントローラやその他手持ちのコントローラ(純正品を入れると4種類)で色々と試してみるつもりである。

2006年11月09日

今日の良い話-筆記具

リアルで手書きはIT全盛のご時世、あまりないんだけどそれでもボールペンなんかで字を書くことは普通だ。愛用しているボールペンは Airfitってやつだ。ボールペンのインクを全部、使い切る。なんて今までほとんどなかった。大体、使っているうちにどこかにいってしまう。このボールペンは例外的によく使われたと言うべきだろう。

で、こんな記事を見つけた。ボールペンの替え芯だけ買えるらしい。Airfit はゼブラだ。買おうかな?と思って、WEBに行ったけど、寸前で思いとどまった。

結構、ボールペンはいっぱいあるんだよね。ほとんどは展示会とかでノベルティーでもらったものだ。でも、残っているのはよく聞くメーカ製ばかりだ。こういうのはどんどん溜まっていくので、書き味テストを行ってたまにリストラするわけだ。で、残ったのが日本製の有名ブランドばかりだったわけだ。

とりあえず、生き残ったボールペンに仕事をさせてから一番安い替え芯を買おうと思う。

がんばれ日本!!

2006年11月08日

PlayStation Pad の読み込み4

読み込んだボタンのステータスからディスパッチするフレームワークを書き足してみた。ボタンの make/break で実行できるようになるわけだ。今はお約束のLEDの点灯を入れている。
ただ、実装がちょっとかっこ悪いので関数ポインタを使って、構造的に把握しやすいように改良する予定。そろそろ、ワイヤレスパッドの購入だな。

2006年11月07日

PlayStation Pad の読み込み3

とりあえず、Padの読み込みが出来るようになった。これで安価なPS2のコントローラをラジコンのコントローラ代わりに使えるようになる。当初はBTを実装しようと考えてもいたが、お手軽に出来るプラットフォームも必要だし、他のコントローラでも実装されているので採用してみた。ラジコンのプロポに比べて、プログラム次第で様々なギミックを入れることも出来る。バーチャファイターの様なボタン入力の組み合わせを一旦受けてから、デコードして各動作に結びつけるようなことも出来そう。楽しみ。

2006年11月03日

PlayStation Pad の読み込み2

チョボチョボ、プログラムを書き足している。解析された先達と同じようなタイミング波形が生成出来るようになったので、とりあえず問題無さそう。1ビットデータの読み込みも出来るようになった。テスト用のフレームワークを作成して、正しく読み取れているかどうかを確認するためのプログラムを作成する予定。来週辺りにはパッド側からのデータの読み込みはできるようになっているかな?