2017 02123456789101112131415161718192021222324252627282930312017 03












Wiiリモコンで〇〇を遊ぼう 

Twitterでつぶやいたことをまとめておかなければ…ということで。
まずはWiiリモコンでファミコンを遊んでいる動画を…




WiiリモコンをBluetoothでファミコンと接続している記事を見てこれは!!と早速作成してみました。
元ネタはこちらです →
興味driven

※2015.04.29 回路図修正
Wii_Famicom_03.png  

※アタリ仕様のレトロPCに接続するときはダイオード(1N4148等)をボタン出力に追加してください。
Wii_Famicom_05.png 

ランニングエレクトロニクスさんが公開されている、SBDBT用のWiiリモコン通信ファームウェアをPIC24FJ64GB002用に改変して利用しています。応用しやすいようにボタン出力はON/OFFの信号のみ。
対応ボタン数が増えると PIC24FJ64GB002 では出力ピンが足りなくなりますがレトロ系は大丈夫かと…
※パラシリ変換用にファミコンであれば 4021 とかが別途必要です。

とりあえずはPC-6001やファミコンといったレトロゲーム&レトロPC系はすべて対応可能だと思います。
Bluetoothのドングルは バッファローの BSHSBD04BK を使用しています(一番安定している感じなので)
Wii_FC_07.jpg    Wii_FC_02.jpg    Wii_FC_03.jpg    Wii_FC_04.jpg     Wii_FC_15.jpg 
クラシックコントローラーもOK
Wii_FC_06.jpg アナログスティックもI/O出力OK(但しON/OFF信号のみ)
レトロPC用【アタリ仕様】の試作品:セガ系のゲーム機も対応【メガドラ除く】
Wii_FC_11.jpg    Wii_FC_09.jpg    Wii_FC_10.jpg    Wii_FC_12.jpg     Wii_FC_14.jpg 

Wii_FC_13.jpg PS2のコントローラ変換アダプタでも問題なし

PICの書き込みは PICerFT を自作して使用してます。市販品でももちろん問題なしです。
PICerFT
PICerFT.jpg 

※2015.03.24追記
ライセンス関係もあるのでHEXやソースの公開は出来ないので…
自分でハード作成、PIC書込、ビルド出来る環境がある方向けにソースの変更箇所だけ【続きを読む】に書いておきます。


ランニングエレクトロニクスさんが公開されている、SBDBT用のWiiリモコン通信ファームウェアをダウンロードしてください
SBDBT Wiiリモコン通信ファームウェアソースの変更箇所は
main.c の
56行と75行にある PIC24FJ64GB004 を PIC24FJ64GB002 に変更
global.h の
38行 #define SERIAL_TRANSFER の 2 を 0 に変更
64行 #define LOCAL_NAME の "SBDBT" を "PIC24F" に変更
87行 #if BOARD_SBXBT ~287行 #endif までを削除かコメントアウトする
PIC24FJ64GB002用に変更した以下の記述をコピペする
MPLAB IDE v8.92 で Deviceを PIC24FJ64GB004 から PIC24FJ64GB002 へ変更
とりあえずこの変更でWiiリモコンがちゃんと動作するはずです
ビルドしてエラーが出なかったら、出来上がったHEXをPICに書き込んで動作チェック
※この書き換えは Wiiリモコン のみの対応になります


-----ここから
// Configure LED1 - PIC24FJ64GB002 25pin (RB14)
// 動作確認用LED1 付けなくても可
#define led1_setup()            //(TRISBbits.TRISB14=0)
#define led1_on()               //(LATBbits.LATB14=0)     //ON
#define led1_off()              //(LATBbits.LATB14=1)     //OFF
// Configure LED2 - PIC24FJ64GB002 26pin (RB15)
// 動作確認用LED2 付けなくても可
#define led2_setup()            //(TRISBbits.TRISB15=0)
#define led2_on()               //(LATBbits.LATB15=0)     //ON
#define led2_off()              //(LATBbits.LATB15=1)     //OFF
// I/Oで出力 Wiiリモコン横持ち [SERIAL_TRANSFER = 0] 
// Configure 上 OUT - PIC24FJ64GB002 3pin (RA1)
#define right_out_setup() (TRISAbits.TRISA1=0)
#define right_out_write(x) (LATAbits.LATA1=((x)?0:1))
// Configure 下 OUT - PIC24FJ64GB002 2pin (RA0)
#define left_out_setup() (TRISAbits.TRISA0=0)
#define left_out_write(x) (LATAbits.LATA0=((x)?0:1))
// Configure 左 OUT - PIC24FJ64GB002 7pin (RB3)
#define up_out_setup() (TRISBbits.TRISB3=0)
#define up_out_write(x) (LATBbits.LATB3=((x)?0:1))
// Configure 右 OUT - PIC24FJ64GB002 6pin (RB2)
#define down_out_setup() (TRISBbits.TRISB2=0)
#define down_out_write(x) (LATBbits.LATB2=((x)?0:1))
// Configure 1ボタン OUT - PIC24FJ64GB002 16pin (RB7)
// ファミコンの場合 Bボタン
#define but_1_out_setup() (TRISBbits.TRISB7=0)
#define but_1_out_write(x) (LATBbits.LATB7=((x)?0:1))
// Configure 2ボタン OUT - PIC24FJ64GB002 14pin (RB5)
// ファミコンの場合 Aボタン
#define but_2_out_setup() (TRISBbits.TRISB5=0)
#define but_2_out_write(x) (LATBbits.LATB5=((x)?0:1))
// Configure Aボタン OUT - PIC24FJ64GB002 24pin (RB13)
//
#define but_a_out_setup() //(TRISBbits.TRISB13=0)
#define but_a_out_write(x) //(LATBbits.LATB13=((x)?0:1))
// Configure Bボタン OUT - PIC24FJ64GB002 25pin (RB14)
//
#define but_b_out_setup() //(TRISBbits.TRISB14=0)
#define but_b_out_write(x) //(LATBbits.LATB14=((x)?0:1))
// Configure HOMEボタン OUT - PIC24FJ64GB002 26pin (RB15)
//
#define but_home_out_setup() //(TRISBbits.TRISB15=0)
#define but_home_out_write(x) //(LATBbits.LATB15=((x)?0:1))
// Configure +ボタン OUT - PIC24FJ64GB002 17pin (RB8)
// ファミコンの場合 SELECTボタン
#define but_plus_out_setup() (TRISBbits.TRISB8=0)
#define but_plus_out_write(x) (LATBbits.LATB8=((x)?0:1))
// Configure -ボタン OUT - PIC24FJ64GB002 18pin (RB9)
// ファミコンの場合 STARTボタン
#define but_minus_out_setup() (TRISBbits.TRISB9=0)
#define but_minus_out_write(x) (LATBbits.LATB9=((x)?0:1))
#if __DEBUG
// Configure U2TX(出力)- pin 26 (RP15) DEBUG用
#define u2tx_setup() (RPOR7bits.RP15R = 5)
// Configure U2RX(入力) - pin 25 (RP14) DEBUG用
#define u2rx_setup() (RPINR19bits.U2RXR = 14)
#define sto_setup()
#define sto_l()
#define sto_h()
#else
#define u2tx_setup()
// Configure RSSI(status) OUT - put on pin 37 (RC4)
#define sto_setup() //(TRISCbits.TRISC4=0)
#define sto_l() //(LATCbits.LATC4=0)
#define sto_h() //(LATCbits.LATC4=1)
#endif
// Configure Association OUT - put on pin 20 (RA1)
#define assoc_setup() //(TRISAbits.TRISA1=0)
#define assoc_l() //(LATAbits.LATA1=0)
#define assoc_h() //(LATAbits.LATA1=1)
// Configure ON OUT - put on pin 44 (RB8)
#define on_setup() //{TRISBbits.TRISB8=0; LATBbits.LATB8=1;}
-----ここまで
関連記事
ACR WEB ブログランキング参加してます

コメントの投稿














管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://bakutendo.blog87.fc2.com/tb.php/286-43649ed3