秋月リモコン学習キット用 機能アップファームウェア

概要

  1. 秋月電子通商PIC マイコン赤外線リモコン学習キット を製作して使ってみると、機能が貧弱でした。

  2. そこでハードウェアはそのままで、機能アップしたファームウェアを作成しました。

  3. [機能アップファームェア] と [秋月オリジナルファームウェア] の比較は以下です。

    No. 項目 機能アップ
    ファームウェア
    秋月オリジナル
    ファームウェア
    説明
    1 対応フォーマット 機能アップ版は SONY と三菱フォーマットをサポート。
    NEC/AEHA/SONY/MB でほとんどのリモコンに対応できる。
    AEHA とは家電協フォーマットのこと。
    MB とは三菱電機フォーマットのこと。
    NEC
    AEHA (48bit)
    SONY 12bit
    SONY 15bit
    SONY 20bit
    MB type 1
    MB type 2
    MB type 3
    NEC
    AEHA (48bit)
    2 受信した
    リモコンコード表示
    秋月オリジナル版は正しい表示になっていない。
    サポートしているフォーマットも2つだけ。
    正しいコードを
    表示する
    MSB と LSB が逆転
    データとアドレスが
    非分離
    3 任意のリモコンコード
    作成&送信
    × 作成したコードを学習リモコンに記憶して実用的に使える。
    機器の隠しコマンドを見つけることができる。
    あり なし
    4 学習リモコン機能 4個はいくらなんでも少なすぎる
    16個すべてのキーに
    学習可能
    4個のキーのみ
    学習可能
    5 キーのチャタリング対策 × プログラムでチャタリングを吸収している
    チャタリングしにくい チャタリングしやすい
    6 記述言語 アセンブラのほうが細かく正確にタイミング作成可能
    アセンブラ C



機能アップ PIC16F886 チップの領布について

  1. プログラム書き込み済み PIC16F886 チップの領布をします

  2. ファームウェアの変更履歴



ハードウェア

  1. ハードウェアは 秋月電子通商PIC マイコン赤外線リモコン学習キット をそのまま使います。

  2. PIC16F886 チップの交換が必要



設計ノート ・・・ IR 受信時の各種フォーマット判別方法概略

  1. まずは、リーダーコードで判別

    No. 測定結果 閾値計算 判別結果 備考
    1 5.620ms 以上 562us×10T
    425us×6T
    600us×2T
    300us×0.66T
    NEC 他のフォーマットの可能性もあるので、更に 2 で細分判別する
    2 2.550〜5.620ms AEHA 他のフォーマットの可能性もあるので、更に 3 で細分判別する
    3 1.200〜2.550ms SONY 【判別完了】 SONY フォーマット
    4 0.200〜1.200ms MB T1 【判別完了】 MB T1 フォーマット
    MB T1 フォーマットにはリーダーコードが無いので、ここでの時間測定は
    一番最初のデータビットのマーク時間である
    5 0.200ms 以下 --- ノイズでしょう

  2. [1で NEC と判別] 後の詳細判別

    No. 判別トリガ 判別結果 備考
    1 最初の 1byte を読んだ次に 2byte 目のデータが来た NEC 【判別完了】 NEC フォーマット
    2 最初の 1byte を読んだ次にストップコードが来た MB T2 【判別完了】 MB T2 フォーマット

  3. [1で AEHA と判別] 後の詳細判別

    No. 測定結果 閾値計算 判別結果 備考
    1 3.948ms 以上 (425us+562uS)×8T÷2
    425us×6T
    OTHER T1 【判別完了】 OTHER T1 フォーマット
    2 2.550〜3.948ms --- 更に 4 で細分判別する
    3 2.550ms 以下 AEHA 【判別完了】 AEHA フォーマット

  4. [3で No.2 と判別] 後の詳細判別

    No. 測定結果 閾値計算 判別結果 備考
    1 0.660ms 以上 (425us+900us)×1T÷2 MB T3 【判別完了】 MB T3 フォーマット
    2 0.660ms 以下 AEHA AEHA のリピートコードだった



各種リモコンフォーマットと本機での表示

  1. NEC フォーマット (32bit)

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * C00〜C15 がカスタマコード、D00〜D07 がデータ、/D00〜/D07 がデータの反転データです。
    * バイトの区切りは || のところです。
      C  C  C  C  C  C  C  C   C  C  C  C  C  C  C  C   D  D  D  D  D  D  D  D  /D /D /D /D /D /D /D /D
     00 01 02 03 04 05 06 07  10 11 12 13 14 15 16 17  00 01 02 03 04 05 06 07  00 01 02 03 04 05 06 07
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    

    本機での表示

      C  C  C  C  C  C  C  C   C  C  C  C  C  C  C  C   D  D  D  D  D  D  D  D  /D /D /D /D /D /D /D /D
     07 06 05 04 03 02 01 00  17 16 15 14 13 12 11 10  07 06 05 04 03 02 01 00  07 06 05 04 03 02 01 00
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  2. AEHA フォーマット (48bit)

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * C00〜C15 がカスタマコード、P00〜P03 がパリティ、D00〜D37 がデータです。
    * バイトの区切りは || のところです。
      C  C  C  C  C  C  C  C   C  C  C  C  C  C  C  C   P  P  P  P  D  D  D  D   D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D
     00 01 02 03 04 05 06 07  10 11 12 13 14 15 16 17  00 01 02 03 00 01 02 03  10 11 12 13 14 15 16 17  20 21 22 23 24 25 26 27  30 31 32 33 34 35 36 37
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    

    本機での表示

    * シャープのテレビリモコンでは、C07〜D10 は固定データ、D27〜D20 に動作コード、D37〜D30 に何らかのチェックコードが入るようです。
      C  C  C  C  C  C  C  C   C  C  C  C  C  C  C  C   D  D  D  D  P  P  P  P   D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D
     07 06 05 04 03 02 01 00  17 16 15 14 13 12 11 10  03 02 01 00 03 02 01 00  17 16 15 14 13 12 11 10  27 26 25 24 23 22 21 20  37 36 35 34 33 32 31 30
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  3. SONY 12bit フォーマット

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * D00〜D06 がデータ、A00〜A04 がアドレスです。
    * バイトの区切りは || のところです。
      D  D  D  D  D  D  D  A   A  A  A  A
     00 01 02 03 04 05 06 00  01 02 03 04
    |--|--|--|--|--|--|--|--||--|--|--|--|
    

    本機での表示

    * ** の部分には 0 が入ります。
         D  D  D  D  D  D  D            A  A  A  A  A
     ** 06 05 04 03 02 01 00  ** ** ** 04 03 02 01 00
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  4. SONY 15bit フォーマット

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * D00〜D06 がデータ、A00〜A07 がアドレスです。
    * バイトの区切りは || のところです。
      D  D  D  D  D  D  D  A   A  A  A  A
     00 01 02 03 04 05 06 00  01 02 03 04
    |--|--|--|--|--|--|--|--||--|--|--|--|
    

    本機での表示

    * ** の部分には 0 が入ります。
         D  D  D  D  D  D  D            A  A  A  A  A
     ** 06 05 04 03 02 01 00  ** ** ** 04 03 02 01 00
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  5. SONY 20bit フォーマット

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * D00〜D06 がデータ、A00〜A12 がアドレスです。
    * バイトの区切りは || のところです。
      D  D  D  D  D  D  D  A   A  A  A  A  A  A  A  A   A  A  A  A
     00 01 02 03 04 05 06 00  01 02 03 04 05 06 07 08  09 10 11 12
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|
    

    本機での表示

    * ** の部分には 0 が入ります。
         D  D  D  D  D  D  D            A  A  A  A  A   A  A  A  A  A  A  A  A
     ** 06 05 04 03 02 01 00  ** ** ** 12 11 10 09 08  07 06 05 04 03 02 01 00
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  6. MB type 1 / type 2 フォーマット (16bit) ・・・ MB とは三菱電機のことです

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * バイトの区切りは || のところです。
    * type 1 / type 2 の違いは通信プロトコルだけです。
      D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D
     00 01 02 03 04 05 06 07  10 11 12 13 14 15 16 17
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    

    本機での表示

      D  D  D  D  D  D  D  D   D  D  D  D  D  D  D  D
     07 06 05 04 03 02 01 00  17 16 15 14 13 12 11 10
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    


  7. MB type 3 フォーマット (24bit) ・・・ MB とは三菱電機のことです

    リモコンから送信されるコード

    * 左のビットから順番に 1bit ずつ送信されます。
    * バイトの区切りは || のところです。
    * /D00〜/D23 は D00〜D23 の反転データです。
      D  D  D  D /D /D /D /D   D  D  D  D /D /D /D /D   D  D  D  D /D /D /D /D
     00 01 02 03 10 11 12 13  10 11 12 13 20 21 22 23  20 21 22 23 00 01 02 03
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    

    本機での表示

     /D /D /D /D  D  D  D  D  /D /D /D /D  D  D  D  D  /D /D /D /D  D  D  D  D
     13 12 11 10 03 02 01 00  23 22 21 20 13 12 11 10  03 02 01 00 23 22 21 20
    |--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--||--|--|--|--|--|--|--|--|
    




ディップスイッチとキーボード

  1. ディップスイッチ

  2. キーボード



電源 ON 直後の表示



アナライズモード

  1. 概要

  2. 操作

    1. 最初に出る表示

      No. 操作説明
      -
      ディップスイッチ S1 の1番を OFF にして電源 ON すると以下の表示が出ます。
      2行目の表示は [F1]〜[F4] キーに対応しています。
      +------------------+
      | Analyze mode     |
      | Recv Make -- --  |
      +------------------+

      * [F1] キーを押すと 2 にジャンプします。
      * [F2] キーを押すと 3 にジャンプします。


    2. リモコン受信してコードを表示

      No. 操作説明
      1
      最初、以下のように表示します。
      +------------------+
      | Receive Code     |
      | >Please send IR  |
      +------------------+

      * [S12] キー (戻る) を押すと 1 に戻ります。

      2
      基板に向けて解析したいリモコンから発信すると、以下のようにリモコンコードを表示します。
      (この例は SONY 20ビットフォーマットのリモコンコードを表示しています。)
      * 1行目にはフォーマット種別を表示します。
      * 2行目にはコードを16進数で表示します。
      +------------------+
      | SONY 20          |
      | 77017A           |
      +------------------+

      * 受信解析できるリモコンコードは [NEC] [AEHA 48bit] [SONY 12bit] [SONY 15bit] [SONY 20bit] [MB type 1] [MB type 2] です。
      * 解析できないリモコンコードを受信した時は以下の表示になります。
      +------------------+
      | UNKNOWN          |
      |                  |
      +------------------+

      * [S12] キー (戻る) を押すと 1 に戻ります。

      3
      新たなリモコンコードを受信すると No.2 を繰り返します。


    3. リモコンコード作成&送信

      No. 操作説明
      -
      任意のリモコンコードを作成して、それを送信できます。以下の表示になります。
      2行目の表示は [F1]〜[F4] キーに対応しています。
      +------------------+
      | Make & Send code |
      | NEC AEHA SONY MB |
      +------------------+

      * [F1] キーを押すと 4 にジャンプします。
      * [F2] キーを押すと 5 にジャンプします。
      * [F3] キーを押すと 6 にジャンプします。
      * [F4] キーを押すと 7 にジャンプします。
      * [S12] キー (戻る) を押すと 1 に戻ります。


    4. NEC コードの作成とそのコードを送信

      No. 操作説明
      -
      NEC を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | NEC making...    |
      | 000000FF         |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと 3 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。
      * 最後の1バイトにカーソルは移動可能ですが、インクリメント/デクリメントは無効です。
      * 最後の1バイトにはその前の1バイトの反転データが自動的に計算されて入ります。


    5. AEHA コードの作成とそのコードを送信

      No. 操作説明
      -
      AEHA を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | AEHA making...   |
      | 000000000000     |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと 3 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。
      * 6文字目にカーソルは移動可能ですが、インクリメント/デクリメントは無効です。
      * 6文字目には最初の2バイトを4ビットごとに Exclusive OR したデータが自動的に計算されて入ります。


    6. SONY コードの作成とそのコードを送信

      No. 操作説明
      1
      SONY を選択すると、以下の表示になります。2行目の表示は [F1]〜[F4] キーに対応しています。
      +------------------+
      | SONY code length |
      |  12  15  20  --  |
      +------------------+

      * SONY リモコンコードには 12 / 15 / 20bit の3つのコード長があり、[F1]〜[F3] キーで選択します。
      * 選択後は No.2 にジャンプします。
      * [S12] キー (戻る) を押すと 3 に戻ります。

      2
      SONY 12 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | SONY 12 making.. |
      | 0000             |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと No.1 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。
      * SONY 12bit フォーマットでは最初の1バイトがデータコードで 7bit データです。
      * 次の1バイトがアドレスコードで 5bit データです。
      * 上の2つの制限により編集できないビットがあり、その部分へのインクリメント/デクリメントは無視します。


      SONY 15 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | SONY 15 making.. |
      | 0000             |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと No.1 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。
      * SONY 15bit フォーマットでは最初の1バイトがデータコードで 7bit データです。
      * 次の1バイトがアドレスコードで 8bit データです。
      * 上の2つの制限により編集できないビットがあり、その部分へのインクリメント/デクリメントは無視します。


      SONY 20 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | SONY 20 making.. |
      | 000000           |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと No.1 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。
      * SONY 20bit フォーマットでは最初の1バイトがデータコードで 7bit データです。
      * 次から2バイトがアドレスコードで 13bit データです。
      * 上の2つの制限により編集できないビットがあり、その部分へのインクリメント/デクリメントは無視します。


    7. MB コードの作成とそのコードを送信

      No. 操作説明
      1
      MB を選択すると、以下の表示になります。2行目の表示は [F1]〜[F4] キーに対応しています。
      +------------------+
      | MB type          |
      |  T1  T2  T3  --  |
      +------------------+

      * MB リモコンコードには type 1 / 2 / 3 の3つの送信プロトコルがあり、[F1]〜[F3] キーで選択します。
      * [S12] キー (戻る) を押すと 3 に戻ります。
      * 選択後は No.2 にジャンプします。

      2
      MB T1 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | MB T1 making...  |
      | 0000             |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと No.1 に戻ります。
      * 左から2文字ずつに区切ってバイトデータとして処理します。
      * バイトデータの下位にカーソルがある時は、インクリメントで桁上がり/デクリメントで桁下がり処理をします。


      MB T2 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | MB T2 making...  |
      | 0000             |
      +------------------+

      * 操作方法は MB T1 と全く同じため、説明は省略します。


      MB T3 を選択すると、以下の表示になります。2行目の数字の下にカーソルを表示します。
      +------------------+
      | MB T3 making...  |
      | F0F0F0           |
      +------------------+

      * [S5] キー (←) を押すとカーソルは左に、[S7] キー (→) を押すと右に1文字ずつ移動します。
      * [S2] キー (↑) を押すとカーソル位置の数字をインクリメント (+1) します。
      * [S10] キー (↓) を押すとカーソル位置の数字をデクリメント (-1) します。
      * [S6] キー (●) を押すと作成したリモコンコードを送信します。押し続けると同じコードを繰り返し送信します。
      * [S12] キー (戻る) を押すと No.1 に戻ります。
      * 1/3/5文字目にカーソルは移動可能ですが、インクリメント/デクリメントは無効です。
      * 1/3/5文字目には反転データが自動的に計算されて入ります。




学習リモコン > 学習モード

  1. 概要

  2. 操作

    No. 操作説明
    1
    ディップスイッチ S1 の1番を ON、2番を OFF にして電源 ON すると以下の表示が出ます。
    +------------------+
    | Larn mode        |
    | Select Key ?     |
    +------------------+

    2
    例えば、[F1] キー (01) 押すと以下のようにキーコードを表示します。
    +------------------+
    | Larn mode        |
    | Select Key : 01  |
    +------------------+

    * [16] キー (戻る) を押すと No.1 に戻ります。

    3
    基板に向けて学習元のリモコンから発信すると、[01] キーにリモコンコードを学習 (記憶) します。
    * リモコンコード受信が成功すると1行目の右のほうに [Good] を2回点滅表示して No.1 に戻ります。
    * リモコンコード受信が失敗すると1行目の右のほうに [Faild] を2回点滅表示して No.1 に戻ります。
    * [Faild] だった場合は EEPROM に書き込みしません。(EEPROM に変化なし)

    -
    No.1〜3を別なキーで実行します。




学習リモコン > 送信モード

  1. 概要

  2. 操作

    No. 操作説明
    1
    ディップスイッチ S1 の1番を ON、2番を OFF にして電源 ON すると以下の表示が出ます。
    +------------------+
    | Send mode        |
    | Select Key ?     |
    +------------------+

    2
    例えば、[F1] キー (01) 押すと以下のように表示して、学習したリモコンコードを送信します。
    +------------------+
    | Send mode        |
    | Select Key : 01  |
    +------------------+

    * キーを押し続けると同じリモンコードを連続して送信します。
     → SONY や三菱電機機器では複数回の同じコード受信で反応するので、この仕様にしています。

    -
    他のキーを押すと、そのキーに学習したリモコンコードが送信されます。
    * No.2の表示を繰り返します。