迷走の果て・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;
}


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

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

充電式ツインファンをアマゾンで買いました。

仕事中に欲しいので買ってみました。充電式のツインファン

ビジネス街にある某スーパーに勤めているのですが、昼のとっても忙しい時間にはレジの補助に入ることがあります。
私が担当するのは出入口一番近くのレジ、お昼はお客様がひっきりなしに来店されるので出入口はほぼ開いたままになります。
これからの時期は熱気が流れこんでとても暑いのです。そこでレジに置ける小さな扇風機を探していました。
ネットで探せばいろいろあるのですが、ファンがひとつだけがほとんど、二人でレジ作業をするので私一人涼しい思いをするわけにはいきません。

レジ用扇風機買ったままではレジ作業では使いにくいので改造しました。
かなり昔に買って使わなくなっていたgootのルーペ付き作業台ST-62に結束バンドで縛り付けました、ルーペは外してます。
ちなみにST-62は古いのでもう売ってません、新型はST-92です。

各ファンはある程度角度を変えられます。
これでかなり快適になりました。


電池を内蔵しておりUSBケーブルで充電できます。
風量は弱・中・強の三段階切り替え式です。
スイッチを二秒ほど長押しすると弱でファンが回り出します。もう一度押す(この場合は長押しは必要ありません)と中、更にもう一回押すと強、もう一度押して停止です。
面白いのはスイッチをダブルクリックすると左側が周り、次にダブルクリックで右側が周り、次のダブルクリックで停止します。

問題は耐久性ですが、買ったばかりなのでまだわかりません。
レジ補助は長くても一時間以内なのでまあ大丈夫でしょうが、しばらく様子見です。

AD9833 DDSモジュールを試す(11) どうにかケースに納めた

百均のケースにどうにか納めました。
右側の白いのはダイソーの500円(税別)モバイルバッテリーです。
AD9833SG初号機

AD9833SG初号機裏出力はRCAです。
BNCにしたいところですが、まだアンプを実装しておらず、これからあれこれ試してから金属ケースで作り直すつもりですので、これでいいでしょう。


あれこれ試していると早速バグ発見。
さて楽しいデバッグの始まりです^^;;

AD9833 DDSモジュールを試す(10) ロータリーエンコーダの変更

先の記事の続きです。
スケッチに手を入れたので多少ですが操作性がよくなりました。
百均でスチロール樹脂製のクリアケース見つけたのでこれに組み込んでみることにしました。外寸 155×101×54mm。
これならLCDの角穴を開けずにすみますから^^;;
ついでにロータリーエンコーダを変更することにしました。
ロータリーエンコーダ二つとプッシュスイッチ二つが必要なのですが、以前にデジットでスイッチ付きのロータリーエンコーダを買っていたので、これを使うことにしました。
ところが念のため試してみると、2クリックごとに設定値がアップ/ダウンするようになってしまいました。今までは1クリックごとだったのですが。

デジットスイッチ付きロータリーエンコーダ今までのロータリーエンコーダは秋月のこれ
クリック数:24
パルス数:24
です。

デジットのロータリーエンコーダの説明書を見ると
デテントポジション:30step
15パルス/1回転
となっています。1回転のパルス数がデテントポジションの半分です。

このままではかえって使いにくくなります。

どうしたものかとあれこれやっているうちに「パチッ」っと音がしてArduino NANO互換機とAD9833DDSモジュールのLEDが一瞬消えてしまいました、どうやらVCCとGNDをショートさせてしまったようです。
LCDの表示が消えたままです、輝度調整ボリュームをまわし切るとかろうじて表示されてます。
この状態でも一応スケッチの書き込みはできるし、DDS出力も正常です。

まさかと思って調べるとVCCが約3.3Vしかありません。どうやらNANO互換機の電源周りをおかしくしたようです。
でも約3.3Vはどこから?
Arduino NANO の回路図を読んでもどこをどうしてしまったのかわかりません。
もっとも私のはNANO互換機でUSBシリアルチップがFT232ではなくCH340ですが。
リセッタブルフューズがおかしくなったのか?
今のところ外部から5V電源をつないで動作しているとはいえ、交換したほうがよさそうですね。

さて先の2クリック問題ですが。
ロータリーエンコーダを使うためにRotary Encoder Arduino Libraryを使っているのですが、よく読むと解決方法が載ってました。
引用します。

It's also possible to use 'half-step' mode. This just emits an event at both the 0-0 and 1-1 positions. This might be useful for some encoders where you want to detect all positions. In rotary.h, uncomment #define HALF_STEP to enable half-step mode.


書いてあるとおりに rotary.h の #define HALF_STEP をアンコメントすると1クリックごとに設定値がアップ/ダウンするようになりました。

思わぬ回り道をしてしまいました、一晩棒に振りました(涙

久々のArduinoなのにOld Bootloader??

交流電圧計の測定に使っている発振器がどうにも不安定です。
昔々に格安で手に入れた発振モジュールを使っているのですが、一番データの欲しい数100KHzあたりが不安定。
ここ数日あれこれと手を入れてかなり改善はされましたが、それよりも周波数を読むのに別に周波数カウンタが必要で、これが面倒と言うか実験中机の上がごちゃごちゃになるのです。

そこで以前実験したままで放置していた(毎度のことですが^^;;)AD9833を使ったDDSオシレーターを引っ張り出してきました。
Arduino NANO互換機で制御してます。
ちなみに写真右上のピンクのはパナソニックのモバイルバッテリーです。数年前アマゾンで購入、他の色もあったのですが、買った時点ではこれが一番安かった。

Arduino NANO互換機をブレッドボードからユニバーサル基板に乗せ換え、Arduino IDEを1.8.5にバージョンアップし、昔のスケッチを書き込もうとしたのですが、書き込めません。


oldBootloader.jpgいつの間にやらツールメニューにATmega328P(Old Bootloader)という選択肢が追加されてました。
これを選ぶと書き込みができました。
でもどう違うんでしょうか?

スケッチにまずいところがあり、使い勝手がイマイチなのでこれから改造です。
出力は100mVrmsですのでアンプも入れたいところです。
ついでに今度こそちゃんとしたケースに入れようと思ってます。

 | HOME | 

文字サイズの変更

プロフィール

edy

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

AD9833 DDSモジュールを試す(12) デバッグ 2018/05/20
充電式ツインファンをアマゾンで買いました。 2018/05/19
AD9833 DDSモジュールを試す(11) どうにかケースに納めた 2018/05/15
AD9833 DDSモジュールを試す(10) ロータリーエンコーダの変更 2018/05/13
久々のArduinoなのにOld Bootloader?? 2018/05/06
簡易交流電圧計の実験(7)アナログパネルメーターを付けてみる(2)アンプ追加 2018/04/27
簡易交流電圧計の実験(6)アナログパネルメーターを付けてみる。 2018/04/22
簡易交流電圧計の実験(5)ショットキーバリアダイオードに変更 2018/04/21
簡易交流電圧計の実験(4)周波数特性 2018/04/14
簡易交流電圧計の実験(3)パルスジェネレーターで周波数特性を測ってみる。やり直し 2018/04/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)
電子工作 (448)
HX711 (2)
ACS712 (6)
DDS (3)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (33)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)
Android (1)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

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

検索フォーム

アクセス

RSSリンクの表示

ブログリンク

FC2Ad

まとめ

Template by たけやん