● 実験テーマ16

「PICによる、チャイム音発生基板の製作日記」
(山名宏治氏の製作記事による製作と動作確認まで)

■ 2012.04.09
  ・思いつくまま計画案を・・・

  <このテーマにする理由等>
   @ 以前から、PICのみで動く、音楽関係のハードをやりたかった。
   A FM音源を使った何かを作りたかった。
   B だいぶ前に購入した技術雑誌「ハードウエア・デザイン・シリーズ15/PICマイコン活用ハンドブック」の中の、
     山名宏治氏の製作記事に、
「PIC16C84によるチャイム音の演奏」というのがあった。
     そこに、色々と工夫が凝らされている、エンベロープ制御回路で音作りしている部分があり、非常に興味を持った。
   C 自作オシロのVUPも済んだので、ちょっと変わった波形取りをしてみたい気持ちもある・・・

  <この記事を参考に製作するに当っての問題点・心配点>
   @ PIC16C84が、MPLABでコンパイルできるか?
    → C30では当然出来ない。
    → 次の方法で可能
      MPASMWINを起動しソースファイルと、使用デバイスを指定し、アセンブル・ボタンを押せば、アセンブルが行
      われエラーが無ければ、HEXファイルが生成される。
      (MPASMWINは、C30をインストールした時に既に、インストール済)

   A PIC16C84が、PICkit2で、HEXファイルを焼けるか?
    → このMPUには、PRGピンが用意されてないので焼けない。

   B プログラムがアセンブラで書かれている。
    → 仕事でアセンブラ経験はあるが、古いインテル80系及び、ザイログZ80系のASMで、PICのASMは未経験 
      曲変更・音階追加などの修正が学習のいいチャンスなので挑戦してみる。

   C だいたいPIC16C84自体古くて、秋月にもマルツにも在庫無し。
    → この代替として、殆ど仕様互換の改良版
「PIC16F84」がある。
      だが、PIKkit2では書込みできない。
    → これを書込めるライターキットが秋月より、5000円で販売されている
      (また」それには、お試し用に、当該デバイスと10Mのセラロックが付属されている。)

    → また、作者の方で、PIC16F84用のHEXファイルが提供されているので
      同じ物は、製作可能。
      (CHIMEF.HEX(HEX形式のオブジェクト・ファイル PIC16F84用)

    → 曲の追加などの時、MPASMが必要になる。

   <今回製作する、PIC_チャイム音発生基板の機能ブロック図>
   ・作者(山名宏治氏)のWEBページには、本テーマは公開されておらず、本での公開のみなので、回路図を
    ここに公開することはしません。
    動作原理の詳細については、作者の本の記事をご覧ください。
    ここでは、本を見て、私なりに整理した細かめの機能ブロック図を載せておきます。
    簡単に説明すると、音の元は、PICより矩形波を発生し、これを使います。音程は、ド・ミ・ソのみですが、
    オクターブ上のド・ミ・ソも発音可能になっています。
    これだけでは、リード系の音しか出ないので、チャイム音のような減衰振動波を得るため、CRの充放電カーブ
    を利用し、これでエンベロープ制御をし、矩形波を変調しています。
    エンベロープ制御の中枢には、電流作動型のOPアンプが使われています。
    矩形波の他に、UP/DWNの制御信号が用意され、これによって、波形の立上り時間と、発音時間等を制御
    しています。

 


■ 2012.04.10
  ・シリアル制御IF(RS232C)からの、コマンド制御の確認用冶具としてPIC24F+8bit_DIP_SWを使用した、
   任意コード発生装置を作成してみることにする.。
   → PCのKeyボードから与えられるコードには制限があるため別途チェック冶具が必要

  ・パラレルIFも切替で選択できるようになっているが、音出しの実験だけなので、パラレルIFは省略し、
   シリアル制御のみとする。

  <進め方案>
   @ 秋月のライタキット+15V_ACアダプター:計5600円を手配する。
   A 本体の部品表・見積り作成
   B 部品手配(ライタを含め一括手配)
   C とりあえず、自分用の回路図を、水魚堂で作成
   D 任意コード発生冶具を作成
   E 部材が届いたら、ユニバーサル基板製作に入る。
   F 実験開始

  ・PICライタ・キット含め、部品手配済(秋月分+マルツ分)


■ 2012.04.11
  ・水魚堂にて、回路図作成開始


■ 2012.04.12
  ・秋月分の部品到着
  ・自分用回路図作成終了

  ・任意コード発生冶具検討
  → PIC24Fトレーニング基板使用
    8bit_DIP_SWは手持ちの、10bit_DIP_SW使用
    プルアップは、PIC内蔵プルアップを設定して使用
  ※ この冶具を作る為には、ストレート・ピン・ソケットが必要なのでマルツに追加の問合せメールを出した(済)


■ 2012.04.13
  ・マルツ追加OKの返事
    ・任意コード発生冶具のソフト作成+コンパイル済
  → ピン・ソケットが未着なので、8bit_DIP_SWを実装できない。
    そこで、簡易的に、クリップ・ストラップにて40H→"@"と、41H→"A"を送出して、TERA_TEARMにて
    送信キャラクタが正しいか確認した。
  → 若干の手直し(チャタリング考慮など)はあったが、難なくOKになる。

  ※ 以下に、任意コード発生冶具のブロック図と、Cソースへのリンクを示しました。

  → 冶具の、Cソースはこちらからどうぞ:rs232c_code_gene.C


■ 2012.04.14
  ・午前中で秋月のライタ・キットを組上げた。
  → IC未実装にて、電源確認OK(Vcc=5.10V, Vpp=12.78V)


■ 2012.04.15
  ・XPの、DOS窓にて、DOS版ライタ・ソフト「PICW.EXE」を実行し「接続OK」を確認
    (この前に、純粋なDOS画面でも確認を試みたが、旧マシンが調子悪く断念)


■ 2012.04.16
  ・今回の、PIC16F84Aは初めて使うMPUなので、ターゲットボードのハードチェックも含め、簡単なPICのアセンブラ
   プログラムを組んでみようと思い立つ。
  → 
最初に作るアセンブラ・プログラム(IO_TEST.ASM)
   <動作仕様>
    SW1(RB1)_ON→ LED1(RA0)_ON
    SW1(RB1)_OFF→ LED1(RA0)_OFF
    このような、超単純な動作
    尚、ターゲットボードは、チャイム音発生基板を予定

  ・ソースを作成し、MPASMにてアセンブルしてみた。
  <結果>
   @ ソースを置く場所(ディレクトリ・パス)が問題らしくソースファイルを指定して、アセンブルを開始する途端に
      「ディレクトリ・パスが長すぎる・・」旨の警告が出てアセンブル開始が拒否されてしまった。
   → 当所、MPASMが置かれている場所(WIN\program_file\Microchip\・・・)下に、ソースを置いていたが、これを
      C:\work_asm\IO_TEST_PIC16F64A\の下に置くようにしたら、無事アセンブルが開始された。

   A 開始されたが、次のエラーが発生

           

     Error[113] C:\WORK_ASM\IO_TEST_PIC16F84A\IO_TEST.ASM 16 : Symbol not previously defined (OxFF)
     → どうも、OxFFが、前もって定義されてない旨のエラーらしい。
       よくよく、見ると、頭の、0でなければいけないところ、アルファベットの'O'になっているではないか??
        (これは、その時は気が付かずこれを、H'FF'と修正して、エラーを無くしたが・・・そんな事だったとは・・しかし、WINの
         メモ帳の字体で見ると、その変化はよく見ないと判らないほど微妙である。)
       エラーを無くした後のアセンブル結果のダイアログを下に示す。

           

  ・Windows MEの PCにも、WIN版の「PICライタ・ソフト」をインストールしIO_TEST.HEXを書込んでみた。
   → 秋月ライタに付属の、「PIC16F84A」をソケットに差込みプログラムするが、何故か、「消去されていません・・上書き
     しますか」のメッセージダイアログが出現。空の、ROMのはずなのに??(リードしてみると、オール0)
     無視して、書込むと、無事書込み成功
     ちなみに、CHECK SUM=263D
   → 後でハードが出来たら、動作確認してみる。


■ 2012.04.17
  ・当初は、チャイム音発生基板を、PIC16F84_トレーニング用と兼用にしようと思っていたが、手持ちの部品だけで、何とか、
       トレーニング基板を作れそうなので急遽、製作することにした。
   (ネックになる部品としては、18pinICソケットがあったが、大昔、BASICシステムを自作した時の、24pinICソケットが、
    あったので、それを改造して間に合わせた。)
   → 2H余りで、製作完了

  ・本日、マルツ分の部品も到着した。


■ 2012.04.18
  ・部品は揃ったが、予めアセンブラで簡単なプログラム(SW_ON→LED_ON)を組んであったので、その動作確認をしたく、
      IO冶具等の整備をすることにした。

  ・製作済みの、トレーニング基板の、ハード・チェックを行った。
  → PIC実装前の電源チェック→ 特に問題なし(Vcc=5.10V)

  ・HEXを焼いたPICを実装し、動作確認を行う。
   → SWを押しても、LED点灯せず。
   → ソースを見ると、LEDの点灯論理が逆(負論理のところ正論理)になっていることが判り、修正したが、それでも駄目
   → よくよく考えると、C言語でプログラミングしていた時の、コンフィグワードの設定を、していないではないか・・・
     (PIC16Fでは、コンフィギュレ-ション ヒュ-ズと表現しているようである。)
   → プログラムの最後に、以下を記述(頭でも、たぶん構わない・・)

   ;************** コンフィギュレ-ション ヒュ-ズ設定 *************
   ;コ-ドプロテクション OFF/パワ-アップタイマ イネ-ブル
   ;WDT ディスエ-ブル/HS オシレ-タ
   ;
   __CONFIG 03FF2H ;PIC16F84対応
   ;

   → これを追記して、HEXを焼き動作確認したら、OKとなった。

  ※ 以下に、PICライタのコントロール画面での、Config Wordの表示と、トレーニング基板で動作確認している所を
    示しておきました。またトレーニング基板の回路図と、Cソースのリンクを貼っておきました。

  ・PIC16F84A_トレーニング基板の回路図は、こちらから→ 「PIC16F84A_トレーニング基板の回路図」
  ・簡単なIO_TESTのアセンブラソースは、こちらから→ IO_TEST.ASM


■ 2012.04.19〜2012.04.20
  ・いろいろ準備で、横道にそれてしまったが、ようやく本題のチャイム音発生基板の製作が始まった。


■ 2012.04.21
  ・ユニバーサル基板実装上がり。
   なかなか、アナログ部の部品点数が多く、配置を考えながらのハンダ作業が大変で、2日掛かってしまった。

  ・実装上がり後のチェック
   @ IC未実装時の電源電圧チェック
     MPU: 5V OK(約5.5V)
     M3900: 5V OK(約5.5V)
     LM386: 5V OK(約5.5V)
     MPU MCLRピン OK

   A IC実装時の電源電圧チェック
     MPU他 全てOK(約5.3V)

   B 山名氏から提供されている、CHIME.HEXをそのまま焼いてみる。
    → 電源ON時、「ピコッ」という起動音が出力されるか?
    → 問題なく出力された。
      ただ、VR1_MAXでやや音量が小さいか?
      (配線は一発OKのようだ)

   C PIC24F_コード発生時具を接続して、登録されている曲(全31曲)
     が全て再生できるか?
    → 再生できた
    → 送出コード0と1は、同じ音(ピコッ)であった
    → 曲番2〜20までは、山名氏の記事に記載されている<表1>登録チャイム音(1部のみ)と同じこと
      を確認した。
      21以降もメロディぽい音が登録されていた。

   D オクターブ・コマンドの確認
    → 'o'で、オクターブ上/ 'O'で、通常動作を確認


■ 2012.04.21〜2012.05.25
  ※ この約1ヶ月間に実験したことの、まとめとして、以下の3つの実験資料(図表等)を公開します。
   @ 
EEPROMに登録されている、全31曲分の、WAVデータの取込(最終的にMP3ファイルにミックスダウンしました。)
    ・ローランドのSC-D70により、基板のSP出力をサンプルし、これをWAVデータとして取込、MP3にミックスダウンして
     登録曲の再生及び、波形評価を行いました。
     波形評価には、時間軸の測定が必要なので、波形編集ソフト(Cool_Edit_Pro)を使って測定を行いました。

    ・また、曲番1〜31を連続再生するに当り、任意コード発生時冶具のコード設定を、0xFFにした時、DEMO演奏
     ということで、曲番コードを適当なインターバルで連続送出するように、冶具のソフトをいじりました。

    ♪♪→ DEMO演奏を録音した、MP3ファイルはこちらからどうぞ: PIC_CHIME_DEMO.MP3

   A 曲登録と波形一覧を図表にまとめました。
    
・曲番1〜22までについて、エンベロープ制御タイミング(UP*/DWN*/CK*/SP出力)を、SC-D70に取込み
     実測データとして手書きでまとめました。
     (音声用のサンプラーなので、直流分はカットされてしまい、矩形波は微分波形のようになり正確さには欠けますが
      タイミングを把握するには問題ありません。)
     尚、SP出力波形については、MIDI-WAVソフト(Cake Walk Home Studio 9)の波形プレビュー画面を切り取り貼り付
     けておきました。

     ※ 曲登録と波形一覧の図表へのリンクはこちらからどうぞ: 曲登録と波形一覧.htm

   B エンベロープ制御シュミレーション一覧を図表にまとめました。
    
・CR充放電波形をモニタしようと思ったのですが、自作オシロの簡易プローブでは、プローブ容量が影響して音質が変わって
     しまい、正しい測定ができないので、シュミレーションにて、CR充放電(エンベロープ制御の1部ですが・・・)波形を、
     それぞれの、UP/DWNタイミング(動作モード)で確認してみました。
     これを見ると、制御のしくみが少し理解できると思います。

    ・シュミレーションには、仕事でも時々使っていた、気楽に工作感覚で使える、マイクロネット社の
     「Circuit Viewer V2.6」を使用しました。

    ※ エンベロープ制御シュミレーション一覧の図表へのリンクはこちらからどうぞ: エンベロープ制御シュミレーション一覧.htm


■ 2012.06.01
  ・追試:ADSR典型波を実機で出力してみたい。
   (シュミレーションのようになるかを確認)
   → ROMデータでは無理(10mS単位で、コントロールしているため、10m以下のディケイは今のアルゴリズムでは実現できない。
      かといって、asmプログラムを解析する気にはなれない。
   → そこで、ADSR出力するための、コントロール信号(UP1,DNW1,CK1)のタイミングを、Cで書いてみて、その出力を実験基板の、
      チャイム音発生ブロックに突っ込もうと思う。
   ※ つまりは別PICで簡易パターンジェネレータのようなものを作ればよいはず。
      5V IFなので、dsPIC30Fトレ基板を使うことにした。以下に、接続ブロック図と、実験風景の写真を示した。


■ 2012.06.02
  ・極く簡単な、Cソースを作成
   電源ONで、タイミング・パターンを無限に繰返すだけのプログラムにした。


■ 2012.06.04
  ・追試の結果は別リンクの図表を参照してください→ ADSR典型波出力実験結果図表.htm
   尚、制御信号のパルス波が正しく表示されてませんが、これは観測に、ソフト・オシロ2を使用している為です。
   ソフト・オシロ2は、DCモードには対応していません。


← 実験テーマ1に戻る   TOP PAGEに戻る   実験テーマ17へ →