#include // include file for lcd display LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // pins for RS, E, DB4, DB5, DB6, Db7 int W_CLK=10; // Pin 10 - D10 - connect to AD9850 module word load clock pin (CLK) int FQ_UD=11; // Pin 11 - D11 - connect to freq update pin (FQ_UD) int DATA=12; // Pin 12 - D12 - connect to serial data load pin (AD9850 D7 = DATA) int RESET=13; // Pin 13 - D13 - connect to reset pin (RST). int clk_sense = 0; int dt_sense = 0; int clk_location = 3; // aPin int dt_location = 2; // bPin int result = 0; unsigned long freq; unsigned long dial_step; unsigned long carrier_centre; unsigned long min_freq; unsigned long max_freq; unsigned long hf_band; int bc; int band_change_repeat_rate = 400; // delay between each band selection int bc_delay = 100; // delay for displayed message int bs; int step_change_repeat_rate = 400; // delay between each step selection int bs_delay = 100; // delay for displayed message int step_alter_setting; // A3 variable int dial_change_analog_port = 3; // analog port A3 for dial step change int band_alter_setting; // A2 varaible int change_rf_band = 2; // analog port A2 for hf band plan change int oldA = LOW; // assume position 1 on the rotary encoder int oldB = LOW; // assume position 1 on the rotary encoder // start of arduino DDS VFO control program void pulseRESET() // pin 11 { digitalWrite(RESET, LOW); delayMicroseconds(10); digitalWrite(RESET, HIGH); delayMicroseconds(10); digitalWrite(RESET, LOW); } void pulseW_CLK() // pin 8 { digitalWrite(W_CLK, LOW); delayMicroseconds(10); digitalWrite(W_CLK, HIGH); delayMicroseconds(10); digitalWrite(W_CLK, LOW); } void pulseFQ_UD() // pin 9 { digitalWrite(FQ_UD, LOW); delayMicroseconds(10); digitalWrite(FQ_UD, HIGH); delayMicroseconds(10); digitalWrite(FQ_UD, LOW); } // frequency control of the AD9850 DDS device for transmitter void sendFrequency(float frequency) { freq = frequency * 4294967295/125000000; // note 125 MHz clock on AD9850 // if using a system clock of 100MHz by using the AMQRP DDS60 daughter board, then use program below //freq = frequency * 4294967295/100000000; // note 100 MHz clock on AD9850 AMQRP DDS60 daughter board for (int b=0; b<4; b++, freq>>=8) { tfr_byte(freq & 0xFF); // to serial program sub-routine } } // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line void tfr_byte(byte data) { for (int i=0; i<8; i++, data>>=1) { digitalWrite(DATA, data & 0x01); pulseW_CLK(); //after each bit sent, CLK is pulsed high } } // transfer the phase shift info plus trigger AD9850 internal loading // the DDS device maybe "powered up" with phase(0x00), or otherwise "powered down" with phase(0x04) void phase(byte angle) { { tfr_byte(angle); // Final control byte for AD9850 phase shift keying pulseFQ_UD();// Done! Should see output } } void getEncoderTurn() // rotary encoder sub-routine for rotary movement { // return -1, 0, +1 int newA = digitalRead(clk_location); int newB = digitalRead(dt_location); delay(5); // debounce delay if (newA != oldA || newB != oldB) { // something has changed if (oldA == LOW && newB == HIGH) // detected position 2 clockwise movement { result = -1; dial_frequency(); } if (oldA == LOW && newA == HIGH) // detected position 4 anti-clockwise movement { result = 1; dial_frequency(); } } if (newA == oldA && newB == oldB) // then no movement detected { result = 0; } oldA = newA; oldB = newB; } void dial_frequency() // to test if the band plan limits have been breached { if (carrier_centre == carrier_centre) { carrier_centre = carrier_centre + (result * dial_step); sendFrequency(carrier_centre); phase(0x00); // power up the dds vfo //Serial.println(result); display_info(); } if ((carrier_centre) >= (max_freq)) // maximum frequency limit of band plan { carrier_centre = max_freq; lcd.clear(); lcd.setCursor(0,0); lcd.print("freq= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); lcd.print("upper band limit"); delay(1000); // one second delay to show warning message } if ((carrier_centre) <= (min_freq)) // minimum frequency limit of band plan { carrier_centre = min_freq; lcd.clear(); lcd.setCursor(0,0); lcd.print("freq= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); lcd.print("lower band limit"); delay(1000); // one second delay to show warning message } } void display_info() // display the operating frequency and step change amount used { lcd.clear(); lcd.setCursor(0,0); lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); if (bs == 6 ) // to detect RTTY mode of dial_step change for RTTY calibration { lcd.setCursor(0,1); lcd.print("RTTY 170Hz shift"); } if (bs == 8 ) // to detect RTTY mode of dial_step change for RTTY calibration { lcd.setCursor(0,1); lcd.print("RTTY 475Hz shift"); } if (bs == 11 ) // to detect RTTY mode of dial_step change for RTTY calibration { lcd.setCursor(0,1); lcd.print("RTTY 625Hz shift"); } if (bs == 9 ) { lcd.setCursor(0,1); lcd.print("CW 500Hz tone"); } if (bs == 10 ) { lcd.setCursor(0,1); lcd.print("CW 600Hz tone"); } if (bs == 12 ) { lcd.setCursor(0,1); lcd.print("CW 700Hz tone"); } if (bs !=6 && bs != 8 && bs != 9 && bs != 10 && bs != 11 && bs != 12) { lcd.setCursor(0,1); lcd.print("step= "); lcd.print(dial_step); lcd.print("Hz"); } } void step_change() // to change the incremental or decremental step values of the dial frequency part one { step_alter_setting = analogRead(dial_change_analog_port); // analog port A3, upper and lower buttons for dial step cahnge if (step_alter_setting < 350) // cycle down the HF band { delay(step_change_repeat_rate); // sense delay for button bs = bs - 1; if (bs == 0) // to detect if the bottom of band, them set to top range for down count { bs = 31; // reach bottom now, starting from the top for downward count } selection_hf_band_step(); // selection of HF band } else if (step_alter_setting > 750) // cycle up the HF band { delay(step_change_repeat_rate); // sense delay for button bs = bs + 1; if (bs == 32) { bs = 1; // hit top end, now starting from botton end for upward count } selection_hf_band_step(); // selection of HF band } } void selection_hf_band_step() // to change the incremental or decremental step values of the dial frequency part two { if (bs == bs) // to show the bs and HF band settings use the IDE monitor app. { if (bs == 1 ) { dial_step = 1; // update display display_info(); delay(bs_delay); } else if (bs == 2 ) { dial_step = 5; // update display display_info(); delay(bs_delay); } else if (bs == 3 ) { dial_step = 10; // update display display_info(); delay(bs_delay); } else if (bs == 4 ) { dial_step = 25; // update display display_info(); delay(bs_delay); } else if (bs == 5 ) { dial_step = 100; // update display display_info(); delay(bs_delay); } else if (bs == 6 ) { dial_step = 170; // update display display_info(); delay(bs_delay); } else if (bs == 7 ) { dial_step = 250; // update display display_info(); delay(bs_delay); } else if (bs == 8 ) { dial_step = 475; // update display display_info(); delay(bs_delay); } else if (bs == 9 ) { dial_step = 500; // update display display_info(); delay(bs_delay); } else if (bs == 10 ) { dial_step = 600; // update display display_info(); delay(bs_delay); } else if (bs == 11 ) { dial_step = 625; // update display display_info(); delay(bs_delay); } else if (bs == 12 ) { dial_step = 700; // update display display_info(); delay(bs_delay); } else if (bs == 13 ) { dial_step = 1500; // update display display_info(); delay(bs_delay); } else if (bs == 14 ) { dial_step = 3000; // update display display_info(); delay(bs_delay); } else if (bs == 15 ) { dial_step = 3500; // update display display_info(); delay(bs_delay); } else if (bs == 16 ) { dial_step = 4000; // update display display_info(); delay(bs_delay); } else if (bs == 17 ) { dial_step = 5000; // update display display_info(); delay(bs_delay); } else if (bs == 18 ) { dial_step = 5500; // update display display_info(); delay(bs_delay); } else if (bs == 19 ) { dial_step = 6250; // update display display_info(); delay(bs_delay); } else if (bs == 20 ) { dial_step = 6500; // update display display_info(); delay(bs_delay); } else if (bs == 21 ) { dial_step = 8000; // update display display_info(); delay(bs_delay); } else if (bs == 22 ) { dial_step = 9000; // update display display_info(); delay(bs_delay); } else if (bs == 23 ) { dial_step = 10000; // update display display_info(); delay(bs_delay); } else if (bs == 24 ) { dial_step = 12500; // update display display_info(); delay(bs_delay); } else if (bs == 25 ) { dial_step = 25000; // update display display_info(); delay(bs_delay); } else if (bs == 26 ) { dial_step = 50000; // update display display_info(); delay(bs_delay); } else if (bs == 27 ) { dial_step = 100000; // update display display_info(); delay(bs_delay); } else if (bs == 28 ) { dial_step =250000; // update display display_info(); delay(bs_delay); } else if (bs == 29 ) { dial_step =500000; // update display display_info(); delay(bs_delay); } else if (bs == 30 ) { dial_step =1000000; // update display display_info(); delay(bs_delay); } else if (bs == 31 ) { dial_step =5000000; // update display display_info(); delay(bs_delay); } } } void band_change() // to change the hf band of operation part one { band_alter_setting = analogRead(change_rf_band); // analog port A2, upper and lower buttons HF band switching if (band_alter_setting < 350) // cycle down the HF band { delay(band_change_repeat_rate); // sense delay for button bc = bc - 1; if (bc == 0) // to detect if the bottom of band, them set to top range for down count { bc = 57; // reach bottom now starting from the top downwards } selection_hf_band(); // selection of HF band } else if (band_alter_setting > 750) // cycle up the HF band { delay(band_change_repeat_rate); // sense delay for button bc = bc + 1; if (bc == 58) { bc = 1; // hit top end, now starting from botton end for upward count } selection_hf_band(); // selection of HF band } } void selection_hf_band() // to change the hf band of operation part two { if (bc == bc) // to show the BC and HF band settings use the IDE monitor app. { // selection of operation HF band from "bc" and "band_flag" variables if (bc == 1 ) { carrier_centre = 136750; min_freq = 135700; max_freq = 137800; hf_band = 136; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VLF 136KHz QRSS"); delay(bc_delay); } else if (bc == 2 ) { carrier_centre = 475500; min_freq = 472000; max_freq = 479000; hf_band = 600; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("LF 600m CW,QRSS"); delay(bc_delay); } if (bc == 3) { carrier_centre = 1836000; min_freq = 1810000; max_freq = 2000000; hf_band = 160; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 160m CW QRP"); delay(bc_delay); } else if (bc == 4) { carrier_centre = 3560000; min_freq = 3500000; max_freq = 3800000; hf_band = 80; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 80m CW QRP"); delay(bc_delay); } else if (bc == 5) { carrier_centre = 3590000; min_freq = 3500000; max_freq = 3800000; hf_band = 80; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 80m digital"); delay(bc_delay); } else if (bc == 6) { carrier_centre = 3690000; min_freq = 3500000; max_freq = 3800000; hf_band = 80; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 80m SSB QRP"); delay(bc_delay); } else if (bc == 7) { carrier_centre = 5262000; min_freq = 5000000; max_freq = 5500000; hf_band = 60; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 60m CW QRP"); delay(bc_delay); } else if (bc == 8) { carrier_centre = 5290000; min_freq = 5000000; max_freq = 5500000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 60m beacon"); delay(bc_delay); } else if (bc == 9) { carrier_centre = 7015000; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m CW call"); delay(bc_delay); } else if (bc == 10) { carrier_centre = 7028000; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m CW call"); delay(bc_delay); } else if (bc == 11) { carrier_centre = 7030000; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m CW QRP"); delay(bc_delay); } else if (bc == 12) { carrier_centre = 7040000; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m CW call"); delay(bc_delay); } else if (bc == 13) { carrier_centre = 7047500; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m CW call"); delay(bc_delay); } else if (bc == 14) { carrier_centre = 7090000; min_freq = 7000000; max_freq = 7200000; hf_band = 40; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 40m SSB QRP"); delay(bc_delay); } else if (bc == 15 ) { carrier_centre = 10106000; min_freq = 10100000; max_freq = 10150000; hf_band = 30; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 30m CW call"); delay(bc_delay); } else if (bc == 16 ) { carrier_centre = 10116000; min_freq = 10100000; max_freq = 10150000; hf_band = 30; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 30m CW QRP"); delay(bc_delay); } else if (bc == 17 ) { carrier_centre = 10145000; min_freq = 10100000; max_freq = 10150000; hf_band = 30; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 30m digital"); delay(bc_delay); } else if (bc == 18 ) { carrier_centre = 14060000; min_freq = 14000000; max_freq = 14350000; hf_band = 20; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 20m CW QRP"); delay(bc_delay); } else if (bc == 19 ) { carrier_centre = 14080000; min_freq = 14000000; max_freq = 14350000; hf_band = 20; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 20m digital"); delay(bc_delay); } else if (bc == 20 ) { carrier_centre = 14100000; min_freq = 14000000; max_freq = 14350000; hf_band = 20; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 20m Beacon"); delay(bc_delay); } else if (bc == 21) { carrier_centre = 14285000; min_freq = 14000000; max_freq = 14350000; hf_band = 20; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 20m SSB QRP"); delay(bc_delay); } else if (bc == 22 ) { carrier_centre = 18086000; min_freq = 18068000; max_freq = 18168000; hf_band = 17; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 17m CW QRP"); delay(bc_delay); } else if (bc == 23 ) { carrier_centre = 18100000; min_freq = 18068000; max_freq = 18168000; hf_band = 17; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 17m digital"); delay(bc_delay); } else if (bc == 24 ) { carrier_centre = 18110000; min_freq = 18068000; max_freq = 18168000; hf_band = 17; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 17m beacon"); delay(bc_delay); } else if (bc == 25 ) { carrier_centre = 21060000; min_freq = 21000000; max_freq = 21450000; hf_band = 15; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 15m CW QRP"); delay(bc_delay); } else if (bc == 26 ) { carrier_centre = 21085000; min_freq = 21000000; max_freq = 21450000; hf_band = 15; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 15m digital"); delay(bc_delay); } else if (bc == 27 ) { carrier_centre = 21150000; min_freq = 21000000; max_freq = 21450000; hf_band = 15; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 15m beacon"); delay(bc_delay); } else if (bc == 28 ) { carrier_centre = 21285000; min_freq = 21000000; max_freq = 21450000; hf_band = 15; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 15m QRP"); delay(bc_delay); } else if (bc == 29) { carrier_centre = 24906000; min_freq = 24890000; max_freq = 24990000; hf_band = 12; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 12m CW QRP"); delay(bc_delay); } else if (bc == 30 ) { carrier_centre = 24925000; min_freq = 24890000; max_freq = 24990000; hf_band = 12; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 12m digital"); delay(bc_delay); } else if (bc == 31 ) { carrier_centre = 24930000; min_freq = 24890000; max_freq = 24990000; hf_band = 12; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 12m beacon"); delay(bc_delay); } else if (bc == 32 ) { carrier_centre = 28060000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m CW call"); delay(bc_delay); } else if (bc == 33 ) { carrier_centre = 28100000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m digital"); delay(bc_delay); } else if (bc == 34 ) { carrier_centre = 28200000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m Beacon"); delay(bc_delay); } else if (bc == 35 ) { carrier_centre = 28360000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m SSB QRP"); delay(bc_delay); } else if (bc == 36 ) { carrier_centre = 29400000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m satellite"); delay(bc_delay); } else if (bc == 37 ) { carrier_centre = 29600000; min_freq = 28000000; max_freq = 29700000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("HF 10m FM call"); delay(bc_delay); } else if (bc == 38 ) { carrier_centre = 50150000; min_freq = 50000000; max_freq = 52000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 6m SSB call"); delay(bc_delay); } else if (bc == 39 ) { carrier_centre = 50305000; min_freq = 50000000; max_freq = 52000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 6m PSK31"); delay(bc_delay); } else if (bc == 40 ) { carrier_centre = 50401000; min_freq = 50000000; max_freq = 52000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 6m WSPR"); delay(bc_delay); } else if (bc == 41 ) { carrier_centre = 50510000; min_freq = 50000000; max_freq = 52000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 6m SSTV"); delay(bc_delay); } else if (bc == 42 ) { carrier_centre = 50600000; min_freq = 50000000; max_freq = 52000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 6m digital"); delay(bc_delay); } else if (bc == 43 ) { carrier_centre = 70090000; min_freq = 70000000; max_freq = 70500000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 4m WSPR"); delay(bc_delay); } else if (bc == 44 ) { carrier_centre = 70200000; min_freq = 70000000; max_freq = 70500000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 4m SSB/CW"); delay(bc_delay); } else if (bc == 45 ) { carrier_centre = 70260000; min_freq = 70000000; max_freq = 70500000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 4m AM/FM"); delay(bc_delay); } else if (bc == 46 ) { carrier_centre = 70300000; min_freq = 70000000; max_freq = 70500000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 4m digital"); delay(bc_delay); } else if (bc == 47 ) { carrier_centre = 70325000; min_freq = 70000000; max_freq = 70500000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("VHF 4m Dx call"); delay(bc_delay); } else if (bc == 48 ) { carrier_centre = 500; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 500Hz CW tone"); delay(bc_delay); } else if (bc == 49 ) { carrier_centre = 600; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 600Hz CW tone"); delay(bc_delay); } else if (bc == 50 ) { carrier_centre = 700; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 700Hz CW tone"); delay(bc_delay); } else if (bc == 51 ) { carrier_centre = 1000; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 1000Hz tone"); delay(bc_delay); } else if (bc == 52 ) { carrier_centre = 1275; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("RTTY space (UK)"); delay(bc_delay); } else if (bc == 53 ) { carrier_centre = 1800; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 1800Hz PSK31"); delay(bc_delay); } else if (bc == 54 ) { carrier_centre = 2125; min_freq = 1; max_freq = 50000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("RTTY space (USA)"); delay(bc_delay); } else if (bc == 55 ) { carrier_centre = 2400; min_freq = 1; max_freq = 8000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF NBFM dev test"); delay(bc_delay); } else if (bc == 56 ) { carrier_centre = 3300; min_freq = 1; max_freq = 20000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("AF 1Hz - 20KHz"); delay(bc_delay); } else if (bc == 57 ) { carrier_centre = 9000000; min_freq = 20000; max_freq = 75000000; hf_band = 10; // update display lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("dial= "); lcd.print(carrier_centre); lcd.print("Hz"); lcd.setCursor(0,1); // second line of display lcd.print("RF 20KHz - 75MHz"); delay(bc_delay); } } } void setup() { //Serial.begin(9600); lcd.begin(16,2); lcd.clear(); pinMode(clk_location, INPUT); pinMode(dt_location, INPUT); // configure arduino data pins for output pinMode(FQ_UD, OUTPUT); pinMode(W_CLK, OUTPUT); pinMode(DATA, OUTPUT); pinMode(RESET, OUTPUT); pulseRESET(); pulseW_CLK(); pulseFQ_UD(); // this pulse enables serial mode - Datasheet page 12 figure 10 oldA = digitalRead(clk_location); oldB = digitalRead(dt_location); // start up message lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("Radio Frequency"); lcd.setCursor(0,1); // second line of display lcd.print("signal generator"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("AF 1Hz - 20KHz"); lcd.setCursor(0,1); // second line of display lcd.print("RF 20KHz - 75MHz"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("Ham Radio with"); lcd.setCursor(0,1); // second line of display lcd.print("General Coverage"); delay(3000); lcd.clear(); lcd.setCursor(0,0); // first line of display lcd.print("programmed by"); lcd.setCursor(0,1); // second line of display lcd.print("Alastair GW0AJU"); delay(3000); // start up settings for signal generator bs = 4; // 25Hz step inc/dec selection_hf_band_step(); bc = 18; // start up on 20m band selection_hf_band(); } void loop() { band_change(); step_change(); getEncoderTurn(); }