スーパーファミコン コントローラ 接続アダプタ(販売終了)

  • スーパーファミコン コントローラ 接続アダプタ

 
  • 任天堂スーパーファミコンのコントローラを使って、赤外線学習リモコンを操作できます。

  • 任天堂スーパーファミコンのコントローラを接続アダプタにつなぐと、赤外線学習リモコンの外部スイッチとして使用できます。
    コントローラのボタン(下図)が、学習リモコンの送信ボタン(1~10)に対応しています。
  • ボタン対応図

  • ※接続アダプタを使用するには、ACアダプタが必要です。
 
  • 接続アダプタのソースコード

  • ソースコード >>
    #include <18f14k50.h>
    
    #fuses INTRC_IO, NOWDT, PROTECT, PUT, BROWNOUT, BORV27
    #fuses NOLVP, MCLR, NOIESO, NOFCMEN, NOPLLEN, CPUDIV1
    
    //INTRC_IO:内部クロックを使用する ピンはIOで使用可能
    //NOWDT:ウォッチドッグ・タイマーを使用しない
    //PROTECT:コード・プロテクトする
    //PUT:パワーアップ・タイマーを使用する
    //BROWNOUT:ブラウンアウト・リセットを使用する
    //BORV27:2.7Vでブラウンアウト・リセット
    //NOLVP:低電圧(5V)プログラミングを使用しない
    //MCLR:MCLRピンを有効にする
    //NOIESO:クロックの内部外部切替を無効にする
    //NOFCMEN:クロックの監視を無効にする
    //NOPLLEN:4X HW PLLを無効にする
    //CPUDIV1:クロック分周比1/1
    
    //内部クロック8MHz(CPUDIV1)
    #use delay(clock=8000000)
    
    //USBモジュール無効
    #byte UCON = 0xF64
    #bit USBEN = UCON.3  //USBEN = 0
    
    //USBプルアップ無効
    #byte UCFG = 0xF61
    #bit UPUEN = UCFG.4  //UPUEN = 0
    
    //フォトカプラ(出力)
    #define SW1  PIN_B7
    #define SW2  PIN_C7
    #define SW3  PIN_C6
    #define SW4  PIN_C3
    #define SW5  PIN_C4
    #define SW6  PIN_C1
    #define SW7  PIN_C5
    #define SW8  PIN_C0
    #define SW9  PIN_A4
    #define SW10 PIN_A5
    
    //SFC
    #define PS   PIN_B5    //出力(正論理)
    #define CLK  PIN_B6    //出力(正論理)
    #define DAT1 PIN_B4    //入力(負論理)
    
    //SFC DAT1 ON:0V OFF:5V
    #define DAT1_ON   0
    #define DAT1_OFF  1
    
    void init(void);
    int get_data(void);
    
    /*********************************
    *  初期化関数
    *********************************/
    void init(void)
    {
      setup_oscillator(OSC_8MHZ);       //内部クロックを8MHzにする
      setup_adc_ports(NO_ANALOGS);      //全ピンをデジタルIOモードにする
      setup_comparator(nc_nc_nc);       //コンパレータは動作しない
    
      //USBを使わない
      USBEN = 0;
      UPUEN = 0;
    
      //フォトカプラ OFF
      output_high(SW1);
      output_high(SW2);
      output_high(SW3);
      output_high(SW4);
      output_high(SW5);
      output_high(SW6);
      output_high(SW7);
      output_high(SW8);
      output_high(SW9);
      output_high(SW10);
    
    }
    
    /*********************************
    *  メイン
    *********************************/
    void main(void)
    {
      long sfc_clk[11];
      int data, lastdata;
    
      init();
    
      sfc_clk[0]  = 0;
      sfc_clk[1]  = SW10; // Bボタン
      sfc_clk[2]  = SW5;  // Yボタン
      sfc_clk[3]  = SW3;  // SELECTボタン
      sfc_clk[4]  = SW8;  // STARTボタン
      sfc_clk[5]  = SW1;  // 上ボタン
      sfc_clk[6]  = SW2;  // 下ボタン
      sfc_clk[7]  = SW6;  // 左ボタン
      sfc_clk[8]  = SW7;  // 右ボタン
      sfc_clk[9]  = SW9;  // Aボタン
      sfc_clk[10] = SW4;  // Xボタン
    
      data = 0;
      lastdata = 0;
    
      while (1) {
    
        data = get_data();
    
        if (data != lastdata) {
    
          if (data != 0) {
            output_low(sfc_clk[data]);
            delay_ms(50);
            output_high(sfc_clk[data]);
            delay_ms(50);
          }
    
          lastdata = data;
        }
      }
    }
    
    /*********************************
    *  ボタンのデータを取得
    *********************************/
    int get_data(void)
    {
      int data;
      int i;
    
      //初期化
      data = 0;
    
      //読み込み開始
      for (i = 0; i < 16; i++) {
    
        //BボタンのみPSをONにする
        if (i == 0) {
          output_high(PS);
        } else {
          delay_cycles(3);
        }
    
        //CLKをONにする
        output_high(CLK);
        delay_cycles(12);
    
        //BボタンのみPSをOFFにする
        if (i == 0) {
          output_low(PS);
        } else {
          delay_cycles(3);
        }
    
        //CLKをOFFにする
        output_low(CLK);
    
        //押されたボタンを判定する
        if (input(DAT1) == DAT1_ON) {
          data = i + 1;
        }
    
      }
    
      if (data > 10) {
        data = 0;
      }
    
      return data;
    }
    
  •