Pakurino

FPGA 版 FM 音源 (24) -- YMF262 測定 (16)

エンベロープ・ジェネレータ・シミュレータのスケッチ "EG.pde" を下に示します。 16 MHz クロックの ATmega328P を使用した Arduino 互換ボードと、Arduino 0022 IDE 環境でコンパイルして確認してあります。 スケッチのバイナリ・サイズは 4 KB 程度なので…

FPGA 版 FM 音源 (23) -- YMF262 測定 (15)

前回の EG プログラムを Arduino 上の「スケッチ」として実現してみました。 スケッチ自体は長くなるので、次回に回し、今回は簡単な説明のみ行います。 今回は、「音」や「EG 波形」の出力をメインに考え、Arduino に接続したノン・オーバーサンプリング・…

アナログシンセの VCO ブロック (43) -- 温度補償回路(9)

温度補償回路の温度特性を測定してみて、効果があることが確認できました。 予備実験として、トランジスタ・アレイ内のトランジスタを「ヒーター」として利用して温度設定する方法も試してみたのですが、差動ペアのトランジスタ間に無視できない温度勾配が生…

Arduino 周波数/周期カウンタ (10)

前回の最後の図を下に再掲します。 このグラフは、 ある特定の ICR1 の値 (となるような CAPT タイミングを発生する OCR1B の設定) で、 CAPT 割り込みサービス・ルーチン内で TOV1 フラグの状態を観測し、記録するのを 10000 回繰り返すことにより発生頻度…

Arduino 周波数/周期カウンタ (9)

CAPT と OVF のタイミングの関係を推測するために行った実験のようすを説明したいと思います。 CAPT 割り込みの発生タイミングを、1 クロック単位で可変するために、同じタイマ 1 の PWM 出力である OC1B 端子とコンペアレジスタ OCR1B を使いました。 analo…

Arduino 周波数/周期カウンタ (8)

前回の最後の図、つまり、 OVF 割り込み要求の方が先に発生するが 実行中の命令が 2 サイクル (以上) かかるので 命令実行中に優先度の高い CAPT 割り込み要求に「追いつかれて」しまい、 命令終了時に優先度の高い CAPT 割り込みの方が先にサービスされてし…

Arduino 周波数/周期カウンタ (7)

以降の記事では、記述を簡略化するために、WinAVR (AVR 用 GCC) の割り込みベクトルの表記にしたがって、 「インプット・チャプチャ」を「CAPT」 「タイマ・オーバーフロー」を「OVF」 と略記します。 たとえば、「インプット・キャプチャ割り込み」は「CAPT…

Arduino 周波数/周期カウンタ (6)

LPF 出力部の OP アンプの直線性が気になったので、LMC662 を使った場合と、 TLC272 を使った場合との、出力電圧が小さい領域での直線性の測定を行い、比較してみました。 結果のグラフを下に示します。

Arduino 周波数/周期カウンタ (5)

前回とほぼ同じハードウェアで、XR2206 を自動測定してみました。 LM331 の結果と合わせてプロットしたグラフを下に示します。

Arduino 周波数/周期カウンタ (4)

周期測定ライブラリを利用してリニア VCO の特性を自動測定する Pakurino (Arduino) 用のスケッチを作成し、LM331 についてデータを取ってみました。 結果のグラフを下に示します。 20 Hz から 20 kHz までの 10 オクターブの範囲で、誤差は ±4 セント程度に…

Arduino 周波数/周期カウンタ (3)

12 月 7 日の記事の「PeriodCounter」ライブラリを使って、200 Hz の信号1〜2周期の測定を多数回繰り返してみたところ、やはり数千分の1程度の頻度でエラーが生じました。 エラー対策のための修正を施したバージョンで同じ測定を試すと、ほほ丸一日、数百…

Arduino 周波数/周期カウンタ (2)

周波数を計測するのに、基準クロックから作成した正確な 1 ms とか 1 s とかの一定時間幅のゲート信号を使って入力信号をカウントする「普通」の方式では、周波数の分解能はゲート・タイムの逆数に比例する形になります。 たとえば、ゲート・タイム 1 s では…

Arduino 周波数/周期カウンタ (1)

VCO などの発振周波数の自動測定を目的として、AVR マイコンでオーディオ帯域信号の周期を測定するライブラリの作成をしています。 プロトタイピングのツールとして Arduino (Pakurino) を使い、簡単な周波数/周期カウンタとして機能するサンプル・スケッチ…

Pakurino の ATmega328P 化 (3)

秋月で ATmega328P の取り扱いが始まりました。 単価 250 円 と安価なので、ATmega を使った FM 音源プログラムの対象デバイスを ATmega168 から ATmega328P に変えることにしました。 プログラム・メモリが 32 K バイトに倍増しているので、168 では共存で…

Pakurino の ATmega328P 化 (2)

この話題は前回の記事で完結のはずでしたが、予期せぬトラブルがあり、続編を書くはめになりました。 それは、 ブートローダ書き込み直後の、ユーザープログラム領域が消去されて 0xFFFF で埋まっている状態 (初回) ではスケッチ書き込みに成功するが、2回…

Pakurino の ATmega328P 化

千石から ATmega328P を、秋月から ATmega168P を買ってきて、Pakurino (Arduino) の 328P 化を行いました。 AVR 用の書き込み器としては、オプティマイズ製の「MINI EZ-USB」ボードに書き込みソフト「avrezusb」を組み合わせて使っています。 「avrezusb」…

シュトレーレ回路 (4) -- シュトレーレ PWM (2)

シュトレーレ近似の値を PWM によるアナログ電圧値として出力する Arduino 用のスケッチを示します。 シュトレーレ近似の最大誤差は ±0.2 % 程度で 8 ビット相当ですから、ATmega168 内蔵の 10 ビット ADC で傾向がとらえられるのではないかと考え、PWM 出力…

シュトレーレ回路 (1) -- シュトレーレ PWM (1)

まず、タイトルの「シュトレーレ回路」というのは、そういう名前の回路があるわけではなく、回路自体は特に珍しくもない一般的な回路で、その回路定数の決定に以前の記事で触れた「シュトレーレ近似」を使うものと定義します。 以前の記事 (→こちら) の内容…

シグマデルタ変調 PWM (7)

これまで ΣDM PWM のリニアリティの測定をしていなかったので、整数部 1 LSB の間の小数部 32 レベルについて実測してみました。 結果のグラフを下に示します。 赤の線が 2 次で、青の線が 1 次です。

シグマデルタ変調 PWM (6)

これまでのところで ΣDM PWM 出力の様子は概要が分かったので、今度は実際に VCO につないでみることにします。 と言っても、アナログ・シンセの VCO モジュールとして機能する回路は手許にないので、PX-150 のテスト用基板に作成した LM331/NJM4151 使用の…

シグマデルタ変調 PWM (5)

2 次 ΣDM では 1 次 ΣDM に比べて内部状態の数が増えるため、出力系列の周期が大きくなることが予想されます。 といっても、MASH 方式では 1 段目の ΣDM の動作自体は 2 段目の ΣDM の影響を受けないので、全体としての周期は 1 段目の周期の 2、4、8、16、3…

シグマデルタ変調 PWM (4)

前回の補足として、外部入力が一定値を取る場合の小数部 f の値と、1次 ΣDM 出力波形に含まれる周期変動の基本波の周波数の表を示します。 まず、f が 2 のべき (および 32 からそれを引いたもの) である場合の表を下に示します。 この場合は、基本波と高調…

シグマデルタ変調 PWM (3)

具体的な実験の手順としては、 Pakurino (Arduino) 用に ΣDM への入力として DC (直流) 出力だけでなく、各種の波形を重畳して出力できるスケッチを作成 その出力の時間波形とスペクトルを、「efu」氏作のフリーソフトウェア「WaveSpectra」で観測 という方…

シグマデルタ変調 PWM (2)

普通の PWM では、いったんパルス・デューティー値を設定してしまえば、再びその値を変更するタイミングまでは何もする必要がありません。 それに対し、ここでは、PWM デューティーを細かく変化させて分解能を向上させるため、 PWM 周期ごとに処理をする必要…

シグマデルタ変調 PWM (1)

「FMmelody」のプログラムの説明を書くのをサボって、主に「MIDI2CV」用途を目的とした、シグマデルタ変調 (以下「ΣΔM」、「ΣDM」あるいは「SDM」と略記) により PWM 出力の分解能を上げる実験をしています。 PC 上でプログラムによるシミュレーションを行う…

Pakurino (6)

「FMmelody」で、DAC に μPD6376 (NEC) を使った場合にも正常に動作することを確認しました。 確認方法はハンダごても使わず、非常に横着な方法を取りました。

Pakurino (5)

少し間があいてしまいましたが、スケッチ「FMmelody」のプログラムの説明に入りたいと思います。 まずは、ファイル構成と、各ファイルの簡単な説明からです。

Pakurino (4)

6/29 日付けの記事のコメントにあるように、ATmega168P や ATmega328 などの「新しい」チップでエラーが出てコンパイルがうまくいかないという問題に対応して、修正を施したものを 2009/07/01 版として Web 上のファイルを置き換えました。 修正したのは「No…

Pakurino (3)

9 ビット Fast PWM モードを使った 2009/6/26 版の FMmelody スケッチでは、出力波形のひずみが大きくなるという問題があったので、8 ビット Phase Correct PWM モードに変更し、 2009/6/29 版としてリリースしました。 6/26 日付けの記事と、Web 上のスケッ…

Pakurino (2)

Arduino IDE 付属のサンプル・スケッチ「Melody」を FM 音源版にしたスケッチ「FMmelody」を (→こちら) におきました。 解凍してできた「FMmelody」フォルダ (とそれに含まれるファイル) をご使用中の「スケッチ・ブック」のフォルダにコピーしてご利用くだ…