伝助日記

2009年10月の日記

2009年10月31日(土)
シンセモドキ ADSR
2009年10月30日(金)
シンセモドキの機能
2009年10月29日(木)
ノイズ ジェネレーター
実験用USB電源ケーブル
2009年10月27日(火)
LFOの実験
2009年10月25日(日)
USBメモリー
2009年10月24日(土)
初めてのドレミファ
2009年10月23日(金)
ステップシーケンサー遊び
2009年10月21日(水)
音質の改良(ジッタ低減)
uOLED-96-G1の制御大きな..
2009年10月19日(月)
VCFの実験
2009年10月18日(日)
VCF考察
2009年10月17日(土)
OLED-96で波形表示
2009年10月15日(木)
uOLED-96-G1 奮闘中
2009年10月11日(日)
小布施でアトム
Serial OLED
2009年10月10日(土)
sparkfunより届く
2009年10月8日(木)
アナログシンセもどき
2009年10月1日(木)
電波時計が届きました
2009年10月31日(土)  シンセモドキ ADSR No.953
シンセモドキのADSRを作りました。
ADSRとLFOの計算は1ms周期で行います。
Timer2のオーバーフローを1msに設定して、割込みで1msフラグをセットして、Main Loopで1ms周期で計算しています。

さて、このTimer2の割り込みではまりました。
TM2のオーバーフローフラグTF2Hは、割込みが発生したら自動的にクリアーされると思い込んでいます。
ところが、これがクリアーされませんでした。
マニュアル見たらクリアーされないと書いてありました。

Timer0とTimer1のフラグは自動的にクリアーされていたのでTimer2も同じと思い込んでいました。
これで、1時間はまっていました。


;================================================================
; Timer2
;================================================================

INT_TM2:
CLR TF2H ;重要 必ずクリアー
SETB TM1MS ;1ms FLAG
RETI

2009年10月30日(金)  シンセモドキの機能 No.952
実験中のアナログシンセですが、「センセモドキ」と命名しました。
シンセモドキは4つのVRと4つのSWを持っています。
それでこの4つのVRとSWを4つのレイヤーとして、
16個VRと16個SWに機能拡張することと計画しています。

■シンセモドキ機能■

VR3/SW3 VR2/SW2 VR1/SW1 VR0/SW0

1 VCO/LFO VR RANGE PWM LFO MOD LOF RATE
SW WAVE GATE

2 VCF/VCA VR CUTOFF RES EG MOD VCA LEVEL
SW GATE

3 EG ADSR VR ATTACK DECAY SUSTAIN RELEACE
SW VCA GATE GATE

4 STEP SEQ VR STEP1 STEP2 STEP3 STEP4
SW PATTERN WR INC PLAY/STOP

2009年10月29日(木)  ノイズ ジェネレーター No.951
ノイズ ジェネレーターの実験です。
今回は、National Semiconductor MM5837のシミュレーションをしました。
17bitのシフトレジスターで、タップ14と17のExORをbit0へ戻します。

MM5837資料

NOISEの動画

実験ソフトはこんな感じです。

;===============================================
;Noise Gen Test
;NOISE IC MM5837 Simulation
;===============================================

NOISE:
MOV C, N17 ;N17 = Tap17
MOV A, NOISEH
JNB ACC.5, NS1 ;ACC.5 = Tap14
CPL C
NS1: ;C = TAP14 XOR TAP17
MOV A, NOISEL ;Shift 17bit
RLC A
MOV NOISEL, A
MOV A, NOISEH
RLC A
MOV NOISEH, A
MOV N17, C

MOV VCOOUT, NOISEH ;Output Noise

RET

2009年10月29日(木)  実験用USB電源ケーブル No.950
実験用にUSBから5Vがとれるケーブルを作りました。
100均で買った、USB携帯充電ケーブルを加工しただけす。
結構便利です。
早く作ればよかった。


2009年10月27日(火)  LFOの実験 No.949
LFOの実験です。

以前VB6で作った、各種テーブル作成ツールを使って符号付SINテーブルを作成。
このテーブルをDDSというアルゴリズムで参照してゆきます。
実験用のVRの値をテーブル参照用のPHASEに加算して、これをテーブル参照のアドレスとします。

実験用ソースファイルです。

最終的にはVRのカーブや可変範囲などを調整する必要があります。




2009年10月25日(日)  USBメモリー No.948
タカラトミーのトランスフォーマーのUSBメモリーが着ました。
このような付加価値の付け方が好きです。




2009年10月24日(土)  初めてのドレミファ No.947
MIDI入力を付けてみました。
マイコンのRXでMIDIを受信します。
マイコンのTXはOLED-96へデーターを送信しています。
シリアルは31.25kbpsです。
OLED-96からのACK(シリアル)は外部割込みで受けて処理しました。

MIDI入力は超簡単(手抜き)回路で、MIDI規格を無視しています。
フォトカプラーがなかったので、47kΩの抵抗1本でインターフェースしています。
回路図はこちら。

個人の実験用ということで、お許しください。

ソフトは、受信処理だけですが、基本的な処理は大体網羅できるように書きました。

だいぶ前に買ったおもちゃみたいなMIDIキーボードをつないで、ドレミファソラシドを弾いてみました。

ドレミファソラシドの動画。


2009年10月23日(金)  ステップシーケンサー遊び No.946
1チップマイコン自作シンセですが、そろそろMIDIと思い、MIDIモニターを組み込もうとOLEDへHEXを表示させようとしています。
これが思い通りに行かなくて苦戦しています。
文字を上書き表示させようと思うと、前の文字が残ったまま表示が追加されてゆきます。
ORをとっているようです。
前の文字を一度消して新しい文字を書き込む必要がありそうです。
試しに、黒色で前の文字を書き込み、白色で新しい文字を書き込むときちんと表示されます。
これはOLED-96-G1の仕様なのでしょうか。
普通に文字を表示させようとする時は使い勝手が悪いような気がします。
もう少し調べてみる必要がありそうです。

それで、ちょっとつまんなかったので、ステップシーケンサーを作って遊んでみました。
4ステップで、各ステップの音程は4個のVRで決めます。
このうち2つのVRはCOFとRESのコントロールも同時にしています。

ステップシーケンサー遊びの動画


2009年10月21日(水)  音質の改良(ジッタ低減) No.945
DAの出力にジッタが有り、音がにごっていたので改良しました。
25us(40kHz)の割り込み周期でDAに出力していますが、シリアル割込みの優先順位を上げているので、シリアル割込み処理でジッタが発生しています。
ところが、このシリアル割込みはフラグをクリアーするだけの処理なのでジッタは無視できるとおもっていました。
そこで、調べてみたら、シリアル割込みが極端に長くなっていました。
原因は、シリアル割込みフラグの処理で手抜きしていたことに気がつきました。
ここを修正して、作者の意図通りに動作しました。
ジッタが減って、音の濁りがとれてきました。

VCFの計算で、符号付加減算にリミット処理を加えました。
音が爆発しなくなりました。

VCOの波形にPWMを加えてみました。

現在のシンセのスペックです。
fs=40kHz (25us)
SYNTHの演算にかかる時間=12us
8bit符号付演算
VCO ノコギリ波、PWM
VCF 12dB/OCT COF, RES
VCA

音質改良版動画



2009年10月21日(水)  uOLED-96-G1の制御大きな間違い No.944
2009/10/15の日記で、uOLED-96-G1の制御について記述しましたが、大きな間違いがあったようです。
本日シリアル割込みを調べていたら、OLEDの制御のしかたに間違いが見つかりました。

正解:(2009/10/21追記)
1つのコマンド処理が終了すると、1つのACKが来る。
例:
■Erase Screen
TX 45h ->
<- ACK

■Draw Line
TX 4Ch ->
TX x1 ->
TX y1 ->
TX x2 ->
TX y2 ->
TX color MSB ->
TX color LSB ->
<- ACK


2009年10月19日(月)  VCFの実験 No.943
VCFの実験をしてみました。
とりあえずアルゴリズムの検証ということで8bit演算でやってみました。
ちょっと荒削れですが、COFとRESがコントロールできました。
VCFのアルゴリズムはこれで行けそうです。

VCF実験動画


2009年10月18日(日)  VCF考察 No.942
ソフトでVCFを実現するためにはアルゴリズムが重要です。
フィルター関連のアルゴリズムはここが大変参考になります。
http://www.musicdsp.org/showmany.php

今回は、State Variable Filter (Chamberlin version)を試してみたいと思います。
http://www.musicdsp.org/showone.php?id=142

私の使っているMPU(C8051F330D)は8bitなので、16bitで演算すると時間がかかりそうです。
はたして8bitMPUで実用になるでしょうか。

2009年10月17日(土)  OLED-96で波形表示 No.941
OLED-96で波形表示をしてみました。
今製作中アナログシンセもどきのDAに出力する直前のデーターを表示してみました。
ちょっとした勘違いで1時間ほどはまりましたが、一応波形表示テストが出来ました。

波形表示動画

次は、いよいよVCFの実験にかかりましょう。


2009年10月15日(木)  uOLED-96-G1 奮闘中 No.940
uOLED-96-G1
の試験をしています。
LINEの高速描画を試していましたが、どうも思うように動きませんでした。
ACKを無視して、単純にデーターを送っていたのが敗因でした。

■■■以下、大きな勘違いで、間違っていました。■
****ここから間違い****
それできちんとACKが来るのを待って次のデーターを転送するようにしたら思い通りに動作しました。
あと、最後までわからなかったのが、一つのコマンド処理が終了すると、おまけのACKが来ることでした。

1byteのコマンドだと、2回ACKが帰ってきます。
7byteのコマンドだと、8回ACKが帰ってきます。
ここら辺のシーケンスは取説見ても解りませんでした。

例:
■Erase Screen
TX 45h ->
<- ACK
<- ACK

■Draw Line
TX 4Ch ->
<- ACK
TX x1 ->
<- ACK
TX y1 ->
<- ACK
TX x2 ->
<- ACK
TX y2 ->
<- ACK
TX color MSB ->
<- ACK
TX color LSB ->
<- ACK
<- ACK
*****ここまで間違い*****

正解:(2009/10/21追記)
1つのコマンド処理が終了すると、1つのACKが来る。
例:
■Erase Screen
TX 45h ->
<- ACK

■Draw Line
TX 4Ch ->
TX x1 ->
TX y1 ->
TX x2 ->
TX y2 ->
TX color MSB ->
TX color LSB ->
<- ACK

■最速Line描画
1Lineづつ線を引き、64Line(画面塗りつぶし)で画面クリアー。
これが最速のようです。
最速Line描画の動画

■VRの回転でLineを引く。
VRを回し、Lineの座標を変えて線を引く。
とりあえず試験なので、線を引く前に全画面消去。
アナログメーター風の動画


2009年10月11日(日)  小布施でアトム No.939
小布施でアトムを見つけました。
お土産やさんの店頭にいました。


2009年10月11日(日)  Serial OLED No.938
Serial OLEDをC8051F330Dにつないで試してみました。

接続は、大変シンプルです。
コントロールも大変簡単のようです。
1: reset(port pin low)
2: tx 55h (自動ボーレート)
3: tx CMD (1byte)
4: tx data (x,y座標など)

Lineコマンドで線を引いてみました。


2009年10月10日(土)  sparkfunより届く No.937
sparkfunより荷物が届きました。
9月30日に注文して、10月2日に発送で、本日到着なので結構早かったと思います。
さて、ちょっと試してみたいのが有機ELディスプレーです。
超小型オシロスコープが出来そうです。
今実験中のシンセに組み込むとオーディオ波形表示も出来そうです。


2009年10月8日(木)  アナログシンセもどき No.936
マイコンでアナログシンセもどきを作ってみたくなりました。
いわゆるソフトシンセですが、「アナログシンセもどき」と名づけました。
それで、これから出現するシンセモジュールの名称もアナログシンセ風に呼ぶこととしました。

マイコンはC8051F330Dです。
まずはVCOを作ってみました。
VCOといえばノコギリ波です。
Key#で周波数テーブルを参照し、タイマー割り込みで加算してゆきます。
タイマー割り込み周期が1/fsとなります。
fs=20kHzは実現したいのですが、VCFの演算でどのくらい時間がかかるかが影響します。
次はVCFの実験となります。


2009年10月1日(木)  電波時計が届きました No.935
電波時計が届きました。
980円の電波時計です
電波受信モジュール部品取りようです。
これでオリジナル電波時計が大量に作れます。


No. PASS
 OR AND
スペースで区切って複数指定可能
++HOME++
[日記一覧] [最新]
shiromuku(fs2)DIARY version 3.00