« DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる | トップページ | 回路屋にとっては不気味な音:「プチっ」 »

2025年7月 3日 (木)

DDS IC「AD9833」をArduino UNO R3で制御:箱入れ #2

DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる
ここからちょっと手直し。
 ・高い周波数で方形波を出力するとちゃんとした
  波形が出てこない。原因はアンプの飽和。
 ・AD9833の出力、正弦波と三角波だとおよそ
  0.6V(p-p)なのが、方形波だと電源電圧フルスイング
  になってしまう。
 ・このため、前の回路では前段のアンプ(4V(p-p)まで増幅)
  が飽和。
 ・そこで、方形波の時にレベルを下げるような細工
  を入れ込む。
 ・使ったのは2入力のアナログマルチプレクサ。
    74LVC2G53 8pinのIC
      「2G」なんで2ゲートかと思いきや
      機能ブロック的には一つだけ。
      なんかへんな感じ。
 ・方形波を出力する時は、出力レベルを1/9した側に
  切り替える。
 ・飽和しないしLPFを通らないので、まっとうな
  方形波(今度はアンプでの帯域制限)が出るように。

ということで、こんな回路になりました。
  ※回路変更あり(一連のコメントを参照)
Ad9833
・BSch3Vのデータ
   ・ダウンロード - ad9833_04.ce3

・切り替え機能を追加したスケッチ。
   ・ダウンロード - ad9833_03.zip

・HEXファイル
   ・ダウンロード - ad9833_03_hex.zip
 AD9833_03.ino.hex
 AD9833_03.ino.with_bootloader.hex
この2つ。

AD9833を使う時の参考にどうぞ。

周波数を高くするときにいるのは、やっぱ、フィルタです。
これ以上の高速アンプは電気食いだし、電池運用はちょい
としんどいか。

※回路図をちょっと訂正
LVC2G53の手前の2段CRフィルタ。
マルチプレクサの入力容量がけっこうあるようなので
(データシートでオン時約20PF)フィルタ部を変更しました。
9833a
  入力部の抵抗を200Ω→1Kに。
  コンデンサをなしに。
1MHzあたりからレベルが落ち始めます。
4MHzになると出力電圧はほぼ半分に。

※追記
AD9833の出力を
  ・出力レベルを可変したい
  ・出力ののDCオフセット電圧を可変したい
ときの方法、面倒でもこんな構成かと。
Pm4
方形波の時はLPFを通さずできるだけ「生」信号
を使えるよう、MPXで分けます。
正弦波、三角波の時だけLPFを通します。
12dB/octので描きましたが、2段にして24dB/octや
LCフィルタでも良いわけです。
方形波出力のとき、後段アンプを飽和させないように
します。
  飽和させると電源ラインが汚くなります。
周波数が高くなると、高抵抗が使えなくなるので
ボリュームの入力部が面倒になります。

現スケッチのままで動くように
 マルチプレクサのプルアップ抵抗をプルダウンに。

04a


|

« DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる | トップページ | 回路屋にとっては不気味な音:「プチっ」 »

Arduino」カテゴリの記事

発振回路」カテゴリの記事

コメント

いつもホームページを拝見しております。
楽しく興味深い記事を有難うございます。
突然申し訳ありません、早速ですが今回この発振器を製作しておりまして ATmega328P の PB4 でのH/L信号が切替わらなくてHi のままなのですがアドバイス頂けませんでしょうか?
ポートの動作は他のプログラムで確認しております。
お忙しいところ恐縮ですが何卒よろしくお願いします。

投稿: 坂井俊治 | 2025年7月14日 (月) 10時46分

「他のプログラムで確認して」とはどういうことでしょうか?

私のスケッチ、「ダウンロード - ad9833_03.zip」は試されたのでしょうか?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月14日 (月) 12時43分

早速ご返信いただきまして恐縮です。

コメントについて
>他のプログラムで確認して~
 → PB4 のポートが不良かもしれないと思い、LED点
   滅プログラムで確認しました。
>ダウンロード - ad9833_03.zip~
 →はい、試させていただきました。

なにぶん初心者のため的確な返事ではないと思いますが、他の動作や表示は一通り動作していると思います。

投稿: 坂井俊治 | 2025年7月14日 (月) 14時51分

「H/L信号が切替わらなくてHi のまま」は何で確認されましたか?
・オシロ ・テスター ・マルチプレクサの信号
出力
マルチプレクサの切り替え入力は、リセット時オープンにならないよう100kのプルアップ抵抗を入れてます。
この値は間違いないですか?
100kのつもりが100Ωや10Ωとか。
どこか、プラスのラインに配線がショートしているとか。
328Pの18ピンの配線を外して、ICの足を直接観察するてなところでしょうね。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月14日 (月) 15時02分

・回路のソケットからATmega328Pを抜く
・電源オン
・18ピンの電圧を計る。プルアップしているので5Vのはず。
・18ピンとGND間の電流を計る。
  正常な配線なら50μA。
  これ以外はどこかおかしい。
  電源と短絡ならテスターのヒューズが飛ぶかもなんで、
  1kくらいを直列に入れて電流計測が安全。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月14日 (月) 15時13分

再々のアドバイス有難うございます。

コメントについて
>H/L信号が切替わらなくてHi のまま~
 → オシロにより確認しました。
その他のご指摘項目については、特に問題無いと考えます。
今後は ad9833_01 仕様での発振器として使いたいと思います。ご親切な対応をいただき有難うございました。

投稿: 坂井俊治 | 2025年7月14日 (月) 16時37分

で、うまく制御できたんですか?
できなかった原因はなんでしたん?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月14日 (月) 16時39分

「特に問題無いと考えます」ということは動いたんでしょか?
原因不明で動かないまま?

328Pが壊れているん? 別のにしたら?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月14日 (月) 16時41分

・外部回路の接続とその検証が正常で信号が出ない。
・18ピンの配線を外しても出力がH。
となると、マイコンがおかしいぞ・・・でしょ。
原因が何だったのか・・・むちゃ気になりますので。
報告をお待ちしています。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 08時37分

ご迷惑をおかけしまして申し訳ありません。

コメントについて
>マイコンがおかしいぞ・・・でしょ。
 →ATmega328Pで2個確認しましたが、同現象でした。
  代わりの 328P が無かったので nano で代わりに
  動作を見ていたところですが、やはりダメでした。
  

投稿: 坂井俊治 | 2025年7月15日 (火) 09時20分

18ピンPB4の配線を外してから試されてのですね?
「LED点滅プログラムで確認しました。」とありましたが、裸のポートにしても出力H固定ということなのですか?

ご面倒でなければ「LED点滅プログラム」をお示しいただきたいところです。

裸のATmega328Pではなく基板のUNO R3やnanoだとPB4はMISO信号でICSPコネクタに行ってます。
ここらあたりは大丈夫でしょうか?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 10時25分

先に示した周辺回路テスト方法
・回路のソケットからATmega328Pを抜く
・電源オン
・18ピンの電圧を計る。プルアップしているので5Vのはず。【1】
・18ピンとGND間の電流を計る。 正常な配線なら50μA。【2】

この【1】【2】の結果をお教えください。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 10時29分

状況が見えません。
・私のように回路をユニバーサル基板に手組み
  328PはICソケット
・UNO R3(などの)コネクタから信号を引き出して
 別に作ったDDS回路と接続
どちらなのでしょうか?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 10時44分

話が前後しますが、試しにPB4のプルアップを外して
オシロで見ますと、SQR:H、SIN/TRI:L となり正常
な動作となります。プルアップを付けると H のまま
となります。(ポート吸込み不足?)
 
・回路のソケットからATmega328Pを抜いた時の電圧:
 →5vであり、GNDへの電流は52μAでした。

従って、PB4 ポートの不良?と思いLED点滅プログラムで吸込み(吐出し)動作の確認を行いました。
その結果、1秒毎の点滅動作は正常でした。
( 328PをUNO R3 に取付)

尚、回路をユニバーサル基板に組み328PはICソケット
です。

※ 参考点滅プログラム:
void setup() {
pinMode(12, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH); // Digital12ピンをHIGHに設定
delay(1000); // 1秒待機
digitalWrite(12, LOW); // Digital12ピンをLOWに設定
delay(1000); // 1秒待機

digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

 

投稿: 坂井俊治 | 2025年7月15日 (火) 13時20分

100kのプルアップ無しだと正常に動作、ということでしょうか?
LED点滅スケッチも、プルアップ抵抗ありだとH固定に?
UNO R3だと正常。ユニバーサル基板に移すとダメとなるということなら、配線に何かあるような気がします。
PB4をオシロで見ながら、プルアップ抵抗値を変化させ、どのくらいでおかしくなるか、あたりの調査でしょうか。
プルダウンだとどうなる?もか。
ユニバーサル基板の配線、電源まわり(+5とGND、328Pや他のところも)がしっかりしてないとか。
原因、解せないです。
すっきりさせたいっ。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 14時46分

GNDと+5Vの電源ライン、動作中に各ポイント(ICなどの部品につながっているところ)の電圧差を計って、異常(エラい電圧差があるやん)が無いかをチェック。 でしょうか。
手組み基板でアウトとなると、スカタンなハンダ付けくらいしか考えられない。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 15時06分

基準となるGNDあるいは+5Vを決めて、そこからの電圧差を全接続ポイント確認。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 15時07分

原因がわかりました。
私が作ったプログラムのミスです。
  ダウンロード - ad9833_03.zip
回路図ではLVC2G53のセレクト入力が100kでプルするように記していましたが、製作した現物回路ではプルダウン(GNDつなぎ)でした。
SPIを使っているのでPB4はMISOピンになり入力ピンとして内部プルアップされます。
それを汎用出力ポートとして使っていたのです。
データシート【表19-1】
SPIを主装置として使った時、PB4は入力にしかならないのです。
使うポートを変えて対策しようとしましたが、今のスケッチで動くよう、手抜きで抵抗のプルダウンに。
  ※ちょっと追記


投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 17時03分

【14-3ポートBの交換機能】に解説。
  PB4が入力を強制されるときプルアップはPORTB4で制御できる。
ということで、マルチプレクサのPORTB4をon/offしてたのは、プルアップ抵抗の有無を切り替えてたという話になります。
今のままのソフトなら、100kΩをもうちょっと大きく470kくらいにして「プルダウン」に、ということで対策できます。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 17時10分

SPIを操作していないLED点滅スケッチなら正常動作。
本チャンのスケッチでおかしくなる。
私とこでうまいこと行っていたのは、100kをプルアップじゃなくプルダウンしてたから。
でした。
お騒がせしました。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月15日 (火) 17時11分

了解しました。
良かったです、私も最初はオープンと言っていましたが
段々とPullダウンした方がバランス良くなってきましたので、ちょっと面食らっておりました。
それにしても、大変お手数をおかけしまして有難うございました。
今後とも、"居酒屋ガレージ店主”様のHPを期待しております。

投稿: 坂井俊治 | 2025年7月15日 (火) 18時41分

自分で製作して記事にした自作物。
実際に作ってもらうのは、むちゃうれしいです。

今回のトラブル事例、ちょっとしたこと(pull up/down)が話をややこしくていました。
もっと精進して回路図描きとプログラム作りをしますわ。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2025年7月16日 (水) 14時24分

お忙しいと存じますがホーロして頂ければと思い記載させて頂きました。
ad9833ファンクション製作記事に基づき作成させて頂きました。
ハードはなんとかなのですがソフトに対する知識がなく困り果てていますver0.02まではエラーもなく動作したのですが、ver0.03ソフトがコンパイルエラーで書き込めず困っています。申し訳ありませんがhexファイルを提供して頂きたくお願いします。

投稿: khash | 2026年2月12日 (木) 14時15分

khashさん。
この2つのHEXファイルを記事内にアップしておきました。
 AD9833_03.ino.hex
 AD9833_03.ino.with_bootloader.hex

で、どんなコンパイルエラーがおきていたのでしょうか?
参考にしたいので、どうか、エラーメッセージをお示しください。

※Arduinoブートローダ下のATmega328PにHEXファイルをアップロードする方法、ネットを探すとあれこれ出てきますが、けっこう難易度が高そうです。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2026年2月13日 (金) 08時44分

早速に対応して頂きありがとうございます。コンパイルエラーのメッセージは以下の通りです。

collect2.exe: error: ld returned 1 exit status
exit status 1

Compilation error: exit status 1
ネットで検索したら以前コンパイル時のライブラリーが重複すると悪さをするとかライブラリにあるものはスケッチのディレクトリーに置かないにも関わらず置いているためと推定されます。先ずは頂いたhexファイルで書き込み後に原因を探してみます。
picマイコン中心に動作させていたので戸惑う限りです。

投稿: khash | 2026年2月13日 (金) 17時39分

khashさん。
ver0.02がうまいこといったというのが不思議です。
ファイルの構成(3つある)はver0.03も同じです。
フォルダ名はinoファイルの名前と同じでしょうか?
フォルダ名が「AD9833_03」で、
その中に、
 AD9833_03.ino
 i2c_lcd_AQM1602a.cpp
 i2c_lcd_AQM1602a.h
の3つのファイル。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2026年2月13日 (金) 18時01分

Arduino IDEのバージョンはいかがでしょうか?
なるべく新しいのに。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2026年2月13日 (金) 18時56分

問合せ頂きありがとうございます。以下の通りです。
1.ver0.02で書込み出来たのですが最初は今回同様にコンパイル出来ず困っていたので通常使用していないパソコンで稼働させたらエラーはありませんでした。多分ライブラリーの問題だと思いますが?
2.ver0.02で使用したパソコンでver0.03ではエラーで今回お願いした次第です。arudino ideをインストールするとarudinoデレクトリーが作成されるのでこれがideのverupでも引き継がれるので悪さをしていると思わますが未確認です。
arudino ideを完全に削除しクリーンインストールすればエラーはなくなるのかなと考えていますが未実施です。完全に削除すると追加したライブラリーも消滅するので実行は躊躇しています。

追記
 ideのverは2.3.6を使用しましたが以前に他機器での書き込みエラーから保存していたver1.8.19でも今回試しましたがエラーでした。arudinoは小生にとっては難物です。

投稿: khash | 2026年2月14日 (土) 09時31分

Arduino IDEの「ツール」から
 ボード
 Arduino AVR boards
 Arduino UNO
となっているでしょうか?

ライブラリとの衝突なのかなぁ?
使っている液晶表示のモジュール、
 #include "i2c_lcd_aqm1602a.h"
と、inoと同じフォルダから拾うようにしているんですが。

エラーの出る環境で「Lチカ」のスケッチに液晶表示のライブラリを入れてどうなるかでしょうか?

投稿: 居酒屋ガレージ店主(JH3DBO) | 2026年2月14日 (土) 09時57分

再三の指導を頂きありがとうございます。結論から言えばコンパイル完了、マイコンに書き込み完了しました。

提供ファイルがzip形式で解凍しad9833とlcdファイルの3つがあり、arudinoを立上げad9833を取込み起動させていたのでコンパイルエラーとなりました。ad9833ホルターを新規に作りここに解凍後の3ファイルを保管しarudinoを立ち上げたらコンパイルエラーはなくなりました。
知識が足らずにご迷惑をかけましたがincと同一ホルダーに入れないとダメだとわかりました。
多々ご迷惑をかけました事をお許しください。

投稿: khash | 2026年2月14日 (土) 13時13分

khashさん。 うまくいってよかった!
Arduino環境でのプログラム開発(C言語の知識がベース)、「PIC」での苦労よりずいぶんマシです。
よくできたツールかと。
私の場合、 8bitのPICは「アセンブラ」でしたんで。
もう戻りたくないです。
「やれ!」っと言われれば・・・できるだろうけど・・・


投稿: 居酒屋ガレージ店主(JH3DBO) | 2026年2月14日 (土) 21時54分

コメントを書く



(ウェブ上には掲載しません)




« DDS IC「AD9833」をArduino UNO R3で制御:箱に入れる | トップページ | 回路屋にとっては不気味な音:「プチっ」 »