秋月3664基板でDS2無線コントローラを製作する

製作、コマンド説明   基本説明編に戻る


使用する部材

ロジクール製コードレスコントローラ    評価記事 1 2 3
ロジクールオンラインストア 定価 4580円

秋月3664基板 定価 1680円

3.3Vレギュレータ 100円ぐらい

その他配線材料など


接続

まずは秋月3664基板と無線コントローラ受信部をこのように配線してください。

ACKは今のところ読んでいませんのでプルアップのみでOK。

3.3V生成のレギュレータLM317EMPは手持ちの関係でこうなっただけで
他の固定型レギュレータで充分です(コンデンサ関係は適当に入れて置いて下さい)

尚7.6Vには何も繋げていませんが、純正コントローラなどでバイブレーション動作させる
場合は7.6Vを生成して繋げておいて下さい。


電源について

デュアルショックの電源は3.6V、7.6Vの2系統あります、このうち7.6Vは振動モータ用の電源なので無視できますが
問題なのは3.6Vのほうです。(内部のロジックは3.3Vでケーブルなどの損失を考え3.6Vとなっている)

当初純正のコントローラで実験をしていましたが、その時は5Vでこれといった問題もなく動作させていました
しかし無線コントローラの場合はだめです、やはりPS2と同じように3.6Vが必要となります。

「あーあ3664と繋げるには間にレベル変換用ICを使わなければだめか」と思いましたが
3664のハードマニュアルを読んでいて見つけました

「18、電源回路」
「18.1 内部電源降圧回路を使用する場合」

え!なにこれ!

読んでみると、他のTINYも含め内部のCPU本体は3.0〜3.6Vで動作しているようです
なら 電源降圧回路をパスすれば電源は3.0〜3.6Vで動作させることができます。

具体的に秋月3664でどうすればいいのかと言うと

1、基板ジャンパJP1のパターン部をカット
2、基板裏面にあるコンデンサ、C7 0.1uF取り外す
3、CN1-11(VCL)をCN1-23(VCC)に接続する
4、外部レギュレータで3.3Vを生成
5、生成した3.3VをCN1-23(VCC)に接続

秋月基板裏側、白い丸印部分のC7を取り外す。

これで秋月3664が3.3V仕様となります

なるほど、だから232Cドライバが3.3V対応のADM3202になっているのですね。


ソフトウェア書き込み(全てバイナリファイルです、ソースが欲しい方はメールで)

(右クリック→対象をファイルに保存、でダウンロードして下さい)

ベストテクノロジー製のGCC Debelopper light付属のフラッシュライタを使用する場合

PSIF.mot (モトローラSフォーマット)

イエローソフト製 Yeloow IDE 付属のフラッシュライタを使用する場合

PSIF.S (モトローラSフォーマット)

他のフラッシュライタを使用する場合

PSIF.HEX (インテルHEXフォーマット)

上記のいずれかをダウンロードし書き込んでください。

2005/02/04 エコーバックOFF 57600bps→38400bpsに変更版

PSIF.mot (モトローラSフォーマット)

PSIF.S (モトローラSフォーマット)

PSIF.HEX (インテルHEXフォーマット)


ハイパーターミナルの設定

今回のこの基板との接続は非同期シリアル(57600bps)(38400bps)です

(2005/02/04 ボーレート変更)

PCのハイパーターミナルなどの通信ソフトで動作確認が行え簡易的な

モニタを実装致しましたので、まずはハイパーターミナルを立ち上げます

プログラム→アクセサリ→通信→ハイパーターミナル

ファイル→プロパティで

モデムの構成をクリックします

ビット/秒を57600 38400に変更します。

(2005/02/04 ボーレート変更)

電話のマークを押して接続します(絵の状態は切れている状態)

絵の状態は接続されています


コマンド解説

ハイパーターミナルと接続されている状態で基板のリセットスイッチを押すと

と表示されていれば接続が完了している状態です、
これ以降は以下のコマンドが実行可能です。


デバッグ用(PC接続用コマンド)

ds1 xxxxx y (デュアルショック仕様)

これは以前のモデルの仕様であり、ds1 500 1とタイプしエンターすると(ds1と500、500と1の間はスペース)   
コントローラのMODEランプが消灯している状態ではボタンのデジタルデータが,   
MODEボタンを押して赤く点灯している状態ではデジタルデータ+スティック4軸   
のアナログ量が500回取り込めます。     
500のあとに続く1はモータの振動ON、OFFであり0でOFF、1でONが指定可能ですが
このモードの場合はアナログ的には振動制御できません。

尚 デジタルモードの時はモータは動きません。 モータの振動コマンドは省略可能です。 例 ds1 500 エンター

例えば上記のコマンドを実行すると・・・
デジタルモード(モードランプ消灯)の場合

DualShock1 read と表示され改行後
6F EF FF FF FF FF と表示されています

デジタルモードの場合最初の2つだけ(6F EF)が有効なデータであり
各ボタンのON、OFF(押して0)が16ビットで表現されています。
ボタンとビットとの割り当ては関連リンクの各文書をお読みください。

モードボタンを押しモードランプが点灯している状態では

後ろの4バイトが有効となり、前2バイトで各ボタンのON,OFF状態
残り4バイトで 2本のジョイスティックのアナログ量が表示されます。

この場合はアナログモードになっていますので振動もONされます。

動画 

ds2 xxxxx yyy z (デュアルショック2仕様)

ds2 500 255 1 とタイプしエンターすると 16軸分のアナログ量+デジタルデータを500回取り込みます。
500のあとに続く255は大モータの振動レベルであり0〜255までが指定可能です
さらに255のあとに続く1は小モータのON、OFFであり1でON,0でOFFになります
尚モータの振動コマンドは省略可能です。 例 ds2 500 エンター

例えば上記のコマンドを実行すると・・・

DualShock2_read と表示され、前から2バイト(FF E1)が各ボタンのON,OFF,次の4バイトでジョイスティック2本の
アナログデータ、残りの12バイトが各ボタンの押下げ量のアナログデータとなります。

もちろん大モータは振動が8ビットで制御でき小モータはON、OFFのみの制御が可能です。

動画

hart (バイブレーションサンプル)

今回の実験で結構面白かったのがバイブレーション機能です、うまく使えば色々使えそうです。

例えば2足歩行ロボットの足裏センサと組合せて歩行に合わせ振動させるなどどうでしょう?

動画


マイコン接続用

以下のコマンドは上位接続がマイコンを想定し
インターバルタイマなどで周期的にコマンドを発行してデータを取り込みます。

d1  

デジタルモードで各ボタンのON,OFF状態を1回取り込み、返す文字列には#D1が先頭に付きます
マイコンからこの文字列を送る場合は必ずこのあとに改行コード( '\n'か0x0d) を入れて下さい

例 puts("d1\n");

この例では 7F 67が有効な読み取りデータです。

a1 xxx y 

アナログモードで1回取り込み、 返す文字列には#A1が先頭に付きます。
マイコンからこの文字列を送る場合は必ずこのあとに改行コード( '\n'か0x0d)を入れて下さい

例 puts("a1 255 1\n");

xxx は大モータ制御(0〜255) y は小モータON(1)OFF(0). 大、小共に省略可能 例 puts("a1\n");
ボタン押下げのアナログは取り込まない。

この例では、FD F5が各ボタンのON、OFF。72 6C E3 4Fがジョイスティック2本のアナログ量。

ds xxx y

デュアルショック2ネイティブモードで1回取り込み、 返す文字列には#DSが先頭に付きます。
マイコンからこの文字列を送る場合は必ずこのあとに改行コード( '\n'か0x0d) を入れて下さい

例 puts("ds 255 1\n");

xxx は大モータ制御(0〜255) y は小モータON(1)OFF(0). 大、小共に省略可能 例 puts("ds\n)
ボタン押下げのアナログ量も取り込みます。

この例では、FF B6が各ボタンのON、OFF。85 00 E9 00がジョイスティック2本のアナログ量。
以下各ボタンの 押下げ量アナログデータとなります。


現在実装されているコマンドは以上です、一般的な使い方としては

マイコンと接続しインターバルタイマなどで周期的に読み込み

バイブレーションさせたい時だけオプションを付けて送ってやれば

読み込みながらバイブも制御できることになります。

 


いかがでしょうか、ラジコンプロポより値段が安くコンパクト!
なにしろアナログで16軸もとれます、使い方は色々あるのではないでしょうか?

ぜひレポートをお待ちしております。

2005/01/25 NONSAYA ROBOT WORKS


2005/02/04 変更

1、マイコン接続の時取り込みやすいようにエコーバックを中止

マイコン接続時にエコーバックが帰ってくると、なにかと大変なので

思い切ってエコーバックを中止にしました(BSまで制御していたのですが)

手入力時にわかりずらい場合は、このようにハイパーターミナルを設定して下さい。

ハイパーターミナルを立ち上げ後一度切断し、ファイル→プロパティを開く

設定タブをクリックしASCII設定(A)をクリック

ローカルエコーするをクリック、OK→OK

以上の設定でローカルエコーバックできます。

2、ボーレートを38400bpsに変更

秋月3664_16Mhzでは57600bpsにすると誤差が大きいことに今頃気づく(^_^;)