ホーム -> 電気工作 -> 実験用、治具用基板 -> リモコンデータ表示器

リモコンデータ表示器 制作メモ


回路図 合成した基板図 大きいスイッチの合成した基板図 荷物 段ボール箱 基板10枚 基板表 基板裏 バラした基板表 バラした基板裏 部品半田付け済表面 部品半田付け済裏面 パターンカット MCLR接続 100kΩプルアップ 16F1847に交換 チェック用線 表に回す 箱に入れた 取説
  • 発想 2021年1月20日
    • テレビ用リモコンを作る時に その信号を見る為にブレッドボードに回路を作り、赤外受光器の出力をオシロで見てチェックしたが これと同じ様な物で LCDに表示すれば赤外線データが簡単にわかるだろうと思った。

  • 構想 2021年1月20日
    • 1月20日

      ブレッドボードの回路みたいな物にCPUを付け、LCD表示器を付けて受信データを表示すればよい。 ついでに赤外LEDを付けて出力も出来る様にしたい。

    • 9月6日

      基板の基本的な動作が確認されたので、ソフト的な動作を考える事にする。

      サポートするデータフォーマットして、NECフォーマット、家電協、ソニー、ニキシー管時計用の4つを考える。 ソニーに関してはまだ対応しない。
      電源ON時に押されているスイッチによって、各フォーマットの動作にする。

      • SW1はNECフォーマット
      • SW2は家電協フォーマット
      • SW3はソニーフォーマット(まだ未対応)
      • SW4はニキシー管時計用フォーマット
      • スイッチが押されていない時はNECフォーマット

      受信データを表示するモードとスイッチに対応したデータを送信するモードの2つが有る。 電源ON時は受信データを表示するモードになる

      • 受信データを表示するモード
        • 表示形式は16進数2桁とする
        • 文字の大きさは5x7ドット位にする(6行20桁表示)
        • 1行目はフォーマット(NEC、家電協、SONY?)の種類を書く
        • 2行目に、受信データを書く(最大8個)
        • 3行目に、保存したいデータの場所を示す印(始めと終わり)
        • 4行目に、保存したいスイッチ番号とデータ4個、またはリピートデータ
        • 5と6行目に、操作する時のスイッチの簡単な説明
      • 受信データをメモリに保存し、各ボタンに割り当て、ボタンを押す事によってそのデータを送信する
        • SW1だけが短押しされた時、表示(保存)スイッチ番号を次にする。1->5、リピート。リピートの次は1に戻る
        • SW1だけが長押しされた時、表示されているスイッチ番号のメモリ(RAM上)に指定されているデータ最大6個を保存する
        • SW4(次)と5(前)で保存するデータの始めを指定し、SW2(次)と3(前)で終わりを指定する
        • SW1が押された時。SW3と4が同時に押されている時は、各スイッチは送信するモードの動作になる
      • ボタンに割り当てたデータは、電源を落としても消えないようにしたい。(EEPROMに入れる)
        • SW1が押された時。SW5と2が同時に押されている時は、保存された各スイッチのデータ(RAM上)をEEPROMに書き込む
      • データを送信するモード
        • 各スイッチに対応するデータ(RAM上)を出力する
        • SW1が押された時。SW3と4が同時に押されている時は、受信データを表示するモードになる

      上記の様な仕様にすると、16F1827ではプログラムが入らないと思う。 16F1847に今の段階から付け替えるか?、16F1827で一つのフォーマットだけを動かすか? いずれ16F1847にするのなら、早めにした方が良さそう。4つのフォーマットを入れるとそれでも間に合うかちょっと疑問。 何にしても、メモリーが足りなくてケチケチ作るのは大変。出来上がってから減らす方が気分的には楽。

    • 9月7日

      受信データの認識のやり方について考えてみる。(最初はNECフォーマットで)
      赤外信号の上りと下がりを見る必要が有る

      • ポーリングで見るか?
      • 割込みで見るか?(割込みが使えるか?)
        -->上り、下がりの両方の割込みに対応できるか?
           出来なければ割り込まれる毎に割込み方向を変えるしかない。

      赤外信号の有り時間と無い時間をどうやって測るか?

      • ソフトタイマーとソフトカウンターで測るか?
      • ハードタイマー(カウンター)で測るか?(最小時間と最大時間の関係でビット数が足りるか?)
        -->16ビットカウンターが有るので10uS単位にすれば十分なはず。
           1uS単位でもオーバーフローの処理が出来れば問題は無いはず

      有り時間と無時間がわかった後、どうやってデータ(16進数?)にするか?

    • 9月9日

      インターネットを調べたら 赤外線のリモコンは 家電品では 殆どがNECフォーマットか家電協フォーマットみたい。(ソニーは除く)
      と言う事で、この二つが表示出来ればずいぶん便利になる。ならば、表示に特化したプログラムを作ってもよさそう

      仮に、表示だけのプログラムを考えてみる。受信データ量から考えて、ビット毎のデータとして保存するのは無理だろう。 なので8ビット(1バイト)単位で保存する事になるだろう。
      スタートはLの時間が2mS以上続いたら、リーダー部なの考える。 次にHなって、その次にLになった所が1番目のビット始まりと考えそのLの時間の次に上がったHの時間により0か1の判断をする。 判断基準としてはLの時間(560mSの+-20%=450~670mS)と同じくらいならば0で、 3倍(1.69mSの+-20%=1.3~2.0mS)ぐらいならば1と考える。 Lの時間が1mS以上になったら1フレームは終わりと考える。

      簡易的な考え方をするならば、
      スタートは最初の立ち上がりで、その後は 次の立ち上がりまでの時間が1.120mS±20%(0.89~1.34mS)ならば0で、 2.240mS±20%(1.79~2.68mS)ならば1と考える。それ以外は異常なのでエラーで抜ける事にする。(エラー表示) Lの期間が2mS以上続いたらそのフレームは終わりと考える。
      取りあえずこの考えで作ってみるのが簡単みたい。時間はタイマー1の16ビットを使い 1uSか10uS単位でカウントし、 PB0の信号を見ながら立ち上がったらカウント値を見て8ビット(1バイト)毎に保存する。保存エリアは8バイトも有れば良いだろう
      最初のプログラムはキー入力なしで、1フレームが終わったら、受信データを16進数でLCDに表示するだけで良いだろう。
      その後、割込みを使ったり、計測開始のスイッチを見たり、計測終了のスイッチを見るのを追加すれば様だろう。

      ずっと後の話になるが、判断基準の時間を変更すれば 家電協フォーマットも出来るはず。
      もっと後だが、2フレーム続けてくるものも受信表示出来る様にすれば、エアコンデータもわかる筈。

    • 9月16日

      ソフト的な動作を変更する事にした。
      二つのスイッチの同時押しと長押しを無くした。

      サポートするデータフォーマットして、NECフォーマット、家電協、ソニー、ニキシー管時計用の4つを考える。
      ※ソニーに関してはまだ対応しない。

      ・全体動作
      1. 大きく2つの動作、受信動作と送信動作が有る。
      2. 電源ON時は必ず、受信動作になる
      3. 受信動作からは SW1を押す事によって送信動作に移行する
      4. 送信動作からは受信動作に移行はしない

      ・受信動作
      1. 受信動作には、受信モードと表示モードの2つが有る。
      2. 受信モードは、赤外線データを取り込み、終わったら表示モードに移行する。
      3. 表示モードでは、受信したデータを送信タスクと、受信したデータをEEPROMに保存タスクが有る。
      4. 表示モードでは、受信モードに移行(戻る)事も出来る。

      受信動作の受信モードでは電源ON時に押されていた時の SW1~SW5によりデータフォーマットを選択する。
      ・データフォーマット
      1. SW1はNECフォーマット
      2. SW2は家電協フォーマット
      3. SW3はソニーフォーマット(まだ未対応)
      4. SW4はニキシー管時計用フォーマット
      5. SW5は現在未定(押されていないのと同じ事)
      6. スイッチが押されていない時はNECフォーマット

      ・送信動作
       送信動作には、選択モードと送信モードが有る。
      ・送信動作の選択モード
      1. 送信データグループを選択する。
      2. 送信データグループは、5つとし、SW1~SW5を押して選択する。そして 送信モードになる
        但し、SW5はEEPROMに保存されたデータとする。
      3. 5つのグループはフォーマットの種類とは別の物とする。(2つをNECフォーマット、3つを家電協フォーマットと言う事も有る)

      ・送信動作の送信モード
      1. SW1~SW5が押された後は、5つのスイッチに対応したデーが、押される毎に赤外LEDから送信される
      2. 送信されたリーダー部時間、送信データがLCDに表示される
      3. 送信動作からは、抜ける事はない。(電源を切るまでこのスイッチに対応したデータの送信と表示を行う)

      受信動作の受信モード中のLCD表示は 10x16文字でREC そして 選択されたフォーマットを表示する。
      ・表示フォーマット文字
      • NECフォーマットは”NEC”
      • 家電協フォーマットは”AEHA”
      • SONYフォーマットは”SONY”
      • ニキシー管時計フォーマットは”NIXIE”

      受信動作の表示モード中のLCD表示は 全て5x7文字表示する。
      ・受信動作の表示モード中のLCD表示
      1. 1行目は 選択されたフォーマットを表示する。表示文字は受信モードと同じ
      2. 2行目はリーダー部時間(ONとOFF時間)を表示する。
      3. 3行目は受信データを表示する。
      4. 4行目は空白
      5. 5行目はSW1 SW2 SW3 SW4 SW5 の文字を表示し、
        保存に対応するスイッチ名は反転表示になる。最初はSW1が反転表示になる。
      6. 6行目は SAVE とTRANSMIT を表示する。

      ・受信動作の受信モード中のスイッチの動作
      SW1のみ有効で、押されたら送信動作に移行する。

      ・受信動作の表示モード中のスイッチの動作
      1. SW1は送信動作に移行する
      2. SW2は保存対応するスイッチの選択で、SW1からSW5の順に大きくなる方向に動かす。SW5で止まる
      3. SW3は送信タスクを動かす。つまり、表示中のリーダー部+受信データを赤外LEDから送信する。
      4. SW4は保存タスクを動かす。つまり、選択されているスイッチに対応するEEPROM領域にリーダー部+受信データを書き込む
      5. SW5は保存対応するスイッチの選択で、SW5からSW1の順に小さくなる方向に動かす。SW1で止まる

      送信動作の選択モード中のLCD表示は 全て5x7文字表示する。
      ・送信動作の選択モード中のLCD表示
      1. 1行目は TRANSMIT SELCTと表示する。
      2. 2行目はSW1 SW2 SW3 SW4 SW5 の文字を表示する。
      3. 3行目は l   l   l   l   l  の文字を表示する。
      4. 4行目はGP1 GP2 GP3 GP4 EEP の文字を表示する。
      5. 5行目は空白
      6. 6行目は空白

      送信動作の送信中のLCD表示は 全て5x7文字表示する。
      ・送信動作の送信中のLCD表示
      1. 1行目は TRANSMIT と表示する。
      2. 2行目は選択モードで選択されたグループを表示する。
        GP1はGROUP1、GP2はGROUP2....EEPはEEPROM
      3. 3行目は押されたスイッチ名 SW1...SW5と送信データのリーダー部時間(ONとOFF時間)を表示する。(最初は空白)
      4. 4行目は送信データを表示する。(最初は空白)
      5. 5行目は空白
      6. 6行目は空白

      ・送信動作の選択モード中のスイッチ動作。
      1. SW1はグループ1のデータグループを送信データ領域に移し、送信モードに移行
      2. SW2はグループ2のデータグループを送信データ領域に移し、送信モードに移行
      3. SW3はグループ3のデータグループを送信データ領域に移し、送信モードに移行
      4. SW4はグループ4のデータグループを送信データ領域に移し、送信モードに移行
      5. SW5はEEPROMのデータグループを送信データ領域に移し、送信モードに移行

      ・送信動作の送信モード中のスイッチ動作。
      1. SW1は送信データ領域のSW1対応するデータを赤外LEDから送信し、LCD表示
      2. SW2は送信データ領域のSW2対応するデータを赤外LEDから送信し、LCD表示
      3. SW3は送信データ領域のSW3対応するデータを赤外LEDから送信し、LCD表示
      4. SW4は送信データ領域のSW4対応するデータを赤外LEDから送信し、LCD表示
      5. SW5は送信データ領域のSW5対応するデータを赤外LEDから送信し、LCD表示

      ※動作からは外れるが、無関係ではないのでEEPROMに保存する内容を書く。
      1つのスイッチに対応したデータとして データフォーマット、リーダー部のON時間とOFF時間、送信データ数、送信データ(最大6個)が有る。
      これがスイッチ数分の5個有る。
    • 9月30日
      • DENONリモコンの固有フォーマットのデータも受信したい。
      • プログラム領域が残り少ない。
      • 送信動作は「テレビ用リモコン」みたいな使い方でなくてよい。(テレビ用リモコンが有るから)
        エアコン用リモコンデータの受信は別途考える事にする。今回はテレビ用、照明用、CDプレーヤー用辺りの データの少ない物をターゲットにする。
      以上の事を勘案しながら使用を再検討する。 ・動作について
      • 受信動作と送信動作は有る。
        但し、送信動作はEEPROMに保存されている1つのグル-プだけをロードして使う。
      • 受信動作と送信動作の選択は電源ON時にSW1が押されていると選択画面で行う。
        押されていない時は、前回の動作を行う(EEROMに覚える)
      • 送信動作は押されているスイッチにより送信するデータが決まる。
        データフォーマットも決まる。
        EEPROMに各スイッチに対応して保存されている
      • 送信データ数は最大13バイトとする。
        2ブロックの物も2つ合わせて13バイトまでとする。
        データ形式は16バイトを基本として 頭の3バイトのデータフォーマットとブロックごとのデータ数(ビット数)を入れる。 その後の13バイトがデータとなる
      • 受信動作は、送信動作と受信動作の選択画面で選択された時は、データフォーマットの選択をする。(出来る) 送受の選択画面が表示されない時は、データフォーマットは前回のフォーマットとする。
      • データフォーマットの種類は、
        1. NECフォーマットは”NEC”
        2. 家電協フォーマットは”AEHA”
        3. SONYフォーマットは”SONY”
        4. DENON固有フォーマットは”DENON”
        ※ニキシー管時計用フォーマットは無し
      • DENON固有フォーマットは、2ブロックデータとする。 表示は 第1ブロックと第2ブロックの2行にする。各ブロックとも1行分に入りきらない時は 表示は切り捨てられる。データその物は存在する。
      • 表示中SW1が押されたら、再度受信動作になる(前回のデータフォーマットで)
      • 表示中SW5が押されたら、表示中のデータを現在のデータフォーマットで送信する
      • 表示中SW4が押されたら、EEPROMに保存する時の対応スイッチの選択画面になり SW1~SW5の表示から選択をする。選択しているスイッチは反転表示。 SW3:左移動、SW2:右移動、SW4:選択スイッチに対応した所に保存

  • 実装についての考え
    • 1月21日

      回路的には赤外受光器とグラフィックLCDとCPUと赤外LEDとタクトスイッチ5個(出力用)が有れば良いはず。 赤外LED出力の変調用にDSMが有ると楽で、LCDをコントロールできる信号数が必要なので PICの16F1827を使う。電源はリチウムの3Vでやりたい。但し電流はTV用リモコンより食うと思うのでCR2を使う。

    • 1月22日

      回路図と基板図はTV用リモコンと一緒にする。基板代が安くなる。


  • 現状
    • 1月22日

      回路図基板図は出来た。 (16F1827にしたが、電流的には16LF1827を使いたい。秋月で有るみたい) TV用リモコンの回路図と基板図に入れた。 面積的に2つで100x100mmに入れた。 プログラムはまだ作っていないので 1827(4kバイト)で間に合うかわからない。 コンパイラの効率が悪いのでちょっと不安だが、受信データ表示と出力を別のプログラムにすれば何とかなるだろう。 二つのハードで、違うプログラムを入れて、使い分ける事になる。

    • 1月23日

      ガーバーファイルも出来た。 基板図とガーバーファイルはテレビ用リモコンの物と同じ。

    • 1月29日

      テレビ用リモコンを変更したので基板図とガーバーファイルが変更になった。
      「テレビ用リモコンの基板図と「ジグの図面」と「リモコンデータの表示と出力の基板図」を合成した物。 そのガーバーファイル

    • 2021年6月15日

      テレビ用リモコンと共通の部品表を作った

    • 2021年6月16日

      他のデカトロンスピナー、ニキシー管チェッカー、Z563m時計用アクリルと一緒に、基板をelecrowに注文した

    • 2021年6月25日

      昼頃、佐川で荷物が届いた。いつもながらOCSは速い。
      中を見たら、段ボール箱が有り、 その中の基板は全て10枚づつ有った。デカトロンのだけ10枚で頼んだのだが、 他の基板も10枚になっていた。 まあ 値段は同じか。

    • 2021年6月26日

      一枚の基板は、テレビ用リモコンと、リモコン信号の表示と出力 の2種類の基板がくっついている。 (

    • 2021年7月5日

      基板を切り離して 必要な基板だけにした。 (

      デカトロンスピナー、ニキシー管チェッカー、テレビ用リモコンと一緒に、不足部品を注文した

    • 2021年7月6日

      千石に頼んだ部品(タクトスイッチ)、RSに頼んだ部品の一部(モレックス、チップ抵抗)が入った。

    • 2021年7月7日

      ウィルコに頼んだ部品(ビス類)、廣杉計器に頼んだ部品(スペーサー、コネクタ)、秋月に頼んだ部品(B6B-ZR以外)が入った。 残りは マルツとRSの海外在庫品とJPセミコンのICになる。いつになるか?来週中には入るだろう。

    • 2021年7月8日

      JPセミコンのICと、後から秋月に頼んだ部品(B6B-ZR)が入った。 RSの海外在庫品内 2点は明日届きそう。残り一点は来週初めになるとの連絡が来た。 マルツはいつになるか?来週中には入るだろう。

    • 2021年7月9日

      RSの海外在庫品内 2点が届いた。

    • 2021年7月12日

      RSの残っていた海外在庫品内 1点(16F1827-I/SO)が届いた。
      マルツは納期回答もまだ無い

    • 2021年7月15日

      IC(16F1827-I/SO)を半田付けした。

    • 2021年7月17日

      SMDは全て半田付けした。

    • 2021年7月18日

      スルーホール部品も半田付けした。基板表基板裏
      まだプログラムを作っていないので動作はわからない

    • 2021年8月31日

      プログラムはニキシー管チェッカーを元にまずLEDの点灯から始めてみる。PB1(青LED)の点滅を書いてビルド完了した。
      が、PICKIT3を繋いでもCPU(16F1827)を認識しない。
      書き込みコネクタ(6Pコネクタ)のMCLRがCPUのMCLRに繋がっていない。回路図で繋がっていない。なぜ?

      今日はここまでとする

    • 2021年9月1日

      書き込みコネクタ(6Pコネクタ)のMCLR(1ピン)からのパターンをカットして、 CPUのMCLR(4ピン)に接続した。
      -->PICKIT3がCPUを認識できて、プログラムを書き込めた
         青LEDも点滅した。やっとスタートラインについた感じ。

      スイッチ入力の確認をしたが、SW4(RA4)とSW5(RA0)がうまく読めない。 原因は、外部のプルアップ抵抗が無かった。IC内部には存在しない。ニキシー管チェックの時と同じ思い込み。
      -->二つとも100kΩでプルアップしたら正常にスイッチ入力出来た。

    • 2021年9月2日

      DSMの確認のプログラムをテレビ用リモコンを元に書いたが、コンパイルが通った所までで、ちょっと中断する。

    • 2021年9月3日

      テレビ用リモコンのプログラムと ニキシー管時計用のプログラムは動いた。(別々のプログラムとして) DSMは動作したと言う事で、残りはLCDと赤外線受信になる。

    • 2021年9月4日

      LCDに関しては 明六つ時計の時のLCD表示を流用(ポート、ビットは修正)すれば、動くと思う。 但し、その時は16F1827ではプログラム領域が足りなくなって、16F1847を使った様に思うので 今回は大丈夫だろうか?。足ピンは同じなので付け替えれば良いのだが、手間である。(在庫は有る)

      LCD表示とフォントのファイルをプロジェクトに追加してビルドしたら、プログラム領域の約61%を使っている事になった。 LCD表示はまだ呼んでいないので、もしかして実際にはリンクをしていない可能性が有るので、動くプログラム(LCD表示を呼ぶ)を 作ってみないと本当の所はわからない。

      今日はここまで

    • 2021年9月5日

      LCDに[0123456789ABCDEF]を表示するプログラムを 追加した。
      -->表示しない。LCDのRST端子のビット指定を間違えていた。
         直したら表示したので、LCDは動作OK

      赤外線受光器は出力についているLEDがリモコンの信号で点滅するので、受光器その物は動いている。
      CPUでその信号を見て、青LEDに反映させたら、同じように点滅するので、CPUでも取り込めた。

      これで ハード的には全て動いている事になる筈。後はそのハードをソフト的どう動かすかになる。 つまり、これからはソフトを作ると言う事

    • 9月6日

      16F1827のEEPROMの読み書きはどうやるのだったか?(何か関数が有ったと思うが) これをクリアにしないとまずい。-->以前のLED表示器で使った筈(16F1847では無いが同じ様なはず
      プログラム領域の問題から16F1847に付け替えた。 プロジェクトを16F1847用に変更しなければならないが、今日はここまで

    • 9月7日

      プロジェクト名とターゲットCPUを16F1847に変更した。 再度ビルドして、CPUに書き込み、現状の動作を確認した

    • 9月8日

      I/Oデータのテレビチューナー用のリモコン(HVT-BRC1)のデータを見た。この基板を使いオシロで赤外線受光器の出力を見た。
      信号はNECフォーマットに近い。リーダー部と各ビットの表し方(ON、OFFの時間)は同じ様だが、 データがNECフォーマットとは違うみたい。
      Lが赤外線有り(ON)、Hが赤外線無し(OFF)とすると、リーダー部はON:8.9mS・OFF:4.48mS。 データは 0(ゼロ)はON:0.56mS・OFF:0.56mS、1(イチ)はON:560mS・OFF:1.6mSに なっているみたい。
      電源ボタンは5バイトのデータを送っているみたいで、00H、01H、48H、00H、40H となっていた。
      気長にオシロで調べれば、テレビ用リモコンの送信データを変更すれば I/Oデータ用のリモコンも出来る事になる。

      東芝のエアコンのリモコンの信号も見た。これは信号長が長いみたいで全体で182mSも有った。どうも二つのブロックを続けて出しているみたい。 信号としては 0.56mSと0.56mSの物と、0.56mSと1.60mSの物を組み合わせているみたい。リーダーは4.4mSと4.4mSみたい。 これもデータがハッキリわかればテレビ用リモコンでソフトを作れば出せるだろう

      東芝テレビ以外の見た所 NECフォーマットのデータを表示できると結構他の物も見られそうな気がしてきた。
      キー操作、EEPROM保存などの面倒な事は後回しにしても、NECフォーマットのデータを見られると面白くなりそう。

    • 9月11日

      受信データ表示のプログラム(簡易判定)を書いた。コンパイルは通った。

    • 9月12日

      CPUに書き込み動作させた。
      -->リーダー部はそれらしい値を表示したが、データ部は数がおかしいし、値もおかしい。
      データ数表示を追加した。データ表示の所が間違っていたので修正した。
      表示のフォーマットは合ったが、データ数とデータ値がおかしい。最初の1ビットが抜けているみたいにも見える

      終わりを見ていなかったので、自然には終わらず、スイッチを押して終わる事になった。
      -->これは修正の必要が有る。
         OFFの時間が1(イチ)の判断時間より長くなったら終わりと判断する事にした。
         これで1フレームが取れた。

      だが、まだ データ値はおかしい。
      おかしいが、何回やってもデータは変化しないので、 ソフトでどこか論理的な間違いが有ると思える。

    • 9月13日

      まだ データ値はおかしい。
      プログラムを検討した。ON時間、OFF時間の合計が判定範囲外の時は0になる。 なので、プログラムの処理が遅くて、正常に赤外線ONの立ち上がりが取れないと 本来1のビットが0に化けて、1ビット取り損ねる事になる。 この様な状態が有るかもしれない。

      本当にONの立ち上がりが取れないのか調べる為に、立ち上がりで青色LEDを反転させるソフトを追加して、オシロで確認するつもり。
      プログラムは追加して、青色LEDが点滅する事は目視で確認した。オシロではまでしていない。

    • 9月14日

      青色LEDの点滅信号をオシロで見る為に、チェック用の線を付けた。 裏側の信号なので表側に線を回した

      オシロで見た所時間が足りない事は無いみたい。オシロで見る限りでは大きな遅れは見られない(15uS~25uS)
      そうするとソフト上の論理(考え方)の問題に絞られる。 怪しいのは、
      ・リーダー部の時間取得から、データ部のON/OFFの状態を見る所に移行する所?
      ・ビットをシフトしながらバイトデータにして、1バイトづつ保存する所?

      もう一度 ソースコードを良く見直す必要が有る。
      -->ビットをシフトしながらバイトにして、1バイトづつ保存する所が間違っていた。
         修正したら、思ったようなデータが取れた。

    • 9月15日

      今回は簡易的な判断だが、本来のリモコンを使って近距離で受光するので、とんでもないデータは来るはずがないので この方式で良しとする。 但し、フォーマットの違い(NEC、家電協等)は決め打ちなので、その違いを判別するのが一段階必要かもしれないが、それは追々考えるとする。

      他のリモコンも試してみた。正しいかどうかわからないが、I/Oデータのリモコン、DENONのリモコン、東芝エアコンのリモコンのデータも表示は出来た。 DENONのリモコンはデータ数が1なのでどうも怪しい

    • 9月17日

      構想 9月16日の仕様でソフトを作り始める

      DENONのリモコンRC-1173の波形を見たら、家電協フォーマット(データ6個)だった。 これを基準にすればソフトも作りやすいだろう。

    • 9月19日

      基板を箱(キャンドゥの1BOX)に入れた。 が、完全な箱では無く、スイッチ、LCDの面は開放になる。
      箱が大きすぎる感じ。半分ぐらいの高さの物が有れば良かった。

    • 9月20日

      受信部分のNECフォーマットと家電協フォーマットの部分は書いて、コンパイルも通った。 ニキシー管時計フォーマットの受信がまだ出来ていない。(ソニーは保留)
      送信部分も全てまだ出来ていない。

    • 9月21日

      CPUに書き込みに現状のプログラムを入れた。NECフォーマットと家電協フォーマットは表示した。
      赤外LEDから送信がダメ。(プログラムは作ってある)なぜ?
      DSMの初期化を直前に入れたが、ダメ
       以前のプログラムとほとんど同じでターミネーターでなくデーター数指定に反抗しただけの筈。送信データ内に00Hが有るかもしれないので ターミネータ方式ではダメになった。

    • 9月22日

      仮に 今までのタ-ミネ-タ-方式で 今までのSW1のデータを送る様にしてみたが、赤外LEDからの送信は出来なかった。 と言う事は、何かの設定が狂っているのだろう。DSMの初期化は入れてもダメだったのでその他だろう。何??

    • 9月23日

      仮に 今までの送信動作の所で、データ数指定の送信関数を呼ぶと 赤外LEDからの送信は出来る。 と言う事は、やはり、何かの設定が狂っているのだろう。何??
      -->単純な事だった。DSMをイネーブルにしていなかった。イネーブルにしたら出力した。(LEDが光った)

      I/Oデータのリモコンの電源コードを受信し、表示した後、 赤外LEDから送信したら、電源をON/OFF出来た。チャンネル変更も同じように出来た。

    • 9月24日

      テレビのリモコンとは違うが、東芝エアコンのリモコンのデータを見た。NECフォーマットでは6個のデータが取れた。 家電協フォーマットではデータが取れなかった。 なので多分NECフォーマットなのだろうが、リーダー部の時間がON時間とOFF時間が同じくらいで4.4mSになっている。 このフォーマットも送信できるようにするにはリーダー部のON/OFF時間もEEPROMに保存する様にしないとダメだろう。 それは、もう少し後にする。

      ソニーとニキシー管は除いて、プログラムを書いたつもり。ビルドは出来た。
      送信動作は見た目は動いているみたいだが、受信動作でEEPROMに保存したデータが送信できない。 データフォーマットとデータ数は保存した物になっている。どうも受信動作の保存が上手く無いみたいな気がする。

    • 9月25日

      受信動作の保存について、MPLABでEEPROMの中身を見ると、 確かにデータフォーマットとデータ数は書き変わっているが、データは変わっていない。 なので、書き込み(保存)が悪い様だ。
      -->保存関数の中のデータ数を見る所が間違っていた。forループの中身が1度も実行されなかったみたい。

      大筋は出来た感じ。SONYとニキシー管は出来ていないが....。

    • 9月26日

      家電協のリモコン動作だが、DENONのリモコンのENTERとSOURCEはデータが取れるが、STOPとPLAY(POUSE)のデータが取れない。 取れたデータを送れば、動作は確認できたので、受信動作がまだ完全では無いみたい。
      色々操作した結果、リモコンに二つのモード(CDとNET)が有り、 NETモードの時は送信データはこの機械で読み取れるが、そのモードではCDプレーヤーは反応しない。
      CDプレーヤーが反応するのは、もう一つのモードのCDモードにする必要が有ったが、そのモードの送信データはこの機械で読み取れない。 このデータは家電協ともちょっと違うみたい。リーダー部の長さがずいぶん違う。オシロで解析をしないと無理な感じ。

      NECのLED照明器具のリモコンは、当然ながらNECフォーマットで送信データが読み取れた。

      ダイキンエアコンのリモコン(ARC478A20)は、データが取れない。 webで調べたら、2フレーム送る事になっていて、1フレームの前にON/OFFの繰り返し信号が入っている。 どうも そのON/OFF信号から取り始めてしまって肝心の1フレーム目からのデータが取れないみたい。
      取れたとしても1フレーム目が20バイト、2フレーム目が19バイトと言う事なので、今のプログラムではデータが取れない。
      このエアコンのリモコンデータが取れない事は置いておいて、ON/OFF繰り返し信号で取れないと言うのはまずいので 最初のON時間とOFF時間を計測して、リーダー部として認識してから次のデータを取る必要が有るだろう。
      -->プログラムは修正して、
         リーダー部のON時間とOFF時間の合計を見るようにした。
      今まで取れていたデータは今まで通り取れる。
      が、DENONリモコンのCDモードは取れない。オシロで解析しないとダメみたい。 NECのリーダーの比では無いが、NECフォーマットでデータ数1でデータが取れる。本当?違いような気がする。

      今後の事を考えるとリーダー部のON時間とOFF時間でNECフォーマットと家電協フォーマットフォーマットを判別できるかも?
      と言うよりは、そうしないと持ってきたリモコンのフォーマットがわかっていないと何もできない事になってしまう。
      それと2フレームは取れないとまずそうだし、1フレームのデータ数も16では足りないので、25データ/1フレーム位にしないとダメだろう。
      但し、それはエアコンまで考えた時であり、テレビ、照明器具、CDプレーヤー辺りなら、 今のプログラムの方式で、リーダー部の認識は必要だろうが、行けると思う。

      ニキシー管時計用のデータ受信だが、これは必ずわかっている物(私しか作らない筈なので)なので必要ないだろう。 送信に関してはこの基板をリモコン代わりに使うとしたら、有っても良いと思うが、必ずしも必要とは思えない。
      なので、受信のニキシー管フォーマットは止める。

    • 9月27日

      DENONリモコンの波形をオシロで見た。
      0と1を表し方は似ているが、時間が全然違ってる。
      2パターン有り、仮に 第1パターン(ON:340uS, OFF:690us)を0(ゼロ)とし、 第2パターン(ON:340uS, OFF:1740uS)を1(イチ)とする。これで データは表せる。 そして リーダー部は無い。もしかして最初の方のデータがリーダー部に当たるかもしれないが...。 トレーラー部はハッキリわからない。最後のデータが1ビットがトレーラー部に有らるかもしれないが...。
      と言う事で NECフォーマットでも家電協フォーマットでもない独自フォーマットと言う事になる。
      送信はデータがわかればすぐ作れると思うが、この様な独自フォーマットを受信してデータを取得する必要が有るか?
      これが CDプレーヤーの標準だと言うのなら、やっても良いと思うが、どうかわからないので受信は必要ないだろう。 どうしても必要なら オシロで解析出来るので この機械には受信は入れなくて良いだろう。 但し 送信は入れるが、バイト単位の送信でなく、ビット単位で送信できるように、基本構造を変えたい。
      また、DENONリモコンの場合は、スイッチごとにフォーマットが違う事になるので、 グループごとのフォーマットでなく、スイッチごとにフォーマットを指定出来るようしないといけない。

      別の事だけど、動作で変更したい事が有る
      1. 受信動作のフォーマット指定を電源ON時にいつも行うのは面倒なので、スイッチが押されていなければ前回のフォーマットで動くようにしたい。
      2. 送信動作でグループを選択する時、EEPは良しとしても、GP1~5では、わかりにくい。3文字で良いから わかる文字列にしたい。
      3. いつも受信動作に行って、そこから抜けて、送信動作に行くのは面倒なので、最初にスイッチで受信か送信か選ぶようにしたい。
      4. 最初にスイッチで受信か送信か選ぶのも、スイッチが押されていない時は前回の動作をする様にしたい。
    • 9月28日

      DENONリモコンの固有フォーマットの送信だけ出来ても  元になるデータを解析するのが手間なので、受信動作もできるように考えた。 それらしいデータが表示できる。受信動作の送信も作ったが、正確にリモコンデータが送信できているかは未確認 (赤外は出ているみたいだが動くかどうかわからない)

    • 9月29日

      DENONリモコンの固有フォーマットの受信したデータを送信しても、 CDプレーヤーは動作しない。オシロで見ると同じ様なデータが出ている(1%から1.5%短い)ので 動くと思ったがダメ。
      オシロで信号をよく見ると、始めのブロックの後100mS位経過した後に、違うパターンが出ているみたい。 その後ろにも100mS位経過した後 違うパターンが出ている。つまり3つのブロックが出ているみたい。 但し、2番目と3番目が違うパターンかははっきりしない。それとデータを解析する事が出来ない。 オシロにディレードトリガーが無いので全体を見るしかなく、その時間軸だとはっきり解析できない。 やるとしたら、プログラムで別にトリガー信号を出してやる必要が有る。 今は、そこまでやらなくても良いのではないか?
      いずれは エアコンの事も有るので複数ブロックに対応する必要がある。

      この際 この機械の仕様を考え直す必要が有るように思う。
      1. 送信動作は必要ない
        送信する事は必要だが、リモコンみたいに送信機として使う動作はいらない。 リモコンの送信機は「テレビ用リモコン」を使えば良い。 当然、プログラムはCDプレーヤー用、照明器具用、エアコン用に特化する必要はある。 その送信データの解析用、確認用の機械と言う位置づけで良い。
        簡易的な送信動作として、受信データをスイッチに対応させてEEPROMに保存して、 それでリモコンみたいに動かして確認したいとも思う。
      2. データブロックは3ブロックまでとする
        エアコンや、DENONのリモコンは複数ブロックで送信するので、それに対応する。
      3. 1ブロックのデータは23までとする
        エアコンのデータが21バイトみたいなので、23バイトとし、頭に送信ビット数を入れて24バイトを1ブロックにしたい。
      4. スイッチ毎にデータフォーマットを指定できるようにしたい
        これは 送信動作的な物を残す時に必要になる事で、送信動作を完全に止めるならばこの様な事を考えなくても良い。

      以上の事柄は プログラム領域が足りなくなりそうだと言う事に 大きく影響されている。 余分なルーチンが有るとしても、既にプログラム領域が93%位埋まっているので、 機能をいくらでも入れられると言う状態ではない。必要な機能に絞って入れる必要が有る。 また、入れるとしても優先度と言う事を考えながら入れる必要が有る。

    • 9月30日

      DENONリモコンの固有フォーマットのデータを調べてみた。
      リーダーは無し、15ビットのデータで、トレーラー有り、2ブロック有り、ブロック間は40mS位。 ボタンを押し続けると その2ブロックが何度も送信されるみたい。

      この機械の仕様を再検討したいので「構想」の所に記述する

      ソースファイルを分割して ある程度機能別にした。

    • 10月3日

      再検討した仕様で作り直した。ビルドは出来た。
      動かすと不具合は有りそうだが、今日はここまでとする。

    • 10月4日

      NECフォーマットは良いみたい。I/Oデータリモコンで確認した。部屋の照明のリモコンでも確認できた。
      家電協フォーマットはDENONリモコンの家電協リモコンが出る ENTERとSOURCEで確認した。
      DENON固有フォーマットは送受信とも表示上は良いみたいだが、CDプレーヤーは制御できない。まずは、オシロで見ないと 何が悪いかわからないだろう。
      SONYは そもそもリモコンも装置も何もないので、確認の仕様がないし、作っていない部分もある。

    • 10月5日

      DENON固有フォーマットの送信をオシロで見た。波形を重ね合わせ比べた。
      1ブロック目は本当のリモコンと同じに見える。微妙な時間差は有るが数%なので多分違いに入らないと思う。 但し、2ブロックまでの休み時間が5mSほど短い。リモコンでは45mSだが これの送信では40mSになっている。 しかし、これが制御できない原因とは思えない。
      2ブロック目がハッキリ同じかわからない。2ブロック目はトリガーの関係で細かい時間軸で保存できないので 同じみたいにも見えるが、ハッキリしない。
      細かく波形を比較するには プログラムを細工して、2ブロック目にトリガになる信号を出す必要が有る。
      -->今も2ブロック目に青LEDを点灯させている(トリガーが有る)。
         消していないので2度目以降はトリガーにならないので見落としていた。
      そのトリガを使って2ブロック目のこの機械の送信データと、リモコンの送信データを比べてみた。 1ブロック目と同じ様に数%の微妙な時間差は有るが、同じデータが出ている事を確認した。

      なぜ CDプレーヤーを制御できないのか、わからない。違うのは何が有るか?
      繰り返し回数か? リモコンはボタンを押している時は繰り返し、信号を出している。
      しかし、この機械は1回(2ブロック)だけ。ここだろうか?

    • 10月6日

      手動で何度も連続で早く送信したが CDプレーヤーを制御できない。 手では遅いのかもしれない(せいぜい200mS間隔位だろう)

      プログラムを細工して DENONに限り 2データ1ブロックで6ブロックを受信するようにした。 また 15ビット1ブロックで6ブロックを送信するようにした。

      受信をして表示させた時、リモコンを短く押す(CDプレーヤーは反応する)と6ブロックまでは送らない。 もう一度リモコンボタンを短く押して6ブロックにした時のデータは最初の2ブロックの繰り返しに近いが、 ちょっと違っている。この6ブロックのデータを この機械からそのまま送るとCDプレーヤーは反応した。
      と言う事は、最初にボタンを押した時に出たデータ3ブロック以上で5ブロック未満のデータが必要なデータと言う事になる。 実際に何ブロックかは、オシロで見ればわかる筈。
      -->オシロで見たら 15ビット1ブロックの5ブロックを送信していた。 CDプレーヤーで主に使うボタンの送信データは5ブロックだった。
      受信も6ブロック受信するのではなく、間隔が空いたらそこまでのデータを生かして終了するようにすれば良いはず。 保存もそのデータ数分を保存する事にする。 或いは5ブロック決め打ちにするか?どうせ DENONリモコンの専用フォーマットだからそれでも問題は無いはず。
      受信は5ブロックと言う事にしてプログラムを作った。 が、まだ完全ではなく、5ブロックのデータでは表示に行かない。表示データは5ブロック分で内容も合っている。
      今日はここまでとする

      DENONリモコンのデータを調べて思った事は、資料のほとんどない物もデータを知るのは大変だ。 と言う事と、リモコンとCDプレーヤーが有ったから出来たが、無かったらプログラムを作っても無意味だろう。 確認も出来ない物を作っておいても無意味だろう。
      なので、SONYフォーマット関連は消す事にする。プログラム領域も99.6%になっており、 確認用のプログラムも入れられないような状況なので、取りあえず使わない(使えない?)物は消す事にする。

    • 10月7日

      DENONリモコンの確認をやってみると、3ブロックでもCDプレーヤーの制御が出来る。 リモコンのボタンを短く押した時には3ブロックだったり、4ブロックだったりの時が有ったので、試してみた。 3ブロックで良ければ、データ構造をDENONリモコン用に特別な使い方をしないで、ビット数を3つに増やし、 送受信データを12個にすれば、以前の考え方をあまり変えないで済みそう。
      -->3ブロックまででプログラムを作り直した。ビルドしてCPUに書き込み、動かした。 表面上は問題ない。実際に制御できるかは未確認

    • 10月8日

      DENONリモコンの確認を、3ブロックのプログラムで、CDプレーヤーの制御が確認した。OK。

      YAMAHAのCDプレーヤーとカセットデッキのリモコンが有ったので受信のテストをしてみたら、 NECフォーマットでデータが表示出来た。
      カセットデッキは2~3のボタンの確認は出来た。
      CDプレーヤーは、動く機械が無いので動作確認は出来なかった。(多分正しいと思う)
      NECフォーマットが受信できて表示できると結構色々な機種のリモコンデータが見られるみたいだ。

      プログラムの機能的な事はこれで良しとして、使い勝手、表示などを調整する必要が有る。
      -->表示などを整理した。

      それと、送信のタイミングの時間を__delay_us(n)を使っているが、nが定数なので それを変数が使えるような物にしたい。
      -->ハードタイマーを見るようにすれば、出来そうな気がする
         そうすれば、今は別々のデータフォーマットの送信プログラムを共通化出来そう。

    • 10月9日

      __delay_us(n)をTimer1(1uSカウント)を使って、 NEC、家電協、DENONフォーマットの出力を行った。 NECと家電協で機械(テレビとCDプレーヤー)の操作は出来たが、DENONフォーマットは操作が出来なかった。 オシロで波形を見る必要が有るだろう。
      今日はここまでとする

    • 10月10日

      この機械のDENON波形をオシロで見た。
      大きくは違っていないが、赤外受光器の所を見るとON時間が長い。420uSになっている。 出力の所(LED)で見ると360uSになっている。赤外受光器で60uS長くなるみたい。 と言う事は、このDENONリモコンの時間を見た時は赤外受光器で波形を見て、それで340uSと決めたが その値は60uS長くなってこの長さなので、出力は340-60=280uSと言う事になる。 因みにOFF時間は短くなっていて、周期は赤外受光器で1070uSで、出力では1060uSとほとんど同じになっている。 なのでON時間を短くしたらその分OFF時間を長くする事になる。
      時間をゼロは ON=250uS、OFF=750uS、
      1(いち)は ON=250uS、OFF=1750uSにした。
      -->何となくON時間とOFF時間は受光器で見てリモコンと近い感じにはなった。(260でも良いかな?)  でもCDプレーヤーは操作できない。オシロで見たら、1ブロックが15ビット無い。 14ビットで最後の1ビットが足りない。

      NECフォーマットと家電協フォーマットは 規格として出力時間が決まっているのでその時間で出力すれば 赤外受光器がON時間を長くしてもその程度のズレは機械側(テレビ、CDプレーヤー等)が元々見込んでいると言う事になる。

      今日はここまでとする
    • 10月11日

      DENNON出力が14ビットしか無い件が推察で来た。トレーラー部のON時間が0になっているので STOPビット(?)がない事になり、最後のビットがわからなくなっているみたい。データのON時間は ばらつきが有るにしろ 15ビット分の15回は出ているみたい。
      -->トレーラー部のON時間を入れた。ON時間は全て260uSにした。
         これで CDプレーヤーの操作は出来た。

      LED出力と受光器の時間に差が有るので調べてみた。
      STOPデータで 受光器出力でON時間の平均値が288uSになっている。
      最小は208uSで 最大は352uSになっている。
      LEDの所で見た出力は250uS~260uSになっている。
      同じ様にリモコンSTOPデータではON時間の平均値が319uSになる。
      最小は308uSで 最大は340uSになっている。バラつきが少ない。
      この機械のLED出力を受光器で見た時は、どうしても反射波になるので その影響も有ると思う。 しようがないだろう。

      正確にLED出力の時間を決めるには、フォトトラ(フォトダイオード)を使って、 38kHzのフィルターの無い信号をみて 時間を測る必要が有るだろうが、 そこまでやらなくても 良いだろう。面倒なのと、その値を正確にソフトに反映させるのも大変だろう。 今のソフトの作りでは それほど精度は出ないだろう。

      この機械のON時間は10uS位増やしてもよさそう。270uSにした。
      0(ゼロ)OFF時間は780uS、1(イチ)OFF時間は1820uSにした。
      トレーラー部のOFF時間45mSにした。
      それと 受信の0(ゼロ)判定下限を840uSに、上限を1270uSにして、 1(イチ)判定下限を1670uSに、上限を2520uSにした。
      これで CDプレーヤーの操作が出来て、リモコンデータも表示出来た。良しとする。

    • 10月14日

      取説を書いた。
      プログラムも出来た

    • 12月11日

      フォトトラ(RPT-34PB3F)を使って DENNONの信号をオシロで見た。 テスターの抵抗レンジで黒をコレクタ、赤をエミッタに繋いで、電圧と負荷抵抗を繋いだことにした。 その時の、エミッタとコレクタ間の信号を見た。抵抗レンジはx1にした。1V位の出力電圧になる。 x10以上だとレベルは高くなるが、信号がだらけるので、x10辺りが限界。 フォトトラは遅いので(規格上は 負荷抵抗100Ω、電圧5Vで応答時間は10uS、 実際は負荷抵抗はもっと多きはずなのでもっと遅いと思う)) 39kHはデューティーは1:1には見えないが、立ち上がりからの1周期を測ると39kHz相当にはなっている。 これでON信号とOFF信号の時間を測ると ON時間は252uSで、 OFF時間は800uSと1840uSになっていた。フォトトラのディレーが10uSは有るだろうから 今のプログラムのON時間とOFF時間は当たらずとも遠からずのには行っている様だ。 このままで良いだろう。

  • 参考資料
    • 部品表
      (部品表はテレビ用リモコンと共通の物)
    • ガーバーファイル
      (ガーバーファイルはテレビ用リモコンの物と同じ)
      基板に関してはこのガーバーファイルを直接使う事は止めてください。
      なお 基板(生基板)は 現在の手持ち分に限り 無料で差上げます。
      こちら連絡先へメールをお送り下さい。

ホーム          カメラと写真        2021年12月11日更新 Taishi