BAKUTEN工房 では『家電のケンちゃん』で 委託販売 を行っています

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;}
—–ここまで

コメント

タイトルとURLをコピーしました