タイトル ファンクションジェネレータ FG085 キー入力対策

これで、最後です。FG085のキー入力の不具合を対策します。
FG085の、キー入力はチャタリング対策に問題があります。そこで、キースキャンのタイミングを見てみました。
画像

約210us周期で、6個のCOL信号を、30usのパルスで読んでいます。チャタリング防止のコンデンサは、挿入できません。そこで、禁断の逆アセンブラの登場です。申し訳ありませんが画像で示します。
逆アセンブラは、簡単に使えるので、「ReAVR」を愛用しています。(ただし、Atmel Studioとの相性は悪い)
画像

最新バージョン「113-08501-132.hex」の場合です
ここは、キー入力のCOLを出力して、ROWデータを取り込む部分です。「call L0836」がdelayで、r25:r24の値で時間が決まるようです。現在値は、"0x0014"で約30usです。これを、約1msにする為に、適当に増やします。私の場合は、0x029B(667)にしました。ハンドアセンブルで、
ldi r24,k9B
idi r25,k02
を、8B E9 92 E0 として、元のコード 84 E1 90 E0 と入れ替えます。私は、TOOLとして、xeditを使わせて頂きました。
変更するROMアドレスの先頭は、address=0x0bd6でした。
書き込みは、AVR ISP Mk2です。

注意:本件に関しての質問は、お受けしません。あしからず。

とりあえず、動いているようです。

結果をまとめると

1. SIN波の歪は、R-2Rのラダー抵抗を変更する事で、2次歪が無くなった。
2. キーボードのチャタリングは、今のところ、解消した。
3. DDSの出力タイミングが、バラツクので、高調波のノイズが大きいのは、変わらない!
4. Power ボタンの動作が時々おかしい、今の所、様子見だ。AVRのリセットに、まだ問題がありそう。

1kHzの波形をFFTで見ると
画像

基本波と、奇数倍の高調波の他に、多数の高調波ノイズが見えています。
これは、DDSのコントローラ側のアルゴリズムによるジッタが原因です。タイマー割り込みで、DDSのレベルを更新しているのですが、実際に、出力されるのは、割り込みの外側で動作しているループプログラムなので、ループ処理のどこで割り込みが発生するかによって、出力タイミングがずれるのです。これは、DDSコントローラのソフトウェアを全面的に修正する必要があります。
このノイズが無ければ、歪率は、0.4%以下に収まってしまいます。
ちょっと残念です。

この記事へのコメント

TOSHI
2017年07月04日 19:28
気持玉を頂きましてありがとうございます。
プログラム自体のアルゴリズムは、チャタリング防止を意識していましたが、タイマーの設定に考慮が不足していたのか、デバッグの見逃しでしょうか。
荒さがしは、結構楽しめました。

この記事へのトラックバック