目次
前
次
VCO動作テスト
アナログシンセサイザーで、音の周波数を変える
ためには、VCO(Voltage Controlled Oscillator)
を使います。
安価に入手できるVCOのICに、NE555があります。
次のようにして使います。
CVOUTに電圧を与えると、対応した周波数の
発振をするので、VCOとして使えます。
IchigoJamでは、可変の電圧出力ができないので
専用D/A変換器であるMAX525を使います。
MAX525とNE555を接続して、VCOの動作テストが
できるようにしていきます。
NE555の基板は、以下。
MAX525とIchigoJamの接続は、次のようにします。
MAX525に、必要な情報を与えるためには、次の
タイミングチャートに相当する信号線の変化を
させればよいとなっています。
サブルーチンを利用して、上のタイミングチャートで
16ビットの情報を与えます。
300 ' MAX525 control
310 LET B,[0]
320 OUT 3,0
330 FOR X=1 TO 16
340 LET A,B & #8000 : LET A,(A >> 15)
350 OUT 1,A : OUT 2,1 : OUT 2,0
360 LET B,(B << 1)
370 NEXT
380 OUT 3,1
390 RTN
出力したい16ビットの値を、配列の[0]に入れて
サブルーチンを呼び出します。
MAX525を動かすためには、初期化が必要で
D/A変換器から電圧を出力するときにも細工
をしないと駄目です。
16ビットの内容を、どう設定するのかは
次の表を参照。
初期化には、16進数で#4000を送信すればよいと
わかります。また、チャネル0へとD/A変換値を
出力するには、#3000にD/A変換値を加えた値を
求めて与えるとなります。
初期化では、次のようにして対応できます。
100 LET [0],#4000
110 GOSUB 300
NE555は、DISCHに電源電圧の2/3以上の値を
与えると、発振します。
NE555の電源電圧を5Vとすると、2V以上の
電圧を与えられると、発振周波数を変える
ことが可能。
MAX525は、12ビットの分解能をもつので1を設定すると
(5/4096)Vの値になります。これが2Vになるように値を
かけて計算しておきましょう。
N*(5/4096)=2 より N=8192/5 で 1638 程度。
NE555の電源電圧が5Vのときには、最大5Vになるように
上限が必要です。
N*(5/4096)=5 より N=4096 で 4000 程度。
配列[0]に、1700から4000までの値を格納して、音が
どう出てくるのかを、実験してみます。
100 ' test VCO
110 OUT 3,1
120 LET [0],#4000 : GOSUB 300
130 GOSUB 200
150 LET [0],#3000 : GOSUB 300
160 ? "exit"
170 END
200 ' play sound
210 FOR I=0 TO 23
220 LET J,#3000 + 1700 + 100*I
230 LET [0],J : GOSUB 300
240 WAIT 120
250 NEXT
260 RTN
300 ' MAX525 control
310 LET B,[0]
320 OUT 3,0
330 FOR X=1 TO 16
340 LET A,B & #8000 : LET A,(A >> 15)
350 OUT 1,A : OUT 2,1 : OUT 2,0
360 LET B,(B << 1)
370 NEXT
380 OUT 3,1
390 RTN
これで、スピーカから出力される音の周波数が
高くなっていくのがわかります。
効果音を出したいときには、配列に値を入れて
おいて、サブルーチンを呼び出す仕様に設定と
なります。
100 ' sound effect
110 OUT 3,1
120 LET [0],#4000 : GOSUB 300
130 LET [1],2000,1800,1900,2400
140 LET [5],2800,3000,2200,2100
150 FOR I=1 TO 8
160 LET [0],[I]+#3000
170 GOSUB 300
180 WAIT 120
190 NEXT
200 LET [0],#3000 : GOSUB 300
210 ? "exit"
300 ' MAX525 control
310 LET B,[0]
320 OUT 3,0
330 FOR X=1 TO 16
340 LET A,B & #8000 : LET A,(A >> 15)
350 OUT 1,A : OUT 2,1 : OUT 2,0
360 LET B,(B << 1)
370 NEXT
380 OUT 3,1
390 RTN
ラベルを利用すると、もう少し見やすくなります。
100 ' sound effect
110 OUT 3,1
120 LET [0],#4000 : GSB @MCON
130 LET [1],2000,1800,1900,2400
140 LET [5],2800,3000,2200,2100
150 FOR I=1 TO 8
160 LET [0],[I]+#3000
170 GSB @MCON
180 WAIT 120
190 NEXT
200 LET [0],#3000 : GSB @MCON
210 ? "exit"
300 @MCON
310 LET B,[0]
320 OUT 3,0
330 FOR X=1 TO 16
340 LET A,B & #8000 : LET A,(A >> 15)
350 OUT 1,A : OUT 2,1 : OUT 2,0
360 LET B,(B << 1)
370 NEXT
380 OUT 3,1
390 RTN
目次
前
次