Twitterでつぶやいたことをまとめておかなければ…ということで。
まずはWiiリモコンでファミコンを遊んでいる動画を…
WiiリモコンをBluetoothでファミコンと接続している記事を見てこれは!!と早速作成してみました。
元ネタはこちらです → 興味driven
※2015.04.29 回路図修正
※アタリ仕様のレトロPCに接続するときはダイオード(1N4148等)をボタン出力に追加してください。 
ランニングエレクトロニクスさんが公開されている、SBDBT用のWiiリモコン通信ファームウェアをPIC24FJ64GB002用に改変して利用しています。応用しやすいようにボタン出力はON/OFFの信号のみ。
対応ボタン数が増えると PIC24FJ64GB002 では出力ピンが足りなくなりますがレトロ系は大丈夫かと…
※パラシリ変換用にファミコンであれば 4021 とかが別途必要です。
とりあえずはPC-6001やファミコンといったレトロゲーム&レトロPC系はすべて対応可能だと思います。 Bluetoothのドングルは バッファローの BSHSBD04BK を使用しています(一番安定している感じなので)

クラシックコントローラーもOK

アナログスティックもI/O出力OK(但しON/OFF信号のみ)
レトロPC用【アタリ仕様】の試作品:セガ系のゲーム機も対応【メガドラ除く】

PS2のコントローラ変換アダプタでも問題なし
PICの書き込みは PICerFT を自作して使用してます。市販品でももちろん問題なしです。
PICerFT

※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;}
—–ここまで
コメント