まだ思考実験の段階だけど、先に紹介したLCDドライブサブルーチンを含んだ、サインスマートAD9851使用DDSモジュールコントロールプログラム。容量の関係で1行8文字表示のみ。
現状ではビデオ出力をONにしたままだけど、これはOFFにした場合LCDに正常に表示できるかどうか不明なためで、もし可能ならビデオ出力はOFFにしたい。
変数の説明
A,B,C:AD9851に送るデータ
D:入力キー
K,L:表示用周波数カウンタ
M,I:サブルーチン渡しビットデータ、カウンタ
J:ビットデータ出力用カウンタ
キー入力は"O"と"P"をINKEY()で処理する様になってるけど、これはin(n)に変更予定。そうしないと組み込み用途にならないからね。
10 'DDS-LCD
500 A=0:B=5079:C=8010:CLS
501 OUT4,1:OUT4,0:OUT2,1:OUT2,0:OUT3,1:OUT3,0
502 K=7000:L=0
505 GOSUB2000:GOSUB800
510 D=INKEY():IF D=0 THEN GOTO 510
530 IFD=79GOSUB1000:GOSUB2000:GOTO510
535 IFD=80GOSUB1500:GOSUB2000:GOTO 510
550 GOTO510
800 POKE#700,64,0,2,#C0,57,17,#70,86,#6C,56,12
820 IFI2CW(62,#701,1,#704,5)?"E"
830 WAIT12
840 IFI2CW(62,#701,1,#709,2)?"E"
900 IFI2CW(62,#701,1,#702,1)+I2CW(62,#700,1,#900,8)?"E"
910 RETURN
1000 IFC<32527C=C+239
1010 IFC>32528ANDB<32767B=B+1
1020 IFC>32528ANDB>=32767A=A+1:B=0
1030 IFC>32528C=C-32528
1040 L=L+1:IFL>99K=K+1:L=0
1050 RETURN
1500 IFC>=239C=C-239
1510 IFC<239ANDB>1B=B-1
1520 IFC<239ANDB<1A=A-1:B=32767
1540 IFL>0L=L-1:RETURN
1550 IFL=0K=K-1:L=99
1560 RETURN
2000 LOCATE0,0:?K;".";L/10;L%10
2007 OUT3,0:OUT2,0
2010 M=C:I=15:GOSUB3000
2011 M=B:I=15:GOSUB3000
2012 M=A:I=2:GOSUB3000
2013 M=1:I=8:GOSUB3000
2015 OUT3,1:OUT3,0
2017 GOSUB900
2020 RETURN
3000 FORJ=1TOI:OUT1,0
3020 IFM&1=1OUT1,1
3030 OUT2,1:OUT2,0:M=M>>1:NEXT:RETURN
OK
だいぶ切りつめたんだけど、ここまでスペースを切りつめてまともに動くのかどうか?一応Syntax Errorは出てないようだけど…
空きが100バイトを切ってるので、現状では10Hz単位での+/-のみ。本当はキーを四つ付けて1KHzの+/-も付ける予定だったけど、LCDドライブサブルーチンを削らないとだめっぽい。おまけに送受信で455KHzか10.7MHzのオフセットを付けるのも無理っぽい。
符号付き16bit整数しか扱えないという制約から、1stepを10Hzと決めうちしたカウンターを別に用意。15bitの整数を10進数に変換するのを諦めました。
ここまでやって『やっぱり1KBじゃ無理でした』と認めるのも癪だなぁ。
現状ではビデオ出力をONにしたままだけど、これはOFFにした場合LCDに正常に表示できるかどうか不明なためで、もし可能ならビデオ出力はOFFにしたい。
変数の説明
A,B,C:AD9851に送るデータ
D:入力キー
K,L:表示用周波数カウンタ
M,I:サブルーチン渡しビットデータ、カウンタ
J:ビットデータ出力用カウンタ
キー入力は"O"と"P"をINKEY()で処理する様になってるけど、これはin(n)に変更予定。そうしないと組み込み用途にならないからね。
10 'DDS-LCD
500 A=0:B=5079:C=8010:CLS
501 OUT4,1:OUT4,0:OUT2,1:OUT2,0:OUT3,1:OUT3,0
502 K=7000:L=0
505 GOSUB2000:GOSUB800
510 D=INKEY():IF D=0 THEN GOTO 510
530 IFD=79GOSUB1000:GOSUB2000:GOTO510
535 IFD=80GOSUB1500:GOSUB2000:GOTO 510
550 GOTO510
800 POKE#700,64,0,2,#C0,57,17,#70,86,#6C,56,12
820 IFI2CW(62,#701,1,#704,5)?"E"
830 WAIT12
840 IFI2CW(62,#701,1,#709,2)?"E"
900 IFI2CW(62,#701,1,#702,1)+I2CW(62,#700,1,#900,8)?"E"
910 RETURN
1000 IFC<32527C=C+239
1010 IFC>32528ANDB<32767B=B+1
1020 IFC>32528ANDB>=32767A=A+1:B=0
1030 IFC>32528C=C-32528
1040 L=L+1:IFL>99K=K+1:L=0
1050 RETURN
1500 IFC>=239C=C-239
1510 IFC<239ANDB>1B=B-1
1520 IFC<239ANDB<1A=A-1:B=32767
1540 IFL>0L=L-1:RETURN
1550 IFL=0K=K-1:L=99
1560 RETURN
2000 LOCATE0,0:?K;".";L/10;L%10
2007 OUT3,0:OUT2,0
2010 M=C:I=15:GOSUB3000
2011 M=B:I=15:GOSUB3000
2012 M=A:I=2:GOSUB3000
2013 M=1:I=8:GOSUB3000
2015 OUT3,1:OUT3,0
2017 GOSUB900
2020 RETURN
3000 FORJ=1TOI:OUT1,0
3020 IFM&1=1OUT1,1
3030 OUT2,1:OUT2,0:M=M>>1:NEXT:RETURN
OK
だいぶ切りつめたんだけど、ここまでスペースを切りつめてまともに動くのかどうか?一応Syntax Errorは出てないようだけど…
空きが100バイトを切ってるので、現状では10Hz単位での+/-のみ。本当はキーを四つ付けて1KHzの+/-も付ける予定だったけど、LCDドライブサブルーチンを削らないとだめっぽい。おまけに送受信で455KHzか10.7MHzのオフセットを付けるのも無理っぽい。
符号付き16bit整数しか扱えないという制約から、1stepを10Hzと決めうちしたカウンターを別に用意。15bitの整数を10進数に変換するのを諦めました。
ここまでやって『やっぱり1KBじゃ無理でした』と認めるのも癪だなぁ。