FC2ブログ

迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

AD9833 DDSモジュールを試す(12) デバッグ

自作したAD9833シグナルジェネレーターはロータリーエンコーダによって出力周波数を変えます。
ロータリーエンコーダをゆっくり回している時は問題ないのですが、勢いよく回すと表示周波数と周波数カウンタで測定した周波数が一致しなくなるという大問題があることがわかりました。
基板むき出しのままで実験している時には気付きませんでした。

ロータリーエンコーダ入力は割り込みによって処理しています。ここら辺に問題がありそうです。

スケッチはAD9833 Waveform Generatorのを一部修正して使わせてもらってます。
スケッチを調べなおしたところ loop() 内に問題があることがわかりました。
オリジナルのloop() の最後は以下のようになってます。(コメントは省略しました)

if (freq != freqOld) {
AD9833setFrequency(freq, waveType);
updateDisplay();
freqOld = freq;
}


freq はグローバル変数でロータリーエンコーダ割り込みによって値が変わります。
AD9833setFrequency(freq, waveType) によって AD9833 の周波数を変え、
updateDisplay() によって表示を変えます。(updateDisplay() は内部で freq を見ています)
AD9833setFrequency(freq, waveType) の処理中にロータリーエンコーダ割り込みで freq の値が変わってしまうと
次の updateDisplay() で表示が一致しなくなることになります。

そこで次のように一時変数 temp を入れて対処しました。そのため updateDisplay() は引数を渡せるように書き換えました。

long temp = freq;
if (temp != freqOld) {
AD9833setFrequency(temp, waveType);
updateDisplay(temp);
freqOld = temp;
}


これで出力周波数と表示周波数の不一致という問題はなくなりました。

割り込みは苦手です、昔も今も。
関連記事
スポンサーサイト

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

この記事へのトラックバックURL
https://edycube.blog.fc2.com/tb.php/1043-b55a3da3

 | HOME | 

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

ダイソー回転台をステッピングモーターで回す。(1) 2018/10/01
ダイソー:笑いながら光るかぼちゃ 2018/09/15
デジタルタイマーAPT70 2018/09/14
ハローウィンの電飾2018年版(2) 2018/09/08
ハローウィンの電飾2018年版(1) 2018/09/02
obniz(8)obnizフォーラム開設、obnizはクラウド経由のI/Oポート。 2018/08/19
obniz(6)obnizがマイナーアップデートされるらしい。 2018/08/02
obniz(5)電源ラインのリプル・LM35・LED 2018/07/29
obniz(4) obnizをブレッドボードに載せる・ブロックプログラミングでLM35を使ってみる 2018/07/21
obniz(3) ブロックプログラミング 2018/07/15

全記事表示リンク

全ての記事を表示する

リンク

このブログをリンクに追加する

月別アーカイブ

10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (461)
HX711 (2)
ACS712 (6)
DDS (3)
数学 (6)
パソコン (12)
PLC (14)
未分類 (40)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (33)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)
Android (1)
obniz (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

ブログリンク

FC2Ad

まとめ

Template by たけやん