/* * STM32F103C8T6 Si5351A 7MHz VFO TEST * 2018.3.7 * JH7UBC Keiji Hata */ #include #include #include "src/Ucglib.h" #include "si5351a3.h" //Wire.hも含む //ロータリエンコーダ関係定義 #define ENC_A PB13 #define ENC_B PB12 Rotary r = Rotary(ENC_A,ENC_B); //SW関係の定義 #define SW_STEP PB14 #define SW_RIT PB15 //2.2"TFT関係定義 #define __CS PB10 //CS #define __DC PB0 //D/S #define __RST PB1 //RESET // PA7 SDA(MOSI) // PA5 SCK // 3.3V Vcc,LED Ucglib_ILI9341_18x240x320_HWSPI ucg(__DC,__CS,__RST); //Si5351A関係の定義 long freq = 7000000;//周波数初期値 int STEP =1000;//周波数STEP初期値 String freqt = String(freq); String fH_old = ""; String fM_old = ""; String fL_old = ""; long freq_old = 7000000; void setup(){ //ロータリーエンコーダ割り込み設定 attachInterrupt(ENC_A,rotary_encoder,CHANGE); attachInterrupt(ENC_B,rotary_encoder,CHANGE); //ロータリーエンコーダ使用ピンのプルアップ pinMode(ENC_A,INPUT_PULLUP); pinMode(ENC_B,INPUT_PULLUP); //SW使用ピンのプルアップ pinMode(SW_STEP,INPUT_PULLUP); //初期画面の表示 //TFT関係の設定 ucg.begin(UCG_FONT_MODE_TRANSPARENT); ucg.clearScreen(); //画面初期化 ucg.setRotate90(); //画面を90度回転 //Titleの表示 ucg.setFont(ucg_font_ncenB12_tr); ucg.setColor(0,0,255); ucg.setPrintPos(5,20); ucg.print("STM32duino Si5351A 7MHz VFO test"); //周波数初期値表示 Freq_Disp(freq); ucg.setPrintPos(85,80); ucg.print("."); ucg.setPrintPos(185,80); ucg.print("."); //周波数STEPの表示 ucg.setFont(ucg_font_fur17_tr); ucg.setColor(255,255,255); ucg.setPrintPos(60,115); ucg.print("STEP"); Step_Disp(); //Si5351Aの設定 Wire.begin(); si5351aXtalCp(_6pF); // 6pF set Vfo_out(freq); } //main loop void loop(){ if(digitalRead(SW_STEP) == LOW) Set_Step(); // STEP sw check if (freq != freq_old){ Vfo_out(freq); freq_old = freq; } } //ロータリーエンコーダ割り込み処理 void rotary_encoder(){ unsigned char result = r.process(); if(result){ if(result == DIR_CW){ freq += STEP; }else{ freq -= STEP; } Freq_Disp(freq); } } //周波数表示 void Freq_Disp(long frequency){ freqt = String(frequency); String fH = freqt.substring(0,1); String fM = freqt.substring(1,4); String fL = freqt.substring(4,6); ucg.setFont(ucg_font_fur35_tr);//Font設定 //MHzの表示 if (fH != fH_old){ ucg.setColor(0,0,0); ucg.drawBox(60,40,30,40); ucg.setColor(0,255,255); ucg.setPrintPos(60,80); ucg.print(fH); fH_old = fH; } //KHzの表示 if (fM != fM_old){ ucg.setColor(0,0,0); ucg.drawBox(100,40,80,40); ucg.setColor(0,255,255); ucg.setPrintPos(100,80); ucg.print(fM); fM_old = fM; } //Hzの表示 if (fL != fL_old){ ucg.setColor(0,0,0); ucg.drawBox(200,40,70,40); ucg.setColor(0,255,255); ucg.setPrintPos(200,80); ucg.print(fL); fL_old = fL; } } //STEP切り替え void Set_Step(){ if (STEP == 10){ STEP = 1000; }else{ STEP /= 10; } delay(10); Step_Disp(); while(digitalRead(SW_STEP) == LOW);{ delay(10); } } //STEP表示 void Step_Disp(){ ucg.setFont(ucg_font_fur17_tr); ucg.setColor(0,0,0); ucg.drawBox(60,120,70,35); ucg.setColor(255,255,255); ucg.setPrintPos(60,140); if (STEP == 10)ucg.print("10Hz"); if (STEP == 100)ucg.print("100Hz"); if (STEP == 1000)ucg.print("1KHz"); } //Si5351A out void Vfo_out(long Freq){ si5351aSetFrequency(Freq,_8mA); // Strength 8mA set }