ATtiny85を使って作成した可変周波数クロック発振器を更に一歩先へ進めるため、SSCG機能を追加している最中です。前回、基本方針〜検討を経て、詳細設計の途中まで終了しましたので、ここから設計を閉じて、機能評価まで走り抜けたい🏃と思います。
可変周波数クロック発振器にSSCG機能を追加したプログラムを以下にリンクします。
完成プログラム:ti85_vclkgen.ino
コンパイルしてATtiny85へ書き込んでください。コンパイル&書き込み方法はこちらです。こちらで言及した通り、「millis()/micros():Disabled」を選択しておかないと、コンパイルを失敗します。
今回のSSCGでは、目標周波数を中心として上下に周波数を変動させるため、可変周波数クロック発振器を作った時に生成したOSCCAL−周波数対応表を使います。ところが、この対応表は、OSCCAL=128を境に、不連続な特性です(下図)。

周波数を上下に変動させる時、この不連続点を跨いでしまうと、周波数の変動特性が歪んだりする影響が考えられます。
回避不能なので、注意して使ってみてください。
今回もATtiny85、Arduino UNO、328duinoを使って実験します。書き込むプログラムも含めて、こちらの実験と同じ装置を組み立ててください(下図)。

まず、目標仕様通り、周波数が変動しているかどうか、確かめたいと思います。
実験サンプル:【 】内はUNOシリアルモニタからの送信データ
【swr1,2,40,80,02,00】
OK+ swr1.0c[0x02]=0x40 ……OSCFRQ=8MHz(0x40=(8MHz−4MHz)×16)
OK+ swr1.0c[0x03]=0x80 ……PLLCSR=÷2分周×8逓倍
OK+ swr1.0c[0x04]=0x02 ……TCCR1=PCK/2
OK+ swr1.0c[0x05]=0x00 ……OCR1C=0x00(PWM周期=(0x00+1)×2)
OK: swr1 4
クロックCLKO周波数を8MHz÷2分周×8逓倍÷2分周÷(1×2)周期=8MHzに設定しました。
【swr1,6,64,80】
OK+ swr1.0c[0x06]=0x64 ……SSDEV=0x64=100=10.0%
OK+ swr1.0c[0x07]=0x80 ……SSPRD=0x80=128
OK: swr1 2
【swr1,0,03】……CMNDID=SSENコマンド
OK: swr1.0c[0x00]=0x03
続いて、SSCGを設定して、有効化しました。この設定で、周波数データを取得してみます。
【eval】
7804
7744
7696
7655
:
: (中略)
:
8217
8255
8285
8333
OK: eval
取得したデータをExcelで取り込んでグラフ化したのが以下図となります。

考察:
なお当方には、肝心なEMIノイズの評価環境は無いので、EMIノイズについては未評価です。
前節の実験では、周波数変動が期待通りに実行されている事を確かめたくて、変動幅や変動周期を極端な(大き目な)数値に設定していました。続いては、より実践的な設定で評価してみたいと思います。
【swr1,0,04】……CMNDID=SSDEコマンド
OK: swr1.0c[0x00]=0x04
SSCG設定を更新するためには、一旦SSCG機能を無効化する必要があります。SSDEコマンド(0x04)を書き込んで、SSCGを無効化しました。
【swr1,2,c0,80,02,00,28,30】
OK+ swr1.0c[0x02]=0xc0 ……OSCFRQ=16MHz(0xc0=(16MHz−4MHz)×16)
OK+ swr1.0c[0x03]=0x80 ……PLLCSR=÷2分周×8逓倍
OK+ swr1.0c[0x04]=0x02 ……TCCR1=PCK/2
OK+ swr1.0c[0x05]=0x00 ……OCR1C=0x00(PWM周期=(0x00+1)×2)
OK+ swr1.0c[0x06]=0x28 ……SSDEV=0x28=40=4.0%
OK+ swr1.0c[0x07]=0x30 ……SSPRD=0x30=48
OK: swr1 6
【swr1,0,03】……CMNDID=SSENコマンド
OK: swr1.0c[0x00]=0x03
出力クロックCLKO周波数を16MHz÷2分周×8逓倍÷2分周÷(1×2)周期=16MHz、SSCGを変動幅=4%、変動周期=48に設定しました。
【eval】コマンドで取得したデータをグラフ化すると、以下図となりました。

考察:
前節の16MHz&SSCGクロック駆動の状態で、328duinoにUSB⇔UART変換モジュール(FTDI、下図)を接続して、問題なくUART通信が実行できる事を確認済みです。

8N1形式のUARTが失敗しないギリギリの変動幅≒10%に対して、SSDEV=4%、実測値=約3.5%の余裕があり、この程度は問題なく通信できてくれないと駄目なのですけどね。実物の動作で確認できましたので、想定外の事態は発生していない様です。Good。
自作したSSCGの動作を確認できました。完成です。手元にEMIノイズを評価可能な装置が無いので、肝心なEMIノイズの評価はできませんが、設計通りの周波数変動を確認することができました。個人の実験としてはこれが限界でしょうね……。やり切りました。


