電子楽器の夢をみるのか -4ページ目

電子楽器の夢をみるのか

電子楽器製作をつづる。

ちょっと久々に本編(?)を進めます。
前回、前々回により、YMZ294の気持ちがわかりました。早速音を出してみます。
その前に回路はこんな感じにしました。YMZ294のD0~7はtiny2313のポートB0~7に接続しています。D0はB0、D1はB1・・・・とそれぞれ接続します。また、/WRはtiny2313のPD0、/CSはPD1、A0はPD2、/ICはPD3に接続しています。

書いたプログラムがこちら。ちなみにC言語で書かれてます。

/*
*YMZ294のテストその1    単音を出力するだけ    22/04/2014
*Author: Longtail
*対応ポート
*Tiny2313            YMZ294
*PB0~7                D0~7
*PD0                /WR
*PD1                /CS
*PD2                A0
*PD3                /IC
*/
#define    F_CPU    1000000UL    // 1MHz
#include <util/delay.h>            // wait関数(_delay)を使えるようにする
#include <avr/io.h>

unsigned char ADR=0,DAT=0;        //変数の定義 ADR=アドレス DAT=データ
void InitHard(void);                //ポートの初期化,YMZ294の音量設定
void Output(unsigned char,unsigned char);                //アドレス・データをYMZ294に渡すためのサブルーチン

int main(void){                    //メイン
    InitHard();
    Output(0x01,0x02);//Ach A(440Hz)に設定
    Output(0x00,0x38);
    while(1){}
}
void InitHard(void) {            //ポート初期設定
    DDRB=0xff;                    //PORTB出力
    PORTB=0;                    //0を出力
    DDRD=0xff;                    //PORTD出力
    PORTD=0x08;                    //PD3以外0を出力

    _delay_ms(100);                //YMZ294が安定するまで待つ.
    Output(0x07,0x3e);            //ミキサー設定 Achのみ出力
    Output(0x08,0x0f);            //Ach 音量Max
}
void Output(unsigned char ADR,unsigned char DAT){
    PORTD=0x08;                   
    PORTB=ADR;                    //アドレスの出力
    PORTD=0x0b;
    PORTD=0x0c;
    PORTB=DAT;                    //データの出力
    PORTD=0x0f;
    PORTD=0x08;
}

と、まぁこんな感じ。とりあえずポイントはここ
void Output(unsigned char ADR,unsigned char DAT)の部分
ここでデータとアドレスの出力をしています。前回(YMZ294をAVRで動かす(1.5))で書いた内容をそのまま書いてます。ここさえしっかりしてればYMZ294に値を出力できます。

このプログラムを動かしてみると・・・音がでました。ラ(A=440Hz)の音です。出したい音を指定するのが結構面倒です。配列を使う必要がある?
ちなみに最初の数回は音がでませんでした。その原因はここ
    Output(0x07,0x3e);            //ミキサー設定 Achのみ出力
    Output(0x08,0x0f);            //Ach 音量はEGに依存

この二つの指定を間違えると全く音がでません。単音を出すだけならこのままでOK。EGを使う時はレジスタ$08のデータを0x1fに設定し、$0B~0Dも設定する必要があります。
レジスタに値をいろいろ入れると結構遊べます。とりあえず続く。

14/05/18 書き間違いを訂正。ポートAをすべてポートDに正しく書き直しました。





閑話休題
書いてるブログに物足りなさがありました。
そう、絵です。
絵があればちょっとは見栄えが良くなるかも。と、いうわけで買ってきました。ペンタブ

上の絵はためしに描いたもの。今後はペンタブを使ってお絵かきしつつ、ブログを進められたらいいなと思ってます。

P.S.前回のブログの記事を修正しました。早速絵が入ってます。


前回の話に書き忘れたことを一つ。
YMZ294のアドレスとデータの指定の話。YMZ294にはアドレスを入れるポート(場所)とデータを入れるポートは別々ではありません。一つのポートでアドレスとデータのやり取りをします。
何らかの方法でアドレスとデータを区別する必要があります。そのために/WR,/CS,A0の端子を使います。この端子にHを入れるかLを入れるか分けることができます。

書き方はこんな感じ
アドレスの場合
①/WR,/CS,A0すべてLにする。
②①の状態でアドレスの値をポートに入れる。

これだけでばっちぐー(古い?)。続けてデータの場合
③/WR,/CSをHにA0をLにする。
④/WR,/CSをLにA0をHにする。
⑤④の状態でデータの値をポートに入れる。
⑥/WR,/CS,A0をHにする。
⑦/WR,/CS,A0をLにする。
これでデータの値をYMZ294に書き込むことができました( `・ω・´ )マイコンに上記の動作をさせてあげればYMZ294を動かすことができます。
ちょっと気になるのが/WR,/CSの動作が全く同じであること。それだったらピンを一つにすればいいのに。う~ん謎。さすがにこの気持ちは分からなかった(´・ω・`)

すごくどうでもいいけどこのブログにちょこちょこと説明用のイラストが欲しいところ。もちろん自分で描きます。ペンタブレットほしいなぁ。
とりあえずつづく

14/05/04ちょこっと訂正。絵もつけたよ
とりあえずYMZ294を動かしてみます。
だけどYMZ294を動かすにはYMZ294の気持ちが分からないといけません。
と、言う訳でデータシート、要は説明書ですね、これをじっくり見ます。これで気持ちが分かります。
まずおおまかな役割。どこをどうしたら音を出してくれるのか。

YMZ294にはレジスタと呼ばれる箱があります。その箱に値(\あたい/ではない)を入れてあげると、出す音の高さ、音量、音の立ち上がり、立ち下りを設定することができます。

レジスタの数は13個(のちのち説明します)あり、各レジスタとも役割が違います。レジスタにはどこにあるか分かるように住所が割り振られています。これをアドレスといいます。アドレスを指定することでどのレジスタに値を入れたいか決めることができます。

つづいて各レジスタの説明。
レジスタ$00と$01は音の高さを決定します。ここに値をいれることでさまざまな高さの音をだすことができます。YMZ294は同時に3音だせますので同様に$02と$03,$04と$05に値をいれてあげると3音動かすことができます。
レジスタ$06はノイズの音の高さ。上と同様です。
レジスタ$07はミキサーどの音を出すか決定するとこ。ここを忘れると音の高さを設定してもまったく音がでない(´・ω・`)
レジスタ$08から$0Aは音量の設定。ここの設定で一定の音の大きさをだすか、後述するエンペローブジェネレータで音の大きさを時々刻々と変化させるか決めます。
レジスタ$0Bと$0Cはおいといて先に$0Dを説明。先ほど書いたエンペローブジェネレータ(略してEG)の設定。ここを設定すると音がだんだん大きくできたりその逆もできたりといろいろできます。
最後にレジスタ$0Bと$0CはそのEGをどれくらいの速さで動かすか。音の大きさの変化を早くしたり遅くしたりできます。
レジスタの説明が結構適当だけどデータシートをじっくりよめばわかります。
これをもとにマイコンにプログラムを書いてきます。使用するマイコンはTiny2313。
次回はプログラムを書きます。つづく

ちょっと寄り道。
さっそくFM音源!と行きたいとこですが、FM音源ICを使う際にマイコンが必要です。
実をいうとマイコンに自信がない(´・ω・`)
マイコンとICの制御の勉強と言う訳で音源IC「YMZ294」を使おうと思います。
そのYMZ294ってのがこれ

PSG(Programmable Sound Generator)と呼ばれるもの。
要はゲームボーイやファミコンのようなピコピコサウンドの音を出してくれるものです。
(ただし音色は矩形波とノイズのみ。ファミコンとかは矩形波(4パターン)と三角波、ノイズと6つあります。)
ちなみにこのICもYAMAHA製、FM音源ICと違って秋月電子通商で購入できます。ホビー向けです。
とりあえずこれとマイコンを使って電子楽器を作ろうかと思います。
結構長くなりそうな寄り道です。つづく