電子工作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 |
※ノートナンバーとは?
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)
|
−
|
−
|
−
|
M
|
L3
|
L2
|
L1
|
L0
|
$09(チャネルB)
|
−
|
−
|
−
|
M
|
L3
|
L2
|
L1
|
L0
|
$0A(チャネルC)
|
−
|
−
|
−
|
M
|
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
|