その4です。
Si5351Aと制御用のArduino(右上)を追加しました。
その後色々な処理を追加したところ、メモリーが足りなくなってきたので、メモリーを消費する原因を調べてみました。
処理量が多いのはさておき、結局のところライブラリ標準の16x16ドットのフォントが原因でした。
そこで、ベクタフォントにすればかなり削減できそうなので、開発することにしました。
例えば数字の「1」ですが、ビットマップフォントでは文字によらず32バイト必要ですが、ベクターフォントでは1本棒なので、始点と終点の座標だけで表現できます。
16ドットなので、X座標を上位8ビットY座標を下位8ビットにすれば2バイトで済みます。
また一筆書きで描画すれば、例えば3本の線で構成される「N」は4点で表現できるので、4バイトとなります。
「E」など一筆書きで表現できない文字は重複を許すことにより、強引に一筆書きにしました。
ただし、「:」など接続していない文字は無理なので他の文字に置き換えることにしました。
16x16ドットフォントの他に5x7ドットの小さいフォントもあればグラフの数値表示などで便利そうです。
同様にサポートしてもいいのですが、ベクタフォントなので、小さいフォントのデータを2倍すれば大きなフォントが簡単に作れます。
そこで、5x7ドットフォントの他に10x14ドットフォントもサポートすることにしました。
単純に2倍してもいいのですが、大きいフォントでは太い線にしたいので、1ドット分肉付けしました。
フォントデータの他に各フォントがどこから開始するかを示す位置テーブルを作成しました。
数字と英大文字でフォントデータが248バイト、位置テーブルが85バイトで収まりました。
英文は今の所全部大文字としますが、MHzやdBmなど単位で小文字が必要な部分のみサポートしました。
現状の画面です。
メインメニューです。テンキーの1-4を押すと遷移します。
キャラクタベースのメニューと線画っぽいフォントが相まって、懐かしい雰囲気の画面になりました。
<SIGNAL GENERATOR>画面です。
画面下にテンキーに割当られた機能のHELPを表示しました。
Si5351Aは3種類の信号を出せるので、それぞれの周波数が表示されています。
LVはレベルで0-4の5種類あり、0で出力停止、1-4がSi5351Aのドライブ電流2/4/6/8mAに対応し、テンキーの7-9でUP、4-6でDOWNできます。
SELは編集対象かどうかを示し、テンキーの1-3で選択できます。
[1]はSG1が選択されていることを示し[ENT]キーで周波数の入力が、[F^]/[FV]キーで設定された周波数ステップでのUP/DOWNができます。
[ENT]キーを押すとEDIT > でテンキーで周波数を直接入力できますが、訂正機能は未サポートです。
画面は12.3MHzの12.3を入力したところです。
周波数表示が更新されました。
[STEP]キーを押すと<CHANGE STEP>画面に遷移します。
テンキーで8種類の周波数ステップを選択できます。
[6]キーを押すと、周波数ステップが100KHzに変更されました。
[ESC]キーで前画面に戻ります。
周波数ステップは100KHzなので[F^]をキーを押すと12.4MHzになりました。
[ESC]キーでメインメニューに戻り[2]キーで<POWE METER>画面に遷移します。
ログアンプはまだ実装していないので、値はダミーです。
<FRMS>画面です。
操作方法は<SIGNAL GENERATOR>画面と同じですが、対象とする周波数がスキャン開始周波数(S)とスキャン終了周波数(E)です。
使用するSGを選択することができます。
周波数の変更やUP/DOWNはSGと同様です。
設定が終わったら[8][5]キーを押すとグラフ画面に切り替わりスキャンが開始されます。
グラフ画面です。
横軸は開始、終了周波数を10等分した目盛、縦軸は-80dBmから20dBmの表示の予定ですが、ログアンプのダイナミックレンジにより変更するかもしれません。
グラフはy=ax^2のダミーです。
Si5351Aと制御用のArduino(右上)を追加しました。
その後色々な処理を追加したところ、メモリーが足りなくなってきたので、メモリーを消費する原因を調べてみました。
処理量が多いのはさておき、結局のところライブラリ標準の16x16ドットのフォントが原因でした。
そこで、ベクタフォントにすればかなり削減できそうなので、開発することにしました。
例えば数字の「1」ですが、ビットマップフォントでは文字によらず32バイト必要ですが、ベクターフォントでは1本棒なので、始点と終点の座標だけで表現できます。
16ドットなので、X座標を上位8ビットY座標を下位8ビットにすれば2バイトで済みます。
また一筆書きで描画すれば、例えば3本の線で構成される「N」は4点で表現できるので、4バイトとなります。
「E」など一筆書きで表現できない文字は重複を許すことにより、強引に一筆書きにしました。
ただし、「:」など接続していない文字は無理なので他の文字に置き換えることにしました。
16x16ドットフォントの他に5x7ドットの小さいフォントもあればグラフの数値表示などで便利そうです。
同様にサポートしてもいいのですが、ベクタフォントなので、小さいフォントのデータを2倍すれば大きなフォントが簡単に作れます。
そこで、5x7ドットフォントの他に10x14ドットフォントもサポートすることにしました。
単純に2倍してもいいのですが、大きいフォントでは太い線にしたいので、1ドット分肉付けしました。
フォントデータの他に各フォントがどこから開始するかを示す位置テーブルを作成しました。
数字と英大文字でフォントデータが248バイト、位置テーブルが85バイトで収まりました。
英文は今の所全部大文字としますが、MHzやdBmなど単位で小文字が必要な部分のみサポートしました。
現状の画面です。
メインメニューです。テンキーの1-4を押すと遷移します。
キャラクタベースのメニューと線画っぽいフォントが相まって、懐かしい雰囲気の画面になりました。
<SIGNAL GENERATOR>画面です。
画面下にテンキーに割当られた機能のHELPを表示しました。
Si5351Aは3種類の信号を出せるので、それぞれの周波数が表示されています。
LVはレベルで0-4の5種類あり、0で出力停止、1-4がSi5351Aのドライブ電流2/4/6/8mAに対応し、テンキーの7-9でUP、4-6でDOWNできます。
SELは編集対象かどうかを示し、テンキーの1-3で選択できます。
[1]はSG1が選択されていることを示し[ENT]キーで周波数の入力が、[F^]/[FV]キーで設定された周波数ステップでのUP/DOWNができます。
[ENT]キーを押すとEDIT > でテンキーで周波数を直接入力できますが、訂正機能は未サポートです。
画面は12.3MHzの12.3を入力したところです。
周波数表示が更新されました。
[STEP]キーを押すと<CHANGE STEP>画面に遷移します。
テンキーで8種類の周波数ステップを選択できます。
[6]キーを押すと、周波数ステップが100KHzに変更されました。
[ESC]キーで前画面に戻ります。
周波数ステップは100KHzなので[F^]をキーを押すと12.4MHzになりました。
[ESC]キーでメインメニューに戻り[2]キーで<POWE METER>画面に遷移します。
ログアンプはまだ実装していないので、値はダミーです。
<FRMS>画面です。
操作方法は<SIGNAL GENERATOR>画面と同じですが、対象とする周波数がスキャン開始周波数(S)とスキャン終了周波数(E)です。
使用するSGを選択することができます。
周波数の変更やUP/DOWNはSGと同様です。
設定が終わったら[8][5]キーを押すとグラフ画面に切り替わりスキャンが開始されます。
グラフ画面です。
横軸は開始、終了周波数を10等分した目盛、縦軸は-80dBmから20dBmの表示の予定ですが、ログアンプのダイナミックレンジにより変更するかもしれません。
グラフはy=ax^2のダミーです。