■ AVRのポートを使用した、メロディー音 発生器の製作 ■


 AVRマイコンのポートに、スピーカーを取り付けるだけで、メロディー音を鳴らすことができるプログラムです。
 メロディー音は、音階と音符のコードを文字列で並べることで、再生できます。
 なつかしい、NEC PC-6001の「play」命令風に作りました。
 
 また、各種センサーを取り付けることで、明るさ・温度・磁気等によって、メロディーが鳴る装置への応用が可能です。



回路の概要
 

1.電源回路
 
 ・電源電圧は、AVRマイコンに合わせて、任意の電圧で動作できます。

2.AVRとクロック
 
 ・AVRマイコンは、各種のチップに変更が可能です。
 ・AVRのクロックは、任意の周波数で動作させることができます。
  (上記回路では、8MHzの内蔵RC発振器を使用しています)
 ・AVRのクロックが低くなると、低音域での計算誤差が大きくなるので、音程のズレも大きくなって
  しまいます。

3.スピーカー
 
 ・スピーカーも特に選定条件はありませんが、スピーカーのインピーダンスによって、直列に
  入れてある抵抗値を変更して下さい。
 ・プログラムの書き込み時は、書込器によって、スピーカーを外しておかないと、書き込みが
  できない場合があります。
 
 ・方形波を音符の長さに合わせて出力しているだけなので、音質や余韻(エンベロープ)は
  変更できません。



使用前の準備
AVR ATtiny45のシステム クロックは、工場出荷時に1/8前置分周器が有効に設定されているので、これを無効にするため、AVRのヒューズ ビットを書き換える必要があります。

下記ページの書き換え方法 「6.」を、以下の様に変更して、ヒューズ ビットの書き換えを行います。

    ヒューズ ビット書き換え

 6.[ FusebitC ] の右欄 [ 0:Divide Clock by 8 Enabled ] をクリックすると、右側にプルダウン
   メニューが現れますから、 [ 1:Divide Clock by 8 Disabled ] を選択します。


プログラム  テキスト形式 ソースファイル  PtSuT45102.TXT (10KB)
 BASCOM-AVR用 ソースファイル  PtSuT45102.bas (10KB)
 インテルHEX形式 オブジェクトファイル  PtSuT45102.HEX (5KB)
 
 注意! 著作権は放棄しておりませんので、販売目的での使用は絶対にしないで下さい。

       (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)


プログラムの使用方法
 
1.動作条件の設定
 
  ・$regfile = 使用するAVRの、レジファイル名を設定して下さい。
  ・$crystal = 使用するAVRの、クロック周波数を設定して下さい
  ・Su_port Alias PINB.0 スピーカーを接続する、ポートピン名を設定して下さい。
 
  ・PORTB = &B00011110 使用しないポートは、すべてプルアップして下さい。

 
2.再生条件のプログラム
 
    '
    ' *******************
    ' * メイン ルーチン *
    ' *******************
    '
  Do
     この間に、センサーの条件判定プログラムを書き込みます。
  Restore Mu_data  '音楽のデータテーブルを指定。
  Gosub Mu_play   '音楽の再生
  Loop

  ・センサーの判定条件により、曲目を変更することができます。
   (Restore命令で、任意の曲のデーターテーブルを指定して下さい)
 
  ・メロディー再生サブルーチン [Mu_play] は、一度呼ばれると、メロディーデータの終了コードが
   あるまで再生を続けて復帰します。
  ・メロディーを中断する場合は、 [Mu_play] 内に中断用のフラグを判定する処理を、付け加えて
   下さい。

 
3.音楽 データテーブルの作り方
 
  ・データテーブルの1行の長さは、SRAMの少ないAVRマイコンに合わせて、最大40文字に
   設定してあります。
  ・SRAMの大きいチップの場合は、下記文字変数の大きさを変更することで、1行の文字数を
   大きくできます。
     Dim Mu_pldata As String * 40 ← この数値が、1行の最大文字数。

  ・テーブルの先頭には、曲全体のテンポ値を記述して下さい。
  ・テンポ値は、1分間の拍数(4分音符分)で、[4〜255]の範囲です。

  ・次に、ダブルクォーテーションマーク ["] で囲った、音階と音符のコードを記述して行きます。
 
  ・Ox = オクターブ値を設定、変更します。
    数値 [1〜7]を記述すると、そのオクターブ値に設定されます。 (O4Aで440Hz)
    [+] または [-] 記号を記述すると、現在のオクターブ値よりの増減ができます。
      (O+で1オクターブ上げる)
 
  ・音階の記述。
    C = ド , D = レ , E = ミ , F = ファ , G = ソ , A = ラ , B = シ の音程です。
    [#] = 半音上げる , [$] = 半音下げる (C# , B$)
 
  ・音階に続き、音符の長さを記述します。
    1=全音符 , 2=2分音符 , 4=4分音符 , 8=8分音符 , 16=16分音符 , 32=32分音符 , 64=64分音符
 
  ・Rx = 休符の長さを記述します。 (長さは音符と同じです)
    1=全休符 , 2=2分休符 , 4=4分休符 , 8=8分休符 , 16=16分休符 , 32=32分休符 , 64=64分休符
 
  ・Z = データの終了コード。




応用回路 (フォト・センサー) [NJL7502L]
 

  

 ・秋月電子の、照度センサー(フォト・トランジスタ) [NJL7502L] を使用し、明るさによって
  メロディーが鳴るプログラムです。
 
 ・センサーの感度は、50KΩの半固定抵抗器と、プログラム内のA/D変換値で変更します。
 
 ・明るさに応じて、奏でる曲を変えることもできます。

プログラム  テキスト形式 ソースファイル  PtSuT45phot.TXT (12KB)
 BASCOM-AVR用 ソースファイル  PtSuT45phot.bas (12KB)
 インテルHEX形式 オブジェクトファイル  PtSuT45phot.HEX (6KB)







   電子工作の部屋 Top へ 前のページへ戻る