はっくはっくキッチン
Hack Hack Kitchen

AVR による AD9833 制御器

 2021/05/24

AVR を使ったシリアル経由の AD9833 (プログラマブル波形発生器)1 制御器

導入

AD9833 を使ったプロジェクトはたくさんありますが、本プロジェクトでは Arduino 等は使用せずに AVR をそのまま使用しているため、他に比べて小型・廉価です。 このプロジェクトでは、AD9833 の制御にはシリアルインターフェースを使用します。 これは長所にも短所にもなり得ますが、私のようにほとんどのことを端末で行いたいという人にとっては大きなメリットかもしれません。

AD9833 Controller board
AD9833 Controller board

もしスタンドアロンのコントローラーをお探しなら、例えば以下を参照すると良いでしょう。

ほかにもたくさんあります。

必要なもの

  • AD9833 ボード

  • 4 KiB 以上のフラッシュを持つ AVR

  • シリアル接続の手段 (USB-シリアル変換ボード等)

回路図

./ad9833ctrl-sch-thumb.png
Schematic of AD9833 Controller (click to enlarge)

動作確認

以下の AVR で確認しました。

  • ATtiny85

  • ATmega8

  • ATmega328P

コンパイル方法

使い方

シリアル接続で 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

Example: output of AD9833 (triangle wave, 25 kHz)