So-net無料ブログ作成
検索選択

Arduino DDS_VFO Ver.2 2.2inchLCD [Aruduino]

 前回のVFO Ver.1では、LCDに1.44inchTFTを採用したが、やはり老眼が必須の身としては小さい。
そこでさらに大きな表示を検討していた。そこでいつもお世話になっているJH8SST/7さんからご提供いただいた2.2inchTFTを採用することにした。
 折しもJA2GQPさんがツイッターで紹介されていたLCDが非常にきれいなフォント表示になっているのを見つけた。調べてみるとこのフォントは手持ちの2.2inchTFTにも適応していることが分かった。早々プログラミングを開始した。
DSCN3600.JPG
 
 基本的には前作1.44inchLCD-VFOのものを周到している。
従ってグラフィック関係だけ弄ればすんなり完成すると踏んだのであるが、そうは問屋がおろさなかった。
 考えてみれば当然かもしれないが、フォントがきれいな分抽画量が増える、さらに画面が大きい分抽画が増える。その結果、ただ置き換えただけではエンコーダーを回したときにカウントミスが出るようになってしまった。結局この部分に対する修正に苦労をしてしまった。
 また画面が大きくなったため、前回のデザインでは、間の抜けた感じとなってしまったので、いくつか新しい機能を追加した。

arduino_2.2VFOV2.jpg
【変更点】
・2.2inchLCD(ILI9341)
・arduino nano(unoは対応不可)
・RFインジケータ追加
・ModeをLSB,USB,CW,AMと4タイプ対応
 
 
【スケッチ】
・Library(ライブラリー)
 今回の目玉であるフォントであるが、<Ucglib.h>というものである。AdafulitGFXに比べると格段の美しさでギザギザ感がない。サイズも豊富である。ライブラリーは
からダウンロードできる。
 
注意
 <EF-AD9850.h>ライブラリーはそのままではエラーが出る。ライブラリー内のEF_AD9850.hをテキストエディター等で開き以下のように修正する必要がある。
27行目
  #include "WProgra.h" →#include "Arduino.h" 
 
・Ucgフォント
 このフォントの使い方は、ライブラリーの中にマニュアルがあり詳細に説明されている、またフォントもリストがあり、そのなかで気に入ったフォントを指定して使うことができる。
簡単にグラフィックのスケッチ例を示すと

-------------------------------------------------------------------
#include<Ucglib.h>

/*
* Hardware SPI Pins:
* Arduino nano sclk=13pin data=11pin
* 今回ハードウェアSPIを使ったので11,13pinは自動的に選択されるので
* 特にpin設定の必要はない。ソフトウェアSPIを使用する場合は、
* すべてのpin設定が必要となる。
*/

const byte __CS=10; // CS,DC,RSTは任意なのでpin指定の為ここで指定
const byte __DC=9;  // 下のUcgの命令でライブラリーに送る
const byte __RST=8; // サンプルスケッチに各種対応の命令が載っている。

Ucglib_ILI9341_18x240x320_HWSPI ucg(__DC,__CS,__RST);

void setup(){
ucg.begin(UCG_FONT_MODE_TRANSPARENT); //フォント使用開始宣言
ucg.clearScreen(); //画面初期化
ucg.setRotate90(); //画面を90度回転(使い勝手で決める)
}

void loop{

ucg.setFont(ucg_font_fub35_tr);  // フォントを指定
ucg.setPrintPos(100,100);        // 位置を指定
ucg.setColor(255,255,255);       // 色を指定(白)
ucg.print("JA2NKD");             // 文字を書く

}

--------------------------------------------------------------------
色はRGBの3色の数値指定。18bitなので各6bitで(0~63)であるが、どうも
(0~255)で指定するようである。(0,0,0)黒 (255,255,255)白
(255,0,0)赤 (0,255,0)緑 (0,0,255)青となる。
あとはマニュアルを参考にして下さい。

・RFレベル計
 arduino nanoは、A6,A7とunoよりアナログ入力が2つ多い。そこで、今回この2つをSメータとRFレベル系とした。スケッチとしてはRFレベル系もSメータと同様であるが、送信状態の時だけ動作するようになっている。

・モード
 アナログ入力をA6,A7としたことによりA0が別用途に使えるようになったことからモードを4種類(前回2種類)とし、A0,A1をキャリア切り換え用情報出力(2bit)とした。それに合わせて画面も4種類を表示するようにした。選択されているのが黄色、その他はグレーとした。

・周波数表示、Sメータ表示
 前回のスケッチをそのまま置き換えた場合、エンコーダを回すと表示がついて行かず不一致が発生した。取りこぼしである。それだけグラフィック表示が重たくなったということだ。そのため周波数表示は100KHz以下のみ変更されるようにしている。MHzは直接書いており変更しない。このためこのVFOの変更範囲は999KHz以下となる。HFにおいては問題ない。28MHzでも通常28MHz台の1MHzでOKと思われる。
 MHz台の表示を変更する(例えば7→21)場合はスケッチ内に以下のような部分があるので、必要なところの//を消して有効にし希望の数値をいれれば変更できるようにした。これで最大999MHzまで表示することが出来る。
538行
   ucg.setFont(ucg_font_fub35_tr);
    ucg.setColor(0,255,0);
//    ucg.setPrintPos(19,45);  //100Mhz台
//    ucg.print("4");
//    ucg.setPrintPos(47,45);  //10MHz台
//    ucg.print("3");
    ucg.setPrintPos(75,45);
    ucg.print("7");     // 1Mhz台
    ucg.setPrintPos(103,45);
    ucg.print(".");
    ucg.setPrintPos(273,45);
    ucg.print("0");  // 1Hz台
 
  また、Sメータも周波数切り替え時には止めている。なのでエンコーダを回したとき少々違和感があるかもしれないが、致し方ない。
 DSCN3604.JPG
   
以上簡単な説明でご容赦
動作ビデオとスケッチのリンクを載せておきます。
 
VIDEO
 
Sketch

まだarduino初心者(6月から始めた)であるが、何とかできるものである。そういった意味でもarduinoの人気が高いのは良くわかる。


nice!(2)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 2

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。