AVR を使ったシリアル経由の AD9833 (プログラマブル波形発生器)1 制御器
導入
AD9833 を使ったプロジェクトはたくさんありますが、本プロジェクトでは Arduino 等は使用せずに AVR をそのまま使用しているため、他に比べて小型・廉価です。 このプロジェクトでは、AD9833 の制御にはシリアルインターフェースを使用します。 これは長所にも短所にもなり得ますが、私のようにほとんどのことを端末で行いたいという人にとっては大きなメリットかもしれません。
もしスタンドアロンのコントローラーをお探しなら、例えば以下を参照すると良いでしょう。
-
DIY Function/Waveform Generator by GreatScottLab
-
How to Build Your Own Function Generator Using Analog Devices' AD9833 by Cezar Chirila
ほかにもたくさんあります。
必要なもの
-
AD9833 ボード
-
4 KiB 以上のフラッシュを持つ AVR
-
シリアル接続の手段 (USB-シリアル変換ボード等)
動作確認
以下の AVR で確認しました。
-
ATtiny85
-
ATmega8
-
ATmega328P
コンパイル方法
-
config.hを編集 -
Makefileを編集 (特にデヴァイスとライターの設定) -
make -
make flash
使い方
シリアル接続で AD9833 を制御できます。
h または ? でヘルプメッセージが表示されます (USE_HELP 付きでコンパイルした場合)。
基本コマンド
全て大文字・小文字を区別しません。
- [number]
-
周波数 (Hz) の設定。 以下の表記が使えます。
-
100
-
10k
-
1.5k
-
1k5 (= 1.5k)
-
2M
-
-
S -
サイン波
-
T -
三角波
-
Q -
矩形波
-
RESET -
AD9833 にリセットを送信
-
H,? -
ヘルプの表示
EEPROM (USE_EEPROM 付きでコンパイルした場合に有効)
-
SAVE -
現在のレジスタ値の EEPROM への保存。 AVR のリセット時に (もし保存されていれば) EEPROM からこの値を読み出し、設定します。 従って、ある周波数、波形でのみ使用するのであれば、一旦レジスタ値を保存すれば、シリアル接続無しでも使用することができます。
-
LOAD -
保存されているレジスタ値の読み込み
-
ERASE -
保存されているレジスタ値の消去
例
$ dterm /dev/ttyUSB0 4800
AD9833 CONTROLLER VERSION 1.0
h # <--- ヘルプ
Usage (case insensitive):
[freq]: set frequency
e.g.: 100 10k 1.5k 1k5 (= 1.5k) 2M
S: sine wave
T: triangle wave
Q: square wave
RESET: send reset to AD9833
SAVE: save current registers
LOAD: restore saved registers
ERASE: erase saved registers
H, ?: help
t # <--- 三角波を選択
25k # <--- 周波数を 25 kHz に設定
Example: output of AD9833 (triangle wave, 25 kHz)
Analog Devices: AD9833 Datasheet and Product Info
