電子工作etc


■音源LSI(YMZ294)
  ★概要
    YAMAHAのPSG音源LSI(YMZ294)が、4MHzのクリスタルオシレータ付きで、手頃な価格で販売されていま
    したので、早速購入し評価してみることにしました。  ※“かえるの歌”を演奏させてみました。

     ※PSGは、Programmable Sound Generator(プログラマブル・サウンド・ジェネレータ)の略です。
     ※YAMAHAでは、Software-Controlled Sound Generator (SSG) と呼ばれているようです。

    <YMZ294>
     ◎概観
       

     ◎概要
       ・YMZ294はYMZ2149相当の音源LSIです。
       ・3系列の矩形波発生器と1系列のノイズ発生器、エンベロープ発生器を内蔵しており、メロディ音効果音
        の発音が可能です。

     ◎特長
       ・YM2149とソフトウエアコンパチブルの矩形波3音+ノイズ1音の音源
       ・5ビットDACを3個内臓し、3音ミキシング出力
       ・CS、WR制御信号と8ビットデータバスによる汎用CPUインタフェース
       ・8オクターブの広い発音域
       ・エンベロープ発生器による滑らかな減衰感
       ・マスタークロックは、4MHzまたは8MHzから選択
       ・5V単一電源

     ◎機能
       全ての機能は、内臓レジスタ($00〜$0D)によって制御されます。
       ・楽音発生器
         各チャネル(A、B、C)毎に、周波数の異なった矩形波を発生させます。
       ・ノイズ発生器
         擬似ランダム波を発生します。(周波数可変)
       ・ミキサー
         各チャネルの楽音とノイズの出力をミキシングします。
       ・音量コントロール
         各チャネル毎に、一定音量または可変音量を与えます。
       ・エンベロープ発生器
         各種のエンベロープを発生させます。
       ・D/Aコンバータ
         ミキシングされた音声信号をアナログ出力します。

  ★動作原理
    内臓レジスタ($00〜$0D)にデータを書き込むことにより全てを制御します。

    YMZ294には、アドレスバスと、データバスがあり、各バスは、A0ピンで指定します。
      ・データバス → A0ピン(HI)
      ・アドレスバス → A0ピン(LOW)
    アドレスバスで、どのレジスタ($00〜$0D)かを指定し、その後に、データバスで、レジスタに書き込む内容を
    指定します。

    <アドレスバスに書き込むときの手順>
      @A0ピン→“0”
      ACSピン→“0”
      BWRピン→“0”
      CD0〜D7にデータをセット(レジスタを指定(アドレス)するためのデータ)
      DCSピン→“1”
      EWRピン→“1”

    <データバスに書き込むときの手順>
      @A0ピン→“1”
      ACSピン→“0”
      BWRピン→“0”
      CD0〜D7にデータをセット(レジスタに書き込むデータ)
      DCSピン→“1”
      EWRピン→“1”

    上記の処理(手順)を行うための関数を用意しました。アドレス(addr)とデータ(data)を引数で与えてCALL
    するだけです。
setData(unsigned short addr, unsigned short data);

    楽音(トーン)周波数を、プログラム上でいちいち設定するのは煩雑になるので、次のようなノートナンバーデータ
    のテーブルを定義し、ノートナンバーを指定するだけで楽音周波数をセットする関数を用意しました。
setTone(unsigned int i);  // i = noteNumber

const int noteNumber[] = {
15289, 14431, 13621, 12856, 12135, 11454, 10811, 10204,//0-7
9631, 9091, 8581, 8099, 7645, 7215, 6810, 6428,//8-15
6067, 5727, 5405, 5102, 4816, 4545, 4290, 4050,//16-23
3822, 3608, 3405, 3214, 3034, 2863, 2703, 2551,//24-31
2408, 2273, 2145, 2025, 1911, 1804, 1703, 1607,//32-39
1517, 1432, 1351, 1276, 1204, 1136, 1073, 1012,//40-47
956, 902, 851, 804, 758, 716, 676, 638,//48-55
602, 568, 536, 506, 478, 451, 426, 402,//56-63
379, 358, 338, 319, 301, 284, 268, 253,//64-71
239, 225, 213, 201, 190, 179, 169, 159,//72-79
150, 142, 134, 127, 119, 113, 106, 100,//80-87
95, 89, 84, 80, 75, 71, 67, 63,//88-95
60, 56, 53, 50, 47, 45, 42, 40,//96-103
38, 36, 34, 32, 30, 28, 27, 25,//104-111
24, 22, 21, 20, 19, 18, 17, 16,//112-119
15, 14, 13, 13, 12, 11, 11, 10,//120-127
0//128(off)
};

    ※ノートナンバーとは?
      MIDIで音程を表すための数字です。
      ピアノ鍵盤の中央のCを60として、そこから半音ずつ順に低音は0まで、高音は127までの各鍵盤に割り振ら
      れています。

    <レジスタの機能説明>
     ◎楽音(トーン)周波数の設定($00〜$05)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
$00(チャネルA)
TD7
TD6
TD5
TD4
TD3
TD2
TD1
TD0
$01(チャネルA)
TD11
TD10
TD9
TD8
$02(チャネルB)
TD7
TD6
TD5
TD4
TD3
TD2
TD1
TD0
$03(チャネルB)
TD11
TD10
TD9
TD8
$04(チャネルC)
TD7
TD6
TD5
TD4
TD3
TD2
TD1
TD0
$05(チャネルC)
TD11
TD10
TD9
TD8

     ◎ノイズ音周波数の設定($06)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
$06
NP4
NP3
NP2
NP1
NP0

     ◎ミキサーの設定($07)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
$07
"
 B
 A
 C
 B
 A
ノイズ
トーン

     ◎音量コントロール($08〜$0A)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
 $08(チャネルA) 
L3
L2
L1
L0
 $09(チャネルB) 
L3
L2
L1
L0
 $0A(チャネルC) 
L3
L2
L1
L0

     ◎エンベロープ周波数の設定($0B〜$0C)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
$0B
EP7 EP6 EP5 EP4 EP3 EP2 EP1 EP0
$0C
EP15 EP14 EP13 EP12 EP11 EP10 EP9 EP8

     ◎エンベロープの形状コントロール($0D)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
$0D
CONT
ATT
ALT
HOLD

  ★回路図
     

  ★プログラム
    ソースリストはここです。
    HEXリストはここです。

  ★動作確認
     
    左側から、XO(4MHz)、YMZ294、PIC18F88、LEDです。
     


電子工作etc