1Hz to 33 MHz ARDUINO Signal generator.

A Signal Generator with 0 to -127dBm attenuation and AM modulation

Part 1

The GENERATOR







Dimensions : 100mm X 55mm single layer
 







 The GENERATOR SKETCH


 //An original idea of AD7C adapted by F8VOA for for personal use.
//The program may be freely used for personal but not for commercial purposes.

//_______________________Determine and open the "library"________________________________________________________
#include <Adafruit_GFX.h>              // Core graphics library https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_ST7735.h>           // Hardware-specific library https://github.com/adafruit/Adafruit-ST7735-Library
#include <SPI.h>
#include <AD9850.h>                    // AD-9850 DDS generator https://github.com/F4GOJ/AD9850
#include <rotary.h>                    // Use the rotary.h your kind of encoder (different options)
#include <Rotary.h>                    // https://www.ebay.fr/itm/10-pieces-12-mm-key-switch-rotary-encoder-switch-LW/172336809060?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
#include <EEPROM.h>

//____________________________1.8 SPI TFT 128*160 (KMR-1.8 SPI)screen settings___________________________________
  // http://henrysbench.capnfatz.com/henrys-bench/arduino-displays/1-8tft-v1-0-st7736-arduino-tutorial-1-hello-world/#comment-34975
  #define TFT_SCLK 13                  // Arduino pin D13 ==> pin 9  1.8" TFT Display SCLK.
  #define TFT_MOSI 11                  // Arduino pin D11 ==> pin 8  1.8" TFT Display MOSI.
  #define TFT_CS   10                  // Arduino pin D10 ==> pin 10 1.8" TFT Display CS.
  #define TFT_RST  9                   // Arduino pin D9  ==> pin 6  1.8" TFT Display RST.
  #define TFT_DC   8                   // Arduino pin D8  ==> pin 7  1.8" TFT Display DC.
 
  Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

//______________________Some settings to do before running the program___________________________________________
#define W_CLK 7                        // Arduino Pin D7 ==> pin 2 AD9850  W_CLK.
#define FQ_UD 6                        // Arduino Pin D6 ==> pin 3 AD9850  FQ_UD.
#define DATA  5                        // Arduino Pin D5 ==> pin 4 AD9850  DATA of D7.
#define RESET 4                        // Arduino Pin D4 ==> pin 5 AD9850  RST.

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

Rotary r = Rotary(2,3);                // Arduino Pin D2 & D3 ==> Rotary encoder( frequency connects to interrupt pins)
int_fast32_t freq_start=100;           // Quick start on 100 Hz (100 Hz button on front panel )
int_fast32_t freq_start1=1000;         // Quick start on 1KHz (1 KHz button on front panel )
int_fast32_t freq_start2=1000000;      // Quick start on 1 MHz (1 MHz button on front panel )
int_fast32_t rx=10000000;              // First start-up VFO/Generator frequency .(32 bit number)
int_fast32_t rx2=1;                    // variable writing the  "updated frequency" the memory(32 bit number)
int_fast32_t increment = 1;            // First start-up increment frequency in Hz.(32 bit number)

const int dB_relay = A0;               // Set A0 as dB_relay control
const int dB_button = A5;              // Set A5 as dB_button control (switch between 0 and 10dBm output)

int dB_state = 0;                      // Set the Old state of the dB_button to 0 (control state)
int dB_state1 = 0;                     // Set the New state of the dB_button to 0 (control state)

int step_button = 0;                   // Set the state of the step_button to 0 (step settings on front panel)
int Hz_button = 0;                     // Set the state of the direct 100Hz button to 0
int KHz_button = 0;                    // Set the state of the direct 1KHz button to 0
int MHz_button = 0;                    // Set the state of the direct 1MHz button to 0

String step_freq = "1 Hz";             // String for the step-frequency
byte ones,tens,hundreds,thousands,tenthousands,hundredthousands,millions ;  //Placeholders
String freq;                           // string to hold the frequency
int_fast32_t timepassed = millis();    // int to hold the arduino millis since startup (32 bit number)
int memstatus = 1;                     // value to notify if memory is current or old. 0=old, 1=current.

int ForceFreq = 0;                     // Change this to 0 after you upload and run a working sketch to activate the EEPROM memory. 
                                       // YOU MUST PUT THIS BACK TO 0 AND UPLOAD THE SKETCH AGAIN AFTER STARTING FREQUENCY IS SET!

//____________________Setup the Pin-modes_______________________________________________________________________
void setup() {
  Serial.begin(9600);

  pinMode(dB_relay, OUTPUT);           // Determine the dB_relay (A0) as switch for the 0dB-mode
  digitalWrite(dB_relay, LOW);         // Make dB_relay 0-Volt (LOW)
 
  pinMode(A1,INPUT);                   // 100Hz switch. GND (LOW) when pushed.
  digitalWrite(A1,HIGH);               // Make pin A1 HIGH (5V)
 
  pinMode(A2,INPUT);                   // 1KHz switch. GND (LOW) when pushed.
  digitalWrite(A2,HIGH);               // Make pin A2 HIGH (5V)
 
  pinMode(A3,INPUT);                   // 1MHz switch. GND (LOW) when pushed.
  digitalWrite(A3,HIGH);               // Make pin A3 HIGH (5V)
 
  pinMode(A4,INPUT);                   // Step-switch ( on frequency encoder). GND (LOW) when pushed.
  digitalWrite(A4,HIGH);               // Make pin A4 HIGH (5V)
 
  pinMode(dB_button,INPUT_PULLUP);     // 0dB-switch. GND (LOW) when pushed.
  digitalWrite(dB_button,HIGH);        // Make dB_button HIGH (5V)
 
  pinMode(FQ_UD, OUTPUT);              // Output Arduino Pin D6 ==> AD9850 pin 3 FQ_UD.
  pinMode(W_CLK, OUTPUT);              // Output Arduino Pin D7 ==> AD9850 pin 2 W_CLK.
  pinMode(DATA, OUTPUT);               // Output Arduino Pin D5 ==> AD9850 pin 4 DATA of D7.
  pinMode(RESET, OUTPUT);              // Output Arduino Pin D4 ==> AD9850 pin 5 RST.
 
  pinMode(2, INPUT_PULLUP);            // Make pin2 as en INPUT with PULLUP resistor
  pinMode(3, INPUT_PULLUP);            // Make pin3 as en INPUT with PULLUP resistor
   
                    //________First initialization of the tft screen with permanent data_________
 tft.initR(INITR_BLACKTAB);                                                  // https://forum.arduino.cc/index.php?topic=236304.0
 tft.setRotation(1);                                                         // Turn the screen over 270°(1=90° , 2=180° , 3=270° )
 tft.setTextWrap(false);                                                     // Don't stop writng at the end of the screen(cr)
 tft.fillScreen(ST7735_BLACK);                                               // Fill up the screen with BLACK COLOR

 tft.setCursor(1,1);                                                         // Place the cursor on line 1 , position 1
 tft.setTextSize(1);                                                         // Set the textSize on standard size
 tft.setTextColor(ST7735_WHITE);                                             // Set the textColor to WHITE
 tft.println(" -F8VOA Signal Generator-");                                      

 tft.setCursor(15, tft.height() -20);                                        // Place the cursor on line -20 , position 15
 tft.setTextSize(1);                                                         // Set the textSize on standard size
 tft.drawFastHLine(0, tft.height() - 23, tft.width()-10, ST7735_WHITE);      // Draw a white line on line -23 , position 0
 tft.setTextColor(ST7735_WHITE);                                             // Set the textColor to WHITE
 tft.println("AD9850 1 Hz to 30 Mc ");                                        
 tft.print("   Sinewave generator");                                        
 tft.setTextColor(ST7735_CYAN);                                              // Set the textColor to CYAN
 tft.setCursor(10, 20);                                                      // Place the cursor on line 10 , position 20
 tft.setTextSize(1);                                                         // Set the textSize on standard size
 tft.print("Step: ");                                                       
 tft.setTextSize(2);                                                         // Set the textSize on n°2 size
 tft.setCursor(60, 15);                                                      // Place the cursor on line 15 , position 60
 tft.print(step_freq);                                                       // Print the Step-frequency

 //_______________________________________Interrupt settings___________________________________
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
   
  pulseHigh(RESET);                                          //High clears all registers exept the input register
  pulseHigh(W_CLK);                                          //Pulse high the word load clock
  pulseHigh(FQ_UD);                                          //this pulse enables serial mode on the AD9850 - Datasheet page 12.
   
//_______________________________________Read the frequency from the memory______________________
  if (ForceFreq == 0) {
    freq = String(EEPROM.read(0))+String(EEPROM.read(1))+String(EEPROM.read(2))+String(EEPROM.read(3))+String(EEPROM.read(4))+String(EEPROM.read(5))+String(EEPROM.read(6));
    rx = freq.toInt(); 
  }
}
//_______________________________________________________________________________________________

// _________________Interrupt routine to snap rotary-encoder ____________________________________
ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result) {   
    if (result == DIR_CW){rx=rx+increment;}              // If the result is clockwize then frequency = frequency + step
    else {rx=rx-increment;};                             // If the result is counter clockwize then frequency = frequency - step
      if (rx >=35000000){rx=rx2;};                       // Top-limitation of the Generator/VFO.(change this for your own use)
      if (rx <=9){rx=rx2;};                              // Bottem-limitation of the frequency Generator/VFO.(change this for your own use)
     
  }
}

//_________Frequency calculation(Frequentie=<sys clock>*<frequency tuning word>/2^32)_____________
void sendFrequency(double frequency) { 
  int32_t freq = frequency * 4294967295/125000000;      // The AD-9850 clock-oscillator is 125 MHz.
                                                        // A small frequency variation is possible( do the math).
  for (int b=0; b<4; b++, freq>>=8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0x000);                                      // The final control-byte (all 0 for 9850 chip).
  pulseHigh(FQ_UD);                                     // Done!  the frequency is avalable
}

//______________Byte transfer , 1 bit at the time , first LSB  via serial DATA ==> AD9850__________
void tfr_byte(byte data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);                                   // After every bit send , pulse the CLK on 5V ( high)
  }
}

//____________________Print the signal-strength on the screen_______________________________________
void printsign()
    {Serial.println(dB_state);Serial.println(dB_state1);
       if (dB_state == 0)
         {digitalWrite(dB_relay, HIGH);Serial.println(dB_relay);
         dB_state1 = dB_state;
         tft.fillRect(35,80,100,20,ST7735_BLACK);
          tft.setTextColor(ST7735_YELLOW);
          tft.setTextSize(2);
          tft.setCursor(35,80);
          tft.print( "  0dBm");
        }
         
       else
         {digitalWrite(dB_relay, LOW);
         dB_state1 = dB_state;
         tft.fillRect(35,80,100,20,ST7735_BLACK);
          tft.setTextColor(ST7735_CYAN);
          tft.setTextSize(2);
          tft.setCursor(35,80);
          tft.print( "+10dBm");
   }
    }   

//______________________The frequency step settings________________________________________________
void setincrement(){
  if(increment == 1){increment = 10; step_freq = "10 Hz";}
  else if (increment == 10){increment = 50; step_freq = "50 Hz";}
  else if (increment == 50){increment = 100;  step_freq = "100 Hz";}
  else if (increment == 100){increment = 500; step_freq="500 Hz"; }
  else if (increment == 500){increment = 1000; step_freq="1 Kc"; }
  else if (increment == 1000){increment = 2500; step_freq="2.5 Kc"; }
  else if (increment == 2500){increment = 5000; step_freq="5 Kc"; }
  else if (increment == 5000){increment = 10000; step_freq="10 Kc";}
  else if (increment == 10000){increment = 100000; step_freq="100 Kc";}
  else if (increment == 100000){increment = 1000000; step_freq="1 Mc";}
  else{increment = 1; step_freq = "1 Hz";} 

//____________________Print the frequency-step on the screen_______________________________________
 tft.fillRect(0, 15, 160, 20, ST7735_BLACK);
 tft.setTextColor(ST7735_CYAN);
 tft.setCursor(10, 20);
 tft.setTextSize(1);
 tft.print("Step");
 tft.setTextSize(2);
 tft.setCursor(60, 15);
 tft.print(step_freq);
 delay(250); // Adjust this delay to speed up/slow down the button menu scroll speed.
};

//___________________Print the generator frequency on the screen___________________________________
void showFreq(){
    millions = int(rx/1000000);
    hundredthousands = ((rx/100000)%10);
    tenthousands = ((rx/10000)%10);
    thousands = ((rx/1000)%10);
    hundreds = ((rx/100)%10);
    tens = ((rx/10)%10);
    ones = ((rx/1)%10);
   
   if (millions > 0) {                                               // Frequency in the x.xxx.xxx range
  tft.fillRect(0, 40, 160, 35, ST7735_BLACK);
  tft.setTextColor(ST7735_GREEN);
  tft.setTextSize(2); 
  tft.setCursor(5, 50);
  tft.print(millions);
  tft.print(",");
  tft.setTextColor(ST7735_YELLOW);
  tft.print(hundredthousands);
  tft.print(tenthousands);
  tft.print(thousands);
  tft.print(".");
  tft.setTextColor(ST7735_CYAN);
  tft.print(hundreds);
  tft.print(tens);
  tft.print(ones);
  tft.setTextColor(ST7735_BLUE);
  tft.print(" Mc");
   }
   else if (millions == 0 & hundredthousands > 0){                   // Frequency in the xxx.xxx range
  tft.fillRect(0, 40, 160, 35, ST7735_BLACK);
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2); 
  tft.setCursor(5, 50);
  tft.print(" ");
  tft.print(hundredthousands);
  tft.print(tenthousands);
  tft.print(thousands);
  tft.print(",");
  tft.setTextColor(ST7735_CYAN);
  tft.print(hundreds);
  tft.print(tens);
  tft.print(ones);
  tft.setTextColor(ST7735_BLUE);
  tft.print(" Kc");
  }
  else if (millions == 0 & hundredthousands == 0 & tenthousands > 0){    // Frequency in the xx.xxx range
  tft.fillRect(0, 40, 160, 35, ST7735_BLACK);
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2); 
  tft.setCursor(5, 50);
  tft.print("  ");
  tft.print(tenthousands);
  tft.print(thousands);
  tft.print(",");
  tft.setTextColor(ST7735_CYAN);
  tft.print(hundreds);
  tft.print(tens);
  tft.print(ones);
  tft.setTextColor(ST7735_BLUE);
  tft.print(" Kc");
  }
  else if  (millions == 0 & hundredthousands == 0 & tenthousands == 0 & thousands > 0){  // Frequency in the x.xxx range
  tft.fillRect(0, 40, 160, 35, ST7735_BLACK);
  tft.setTextColor(ST7735_YELLOW);
  tft.setTextSize(2); 
  tft.setCursor(5, 50);
  tft.print("  ");
  tft.print(thousands);
  tft.print(",");
  tft.setTextColor(ST7735_CYAN);
  tft.print(hundreds);
  tft.print(tens);
  tft.print(ones);
  tft.setTextColor(ST7735_BLUE);
  tft.print(" Kc"); 
  }
  else   {                                          // Frequency in the xxx range
  tft.fillRect(0, 40, 160, 35, ST7735_BLACK);
  tft.setTextColor(ST7735_CYAN);
  tft.setTextSize(2); 
  tft.setCursor(10, 50);
  tft.print("   ");
  tft.print(hundreds);
  tft.print(tens);
  tft.print(ones);
  tft.setTextColor(ST7735_BLUE);
  tft.print(" Hz");
  }
  timepassed = millis();
  memstatus = 0; // Trigger memory write
};

//_____________Write the frequency to the memory_______________________________________________
void storeMEM(){
   EEPROM.write(0,millions);
   EEPROM.write(1,hundredthousands);
   EEPROM.write(2,tenthousands);
   EEPROM.write(3,thousands);
   EEPROM.write(4,hundreds);      
   EEPROM.write(5,tens);
   EEPROM.write(6,ones);  
   memstatus = 1;  // Let program know memory has been written
};

// ________________________________Start the loop______________________________________________
void loop() {
    
   {dB_state=digitalRead(dB_button);if (dB_state != dB_state1){printsign();}                       
  
  {if (rx != rx2){sendFrequency(rx);rx2 = rx; showFreq();}}
                    // ____________________Set the step.________________________
   {step_button =digitalRead(A4);  if( step_button == LOW) {setincrement();}} 
                    // ______________Set the start-frequency.___________________
   {Hz_button =  digitalRead(A1);  if( Hz_button ==  LOW) { rx=freq_start; }}
   {KHz_button = digitalRead(A2);  if( KHz_button == LOW) { rx=freq_start1;}}
   {MHz_button = digitalRead(A3);  if( MHz_button == LOW) { rx=freq_start2;}}
                    // ______________Write to the memory________________________ 
    {if(memstatus == 0){ if(timepassed+2000 < millis()){storeMEM(); }}
      }} }

//_________________________End_________________________________________________________


 The circuit diagram.
Part 2

The ATTENUATOR sketch



//Attenuater sketch for the MARCOGEN 0dBm to -127dBm - design by F8VOA

/*The program may be freely used for personal and but not for commercial purposes.

  1) TFT-screen  = https://www.ebay.fr/itm/263449145336

  2) Rotator = https://www.ebay.fr/itm/10-pieces-12-mm-key-switch-rotary-encoder-switch-LW/172336809060?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

  3) Atmega 328 = https://www.ebay.fr/itm/IC-ATMEGA328P-PU-ATMEGA328P-DIP28-Microcontroller-ATMEL-NEW-DIP-SOCKET/253239946774?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

  4) Relay = https://www.ebay.fr/itm/10Pcs-hk19f-dc12v-shg-dc-12v-coil-dpdt-8pin-pcb-realplay-power-relay-GT/152958373987?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

  5) More info on " http://f8voa.blogspot.com" */

//___________________________________________The Library________________________________________________________

#include <Adafruit_GFX.h>              // Core graphics library https://github.com/adafruit/Adafruit-GFX-Library

#include <Adafruit_ST7735.h>           // Hardware-specific library https://github.com/adafruit/Adafruit-ST7735-Library

#include <SPI.h>

#include <rotary.h>                    //Use the rotary.h your kind of encoder (different options)

                                       // https://www.ebay.fr/itm/10-pieces-12-mm-key-switch-rotary-encoder-switch-LW/172336809060?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

//____________________________The 1.8 SPI TFT 128*160 (KMR-1.8 SPI) definition___________________________________

  // http://henrysbench.capnfatz.com/henrys-bench/arduino-displays/1-8tft-v1-0-st7736-arduino-tutorial-1-hello-world/#comment-34975

  #define TFT_SCLK 13                  // Arduino pin D13 ==> pin 9  1.8" TFT Display SCLK.

  #define TFT_MOSI 11                  // Arduino pin D11 ==> pin 8  1.8" TFT Display MOSI.

  #define TFT_CS   10                  // Arduino pin D10 ==> pin 10 1.8" TFT Display CS.

  #define TFT_RST  9                   // Arduino pin D9  ==> pin 6  1.8" TFT Display RST.

  #define TFT_DC   8                   // Arduino pin D8  ==> pin 7  1.8" TFT Display DC.

  Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

  //______________________Some settings to do before running the program___________________________________________

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

Rotary r = Rotary(2,3);                // Arduino Pin D2 & D3 ==> Rotary encoder( Attenuation connects to interrupt pins)

#define RL_1dB 4                       // Arduino Pin D4 ==> relay board connection -1dB

#define RL_2dB 5                       // Arduino Pin D5 ==> relay board connection -2dB

#define RL_4dB 6                       // Arduino Pin D6 ==> relay board connection -4dB

#define RL_8dB 7                       // Arduino Pin D7 ==> relay board connection -8dB

#define RL_16dB A0                     // Arduino pin A0 ==> relay board connection -16dB

#define RL_32dB A1                     // Arduino pin A1 ==> relay board connection -32dB

#define RL_64dB A2                     // Arduino pin A2 ==> relay board connection -64dB

int dB1=127;                           // Start-up with -127dBm

int dB2=0;                             // Variable writing the  "updated attenuation" in the memory(32 bit number)

int increment=1;                       // First start-up attenuation increment with -1dB.(32 bit number)

int dB_button=0;                       // Set the state of the dB_button to 0 (dB settings on front panel)

float uW=199;                          // Start -127dBm = 199.53 aW ( atto Watt )

float mV=100.00;                       // Start -127dBm = 100nV RMS ( root-mean-square  )

int dBmV=-80;                          // Start -127dBm = -80dBmV

int dBuV=-20;                          // Start -127dBm = -20dBuV

int S=0;                               // Start -127dBm = 0 S-value

int RI=0;                              // Start -127dBm = 0 relative intensity

//____________________Setup the Pin-modes_______________________________________________________________________

void setup() {

  pinMode(A4,INPUT);                    // Make A4 as an INPUT (Quick 0dB-switch)

  digitalWrite(A4,HIGH);                // Set A4 to 5V (HIGH)

  pinMode(RL_1dB, OUTPUT);              // Make RL_1dB (pin D4) as an OUTPUT (-1dB)

  digitalWrite(RL_1dB, LOW);            // Set D4 to 0V (LOW)

  pinMode(RL_2dB, OUTPUT);              // Make RL_2dB (pin D5) as an OUTPUT (-2dB)

  digitalWrite(RL_2dB, LOW);            // Set D5 to 0V (LOW)

  pinMode(RL_4dB, OUTPUT);              // Make RL_4dB (pin D6) as an OUTPUT (-4dB)

  digitalWrite(RL_4dB, LOW);            // Set D6 to 0V (LOW)

  pinMode(RL_8dB, OUTPUT);              // Make RL_8dB (pin D7) as an OUTPUT (-8dB)

  digitalWrite(RL_8dB, LOW);            // Set D7 to 0V (LOW)

  pinMode(RL_16dB, OUTPUT);             // Make RL_16dB (pin A0) as an OUTPUT (-16dB)

  digitalWrite(RL_16dB, LOW);           // Set A0 to 0V (LOW)

  pinMode(RL_32dB, OUTPUT);             // Make RL_32dB (pin A1) as an OUTPUT (-32dB)

  digitalWrite(RL_32dB, LOW);           // Set A1 to 0V (LOW)

  pinMode(RL_64dB, OUTPUT);             // Make RL_64dB (pin A2) as an OUTPUT (-64dB)

  digitalWrite(RL_64dB, LOW);           // Set A2 to 0V (LOW)

  pinMode(2, INPUT_PULLUP);             // Make pin D2 as en INPUT with PULLUP resistor

  pinMode(3, INPUT_PULLUP);             // Make pin D3 as en INPUT with PULLUP resistor

                      //________First initialization of the tft screen with permanent data_________

 tft.initR(INITR_BLACKTAB);                                                  // https://forum.arduino.cc/index.php?topic=236304.0

 tft.setRotation(1);                                                         // Turn the screen over 270°(1=90° , 2=180° , 3=270° )

 tft.setTextWrap(false);                                                     // Don't stop writng at the end of the screen(cr)

 tft.fillScreen(ST7735_BLACK);                                               // Fill up the screen with BLACK COLOR



 tft.setCursor(1,1);                                                         // Place the cursor on line 1 , position 1

 tft.setTextSize(1);                                                         // Set the textSize on standard size

 tft.setTextColor(ST7735_WHITE);                                             // Set the textColor to WHITE

 tft.println(" ---F8VOA RF Attenuator---");                                  

 tft.setTextColor(ST7735_CYAN);                                              

 tft.setCursor(10, 20);                                                       

 tft.setTextSize(1);                                                         

 tft.print("Unit ");                                                         

 tft.setTextSize(1);                                                          

 tft.drawFastHLine(10, tft.height()- 98, tft.width()-130, ST7735_CYAN);      

 tft.setTextColor(ST7735_GREEN);                                             

 tft.setTextSize(1);                                                          

 tft.setCursor(70, 20);                                                      

 tft.print("Signal Level");                                                  

 tft.setTextSize(1);                                                         

 tft.drawFastHLine(70, tft.height()- 98, tft.width()-90, ST7735_GREEN);     

 tft.setTextColor(ST7735_CYAN);                                              

 tft.setTextSize(2);                                                        

 tft.setCursor(10,35);                                                      

 tft.print("dBm");                                                          

 tft.setTextSize(1);                                                        

 tft.setCursor(10,60);                                                       

 tft.print("Power");                                                        

 tft.setCursor(10,70);                                                      

 tft.print("dBmV");                                                          

 tft.setCursor(10,80);                                                      

 tft.print("dBuV");                                                         

 tft.setCursor(10,90);                                                      

 tft.print("uV/mV");                                                        

 tft.setCursor(10,100);                                                     

 tft.print("S-value ");                                                     

 tft.setCursor(10,110);                                                      

 tft.print("Relative");                                                     

 tft.setCursor(10,120);                                                     

 tft.print("Intensity");                                                                                            

//_______________________________________Interrupt settings___________________________________

  PCICR |= (1 << PCIE2);

  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);

  sei();}

ISR(PCINT2_vect) {

  unsigned char result = r.process();

  if (result) {   

    if (result == DIR_CW){dB1=dB1+increment;}                 // If the result is clockwize then  Att=Att+step.

     else {dB1=dB1-increment;};                               // If the result is counter clockwize then , de Att=Att-step.

     if (dB1 >=127){dB1=127;};                                // Top-limitation of the Attenuator

     if (dB1 <=0)  {dB1=0;};                                  // Bottom-limitation of the Attenuator

  } }

//___________________Print the attenuation in dBm _________________________________________________

void printItems(){

 tft.fillRect(70, 35, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);                                              

 tft.setCursor(70, 35);                                                      

 tft.setTextSize(2);                                                                                                                

 tft.print("-");                                                             

 tft.print(dB1);                                                             

 //___________________Print the attenuation in  uW__________________________________________________

 tft.fillRect(70, 60, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

 tft.setCursor(70, 60);

 tft.print(uW);

     if (dB1 >=121) {tft.print(" aW");}

     else if (dB1 >=91) {tft.print(" fW");}

     else if (dB1 >=61) {tft.print(" pW");}

     else if (dB1 >=31) {tft.print(" nW");}

     else if (dB1 >=1 ) {tft.print(" uW");}

     else {tft.print(" mW") ;}

 //___________________Print the attenuation in  dBmV___________________________________________________

 tft.fillRect(70, 70, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

 tft.setCursor(70, 70);

 tft.print(dBmV);

 tft.print(" dBmV");

 //___________________Print the attenuation in  dBuV___________________________________________________

 tft.fillRect(70, 80, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

    dBuV=dBmV+60;

 tft.setCursor(70, 80);

 tft.print(dBuV);

 tft.print(" dBuV");

 //___________________Print the attenuation in uV/mV___________________________________________________

 tft.fillRect(70, 90, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

 tft.setCursor(70, 90);

 tft.print(mV);

     if (dB1 >=117) {tft.print(" nV RMS");}

       else if (dB1 >=48) {tft.print(" uV RMS");}

       else {tft.print(" mV RMS") ;}

 //___________________Print de S-waardein dB__________________________________________________________

 tft.fillRect(70, 100, 160, 60, ST7735_BLACK);                                

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

 tft.setCursor(70, 100);

     if      (dB1==127){(S=0);tft.print(S);}

     else if (dB1==121){(S=1);tft.print(S);}

     else if (dB1==115){(S=2);tft.print(S);}

     else if (dB1==109){(S=3);tft.print(S);}

     else if (dB1==103){(S=4);tft.print(S);}

     else if (dB1==97) {(S=5);tft.print(S);}

     else if (dB1==91) {(S=6);tft.print(S);}

     else if (dB1==85) {(S=7);tft.print(S);}

     else if (dB1==79) {(S=8);tft.print(S);}

     else if (dB1==73) {(S=9);tft.print(S);}

     else if (dB1==63) {(S=9);tft.print(S);tft.print("+10dB");}

     else if (dB1==53) {(S=9);tft.print(S);tft.print("+20dB");}

     else if (dB1==43) {(S=9);tft.print(S);tft.print("+30dB");}

     else if (dB1==33) {(S=9);tft.print(S);tft.print("+40dB");}

     else    {tft.fillRect(70, 100, 160, 60, ST7735_BLACK);}



 //___________________Print the attenuation in dB______________________________________________

 tft.fillRect(70, 110, 160, 60, ST7735_BLACK);                               

 tft.setTextColor(ST7735_GREEN);

 tft.setTextSize(1); 

 tft.setCursor(70, 110);

 if      (dB1==127){(RI=-54);tft.print(RI);tft.print("dB");}

     else if (dB1==121){(RI=-48);tft.print(RI);tft.print("dB");}

     else if (dB1==115){(RI=-42);tft.print(RI);tft.print("dB");}

     else if (dB1==109){(RI=-36);tft.print(RI);tft.print("dB");}

     else if (dB1==103){(RI=-30);tft.print(RI);tft.print("dB");}

     else if (dB1==97) {(RI=-24);tft.print(RI);tft.print("dB");}

     else if (dB1==91) {(RI=-18);tft.print(RI);tft.print("dB");}

     else if (dB1==85) {(RI=-12);tft.print(RI);tft.print("dB");}

     else if (dB1==79) {(RI=-6);tft.print(RI);tft.print("dB");}

     else if (dB1==73) {(RI=0);tft.print(RI);tft.print("dB");}

     else if (dB1==63) {(RI=10);tft.print(RI);tft.print("dB");}

     else if (dB1==53) {(RI=20);tft.print(RI);tft.print("dB");}

     else if (dB1==43) {(RI=30);tft.print(RI);tft.print("dB");}

     else if (dB1==33) {(RI=40);tft.print(RI);tft.print("dB");}

     else    {tft.fillRect(70, 110, 160, 60, ST7735_BLACK);}

};

// ___________________Start the loop______________________________________________________________

void loop() {

      if (dB1 != dB2){                       

          dB2 = dB1;                  

          printItems(); }              

          dB_button=digitalRead(A4);      

      if (dB_button==LOW){            

      dB1=0; };                       

     

   if(dB1==0){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=1;dBmV=47;mV=224;}

   if(dB1==1){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=794.33;dBmV=46;mV=200;}

   if(dB1==2){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=630.96;dBmV=45;mV=178;}

   if(dB1==3){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=501.19;dBmV=44;;mV=158;}

   if(dB1==4){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=398.11;dBmV=43;mV=141;}

   if(dB1==5){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=316.23;dBmV=42;mV=126;}

   if(dB1==6){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=251.19;dBmV=41;mV=112;}

   if(dB1==7){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=199.53;dBmV=40;mV=100;}

   if(dB1==8){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=158.49;dBmV=39;mV=89.1;}

   if(dB1==9){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=125.89;dBmV=38;mV=79.4;}

   if(dB1==10){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=100;dBmV=37;mV=70.7;}

   if(dB1==11){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=79.43;dBmV=36;mV=63.1;}

   if(dB1==12){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=63.1;dBmV=35;mV=56.2;}

   if(dB1==13){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=50.12;dBmV=34;mV=50.1;}

   if(dB1==14){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=39.81;dBmV=33;mV=44.7;}

   if(dB1==15){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=31.62;dBmV=32;mV=39.8;}

   if(dB1==16){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=25.12;dBmV=31;mV=35.5;}

   if(dB1==17){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=19.95;dBmV=30;mV=31.6;}

   if(dB1==18){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=15.85;dBmV=29;mV=28.2;}

   if(dB1==19){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=12.59;dBmV=28;mV=25.1;}

   if(dB1==20){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=10;dBmV=27;mV=22.4;}

   if(dB1==21){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=7.94;dBmV=26;mV=20.0;}

   if(dB1==22){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=6.31;dBmV=25;mV=17.8;}

   if(dB1==23){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=5.01;dBmV=24;mV=15.8;}

   if(dB1==24){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=3.98;dBmV=23;mV=14.1;}

   if(dB1==25){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=3.16;dBmV=22;mV=12.6;}

   if(dB1==26){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=2.51;dBmV=21;mV=11.2;}

   if(dB1==27){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=2;dBmV=20;mV=10;}

   if(dB1==28){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=1.58;dBmV=19;mV=8.91;}

   if(dB1==29){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=1.26;dBmV=18;mV=7.94;}

   if(dB1==30){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=1;dBmV=17;mV=7.079;}

   if(dB1==31){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, LOW);uW=794.33;dBmV=16;mV=6.31;}

   if(dB1==32){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=630.96;dBmV=15;mV=5.62;}  

   if(dB1==33){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=501.19;dBmV=14;mV=5.01;}

   if(dB1==34){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=398.11;dBmV=13;mV=4.47;}

   if(dB1==35){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=316.23;dBmV=12;mV=3.98;}

   if(dB1==36){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=251.19;dBmV=11;mV=3.55;}

   if(dB1==37){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=199.53;dBmV=10;mV=3.16;}

   if(dB1==38){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=158.49;dBmV=9;mV=2.82;}

   if(dB1==39){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=125.89;dBmV=8;mV=2.51;}

   if(dB1==40){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=100;dBmV=7;mV=2.24;}

   if(dB1==41){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=79.43;dBmV=6;mV=2;}

   if(dB1==42){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=63.1;dBmV=5;mV=1.78;}

   if(dB1==43){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=50.12;dBmV=4;mV=1.58;}

   if(dB1==44){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=39.81;dBmV=3;mV=1.413;}

   if(dB1==45){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=31.62;dBmV=2;mV=1.259;}

   if(dB1==46){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=25.12;dBmV=1;mV=1.122;}

   if(dB1==47){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=19.95;dBmV=0;mV=1;}

   if(dB1==48){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=15.85;dBmV=-1;mV=891;}

   if(dB1==49){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=12.59;dBmV=-2;mV=794;}

   if(dB1==50){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=10;dBmV=-3;mV=707;}

   if(dB1==51){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=7.94;dBmV=-4;mV=631;}

   if(dB1==52){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=6.31;dBmV=-5;mV=562;}

   if(dB1==53){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=5.01;dBmV=-6;mV=501;}

   if(dB1==54){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=3.98;dBmV=-7;mV=447;}

   if(dB1==55){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=3.16;dBmV=-8;mV=398;}

   if(dB1==56){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=2.51;dBmV=-9;mV=355;}

   if(dB1==57){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=2;dBmV=-10;mV=316;}

   if(dB1==58){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=1.58;dBmV=-11;mV=282;}

   if(dB1==59){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=1.26;dBmV=-12;mV=251;}

   if(dB1==60){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=1;dBmV=-13;mV=224;}

   if(dB1==61){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=794.33;dBmV=-14;mV=200;}

   if(dB1==62){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=630.96;dBmV=-15;mV=178;}

   if(dB1==63){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, LOW);uW=501.19;dBmV=-16;mV=158;}

   if(dB1==64){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=398.11;dBmV=-17;mV=141;}

   if(dB1==65){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=316.23;dBmV=-18;mV=126;}

   if(dB1==66){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=251.19;dBmV=-19;mV=112;}

   if(dB1==67){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=199.53;dBmV=-20;mV=100;}

   if(dB1==68){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=158.49;dBmV=-21;mV=89.1;}

   if(dB1==69){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=125.89;dBmV=-22;mV=79.4;}

   if(dB1==70){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=100;dBmV=-23;mV=70.7;}

   if(dB1==71){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=79.43;dBmV=-24;mV=63.1;}

   if(dB1==72){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=63.1;dBmV=-25;mV=56.2;}

   if(dB1==73){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=50.12;dBmV=-26;mV=50.1;}

   if(dB1==74){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=39.81;dBmV=-27;mV=44.7;}

   if(dB1==75){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=31.62;dBmV=-28;mV=39.8;}

   if(dB1==76){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=25.12;dBmV=-29;mV=35.5;}

   if(dB1==77){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=19.95;dBmV=-30;mV=31.6;}

   if(dB1==78){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=15.85;dBmV=-31;mV=28.2;}

   if(dB1==79){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=12.59;dBmV=-32;mV=25.1;}

   if(dB1==80){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=10;dBmV=-33;mV=22.4;}

   if(dB1==81){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=7.94;dBmV=-34;mV=20;}

   if(dB1==82){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=6.31;dBmV=-35;mV=17.8;}

   if(dB1==83){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=5.01;dBmV=-36;mV=15.8;}

   if(dB1==84){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=3.98;dBmV=-37;mV=14.1;}

   if(dB1==85){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=3.16;dBmV=-38;mV=12.6;}

   if(dB1==86){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=2.51;dBmV=-39;mV=11.2;}

   if(dB1==87){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=2;dBmV=-40;mV=10;}

   if(dB1==88){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=1.58;dBmV=-41;mV=8.91;}

   if(dB1==89){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=1.26;dBmV=-42;mV=7.94;}

   if(dB1==90){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=1;dBmV=-43;mV=70.7;}

   if(dB1==91){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=794.33;dBmV=-44;mV=6.31;}

   if(dB1==92){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=630.96;dBmV=-45;mV=5.62;}

   if(dB1==93){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=501.19;dBmV=-46;mV=5.01;}

   if(dB1==94){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=398.11;dBmV=-47;mV=4.47;}

   if(dB1==95){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, LOW);digitalWrite(RL_64dB, HIGH);uW=316.23;dBmV=-48;mV=3.98;}

   if(dB1==96){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=251.19;dBmV=-49;mV=3.55;}  

   if(dB1==97){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=199.53;dBmV=-50;mV=3.16;}

   if(dB1==98){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=158.49;dBmV=-51;mV=2.82;}

   if(dB1==99){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=125.89;dBmV=-52;mV=2.51;}

   if(dB1==100){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=100;dBmV=-53;mV=2.24;}

   if(dB1==101){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=79.43;dBmV=-54;mV=2;}

   if(dB1==102){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=63.1;dBmV=-55;mV=1.78;}

   if(dB1==103){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=50.12;dBmV=-56;mV=1.58;}

   if(dB1==104){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=39.81;dBmV=-57;mV=1.41;}

   if(dB1==105){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=31.62;dBmV=-58;mV=1.26;}

   if(dB1==106){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=25.12;dBmV=-59;mV=1.12;}

   if(dB1==107){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=19.95;dBmV=-60;mV=1;}

   if(dB1==108){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=15.85;dBmV=-61;mV=891;}

   if(dB1==109){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=12.59;dBmV=-62;mV=794;}

   if(dB1==110){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=10;dBmV=-63;mV=707;}

   if(dB1==111){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, LOW);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=7.94;dBmV=-64;mV=631;}

   if(dB1==112){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=6.31;dBmV=-65;mV=562;}

   if(dB1==113){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=5.01;dBmV=-66;mV=501;}

   if(dB1==114){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=3.98;dBmV=-67;mV=447;}

   if(dB1==115){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=3.16;dBmV=-68;mV=398;}

   if(dB1==116){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=2.51;dBmV=-69;mV=355;}

   if(dB1==117){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=2;dBmV=-70;mV=316;}

   if(dB1==118){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=1.58;dBmV=-71;mV=282;}

   if(dB1==119){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=1.26;dBmV=-72;mV=251;}

   if(dB1==120){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, LOW);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=1;dBmV=-73;mV=224;}

   if(dB1==121){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=794.33;dBmV=-74;mV=200;}

   if(dB1==122){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=630.96;dBmV=-75;mV=178;}

   if(dB1==123){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, LOW);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=501.19;dBmV=-76;mV=158;}

   if(dB1==124){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=398.11;dBmV=-77;mV=141;}

   if(dB1==125){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, LOW);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=316.23;dBmV=-78;mV=126;}

   if(dB1==126){digitalWrite(RL_1dB, LOW);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=251.19;dBmV=-79;mV=112;}

   if(dB1==127){digitalWrite(RL_1dB, HIGH);digitalWrite(RL_2dB, HIGH);digitalWrite(RL_4dB, HIGH);digitalWrite(RL_8dB, HIGH);digitalWrite(RL_16dB, HIGH);digitalWrite(RL_32dB, HIGH);digitalWrite(RL_64dB, HIGH);uW=199.53;dBmV=-80;mV=100;}

  

}
//_________________________End ____________________________________________________

 The circuit diagram. 

Part 3

The MODULATOR sketch








//Modulator sketch for the MARCOGEN 0 to 100% AM-modulation -  design by F8VOA

/*The program may be freely used for personal and but not for commercial purposes.


  1) TFT-screen  = https://www.ebay.fr/itm/263449145336
  2) Rotator = https://www.ebay.fr/itm/10-pieces-12-mm-key-switch-rotary-encoder-switch-LW/172336809060?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
  3) Atmega 328 = https://www.ebay.fr/itm/IC-ATMEGA328P-PU-ATMEGA328P-DIP28-Microcontroller-ATMEL-NEW-DIP-SOCKET/253239946774?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
  4) Relay = https://www.ebay.fr/itm/10Pcs-hk19f-dc12v-shg-dc-12v-coil-dpdt-8pin-pcb-realplay-power-relay-GT/152958373987?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
  5) More info on " http://f8voa.blogspot.com" */
//______________________The Library________________________________________________________
#include <Adafruit_GFX.h>              // Core graphics library https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_ST7735.h>           // Hardware-specific library https://github.com/adafruit/Adafruit-ST7735-Library
#include <SPI.h>
#include <rotary.h>                    // Use the rotary.h your kind of encoder (different options)
#include <Rotary.h>                    // https://www.ebay.fr/itm/10-pieces-12-mm-key-switch-rotary-encoder-switch-LW/172336809060?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649
//_____________The 1.8 SPI TFT 128*160 (KMR-1.8 SPI) definition___________________________________
  // http://henrysbench.capnfatz.com/henrys-bench/arduino-displays/1-8tft-v1-0-st7736-arduino-tutorial-1-hello-world/#comment-34975
  #define TFT_SCLK 13                  // Arduino pin D13 ==> pin 9  1.8" TFT Display SCLK.
  #define TFT_MOSI 11                  // Arduino pin D11 ==> pin 8  1.8" TFT Display MOSI.
  #define TFT_CS   10                  // Arduino pin D10 ==> pin 10 1.8" TFT Display CS.
  #define TFT_RST  9                   // Arduino pin D9  ==> pin 6  1.8" TFT Display RST.
  #define TFT_DC   8                   // Arduino pin D8  ==> pin 7  1.8" TFT Display DC.
  Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
//________Some settings to do before running the program___________________________________________
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
Rotary r = Rotary(2,3);              
#define RL_10 4                       // Arduino Pin D4 ==> relay board connection 10% modulation
#define RL_20 5                       // Arduino Pin D5 ==> relay board connection 20% modulation
#define RL_40 6                       // Arduino Pin D6 ==> relay board connection 40% modulation
#define RL_80 7                       // Arduino Pin D7 ==> relay board connection 80% modulation
const int RL_ON = A0;                  // Set A0 as dB_relay control
const int RL_switch = A1;              // Set A5 as dB_button control (switch between 0 and 10dBm output)
int dB_state = 0;                      // Set the Old state of the dB_button to 0 (control state)
int dB_state1 = 0;                     // Set the New state of the dB_button to 0 (control state)
int mod1=100;                          // Start-up with 100% modulation
int mod2=0;                            // Variable writing the  "updated modulation" in the memory(32 bit number)
int increment=10;                      // First start-up modulation increment with -1dB.(32 bit number)
int Quick_button=0;                    // Set the state of the Quick_button to 0 (dB settings on front panel)
float mV=199.5;                        // Start with 199.5 mV modulation
//____________________Setup the Pin-modes______________________________________________
void setup() { 
  pinMode(RL_ON, OUTPUT);              // Determine the RL_ON (A0) as modulation relay
  digitalWrite(RL_ON, LOW);            // Make RL_ON 0-Volt (LOW)
  pinMode(RL_switch,INPUT_PULLUP);     // Modulation-switch (A1). GND (LOW) when pushed.
  digitalWrite(RL_switch,HIGH);        // Make RL_switch (A1) HIGH (5V)
  pinMode(A1,INPUT);                   // Make A1 as an INPUT (switch modulation ON/OFF)
  digitalWrite(A1,HIGH);               // Set A1 to 5V (HIGH)
  pinMode(A4,INPUT);                   // Make A4 as an INPUT (Quick  100% mod-switch)
  digitalWrite(A4,HIGH);               // Set A4 to 5V (HIGH)
  pinMode(RL_10, OUTPUT);              // Make RL_10 (pin D4) as an OUTPUT (10% modulation)
  digitalWrite(RL_10, LOW);            // Set D4 to 0V (LOW)
  pinMode(RL_20, OUTPUT);              // Make RL_20 (pin D5) as an OUTPUT (20% modulation)
  digitalWrite(RL_20, LOW);            // Set D5 to 0V (LOW)
  pinMode(RL_40, OUTPUT);              // Make RL_40 (pin D6) as an OUTPUT (40% modulation)
  digitalWrite(RL_40, LOW);            // Set D6 to 0V (LOW)
  pinMode(RL_80, OUTPUT);              // Make RL_80 (pin D7) as an OUTPUT (80% modulation)
  digitalWrite(RL_80, LOW);            // Set D7 to 0V (LOW)
 pinMode(2, INPUT_PULLUP);             // Make pin D2 as en INPUT with PULLUP resistor
 pinMode(3, INPUT_PULLUP);             // Make pin D3 as en INPUT with PULLUP resistor
                      //________First initialization of the tft screen with permanent data_________
 tft.initR(INITR_BLACKTAB);                                                  // https://forum.arduino.cc/index.php?topic=236304.0
 tft.setRotation(1);                                                         // Turn the screen over 270°(1=90° , 2=180° , 3=270° )
 tft.setTextWrap(false);                                                     // Don't stop writng at the end of the screen(cr)
 tft.fillScreen(ST7735_BLACK);                                               // Fill up the screen with BLACK COLOR
 tft.setCursor(1,1);                                                         // Place the cursor on line 1 , position 1
 tft.setTextSize(1);                                                         // Set the textSize on standard size
 tft.setTextColor(ST7735_WHITE);                                             // Set the textColor to WHITE
 tft.println(" ---F8VOA AM Modulator---");                                                                                                       
 tft.drawFastHLine(1, tft.height()- 112, tft.width()-2, ST7735_WHITE); 
 tft.setTextColor(ST7735_CYAN);                                              
 tft.setCursor(10, 20);                                                      
 tft.setTextSize(1);                                                          
 tft.print("Unit ");                                                                                                                   
 tft.drawFastHLine(10, tft.height()- 98, tft.width()-130, ST7735_CYAN);       
 tft.setTextColor(ST7735_GREEN);                                             
 tft.setTextSize(1);                                                         
 tft.setCursor(70, 20);                                                      
 tft.print("Signal Level");                                                                                                            
 tft.drawFastHLine(70, tft.height()- 98, tft.width()-90, ST7735_GREEN);      
 tft.setTextColor(ST7735_CYAN);                                              
 tft.setTextSize(2);                                                        
 tft.setCursor(10,35);                                                      
 tft.print("Level");                                                         
 tft.setTextSize(2);                                                         
 tft.setCursor(10,60);                                                      
 tft.print("AM MODULATON");
 tft.drawFastHLine(1, tft.height()- 5, tft.width()-2, ST7735_WHITE);                                                                                       
//____________________________________Interrupt settings___________________________________
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();}
ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result) {   
    if (result == DIR_CW){mod1=mod1+increment;}                
     else {mod1=mod1-increment;};                              
     if (mod1 >=100){mod1=100;};                               
     if (mod1 <=0)  {mod1=0;};        } }
void printsign()
  { if (dB_state == 0){digitalWrite(RL_ON, HIGH);dB_state1 = dB_state;
        tft.fillRect(65,90,100,20,ST7735_BLACK);
        tft.setTextColor(ST7735_BLUE);
        tft.setTextSize(2);
        tft.setCursor(65,90);
        tft.print( " ON");
  } else{digitalWrite(RL_ON, LOW);dB_state1 = dB_state;
        tft.fillRect(65,90,100,20,ST7735_BLACK);
        tft.setTextColor(ST7735_CYAN);
        tft.setTextSize(2);
        tft.setCursor(65,90);
        tft.print( "OFF");         
        tft.drawFastHLine(1, tft.height()- 5, tft.width()-2, ST7735_WHITE);
  }
 tft.fillRect(85,35,100,20,ST7735_BLACK); 
 tft.setTextColor(ST7735_GREEN);                                             
 tft.setCursor(85, 35);                                                       
 tft.setTextSize(2);                                                                                                                                                                              
 tft.print(mod1);
 tft.print("%");
  }
// ___________________Start the loop________________________________________________
void loop() {     
    {dB_state=digitalRead(RL_switch);
 if (dB_state != dB_state1){printsign();   }
   Quick_button=digitalRead(A4);      
 if (Quick_button==LOW){mod1= 100; }; 
 if (mod1 != mod2){mod2 = mod1; printsign(); }                      
   if(mod1==0){digitalWrite(RL_10, LOW);digitalWrite(RL_20, LOW);digitalWrite(RL_40, LOW);digitalWrite(RL_80, LOW);}  
   if(mod1==10){digitalWrite(RL_10, HIGH);digitalWrite(RL_20, LOW);digitalWrite(RL_40, LOW);digitalWrite(RL_80, LOW);} 
   if(mod1==20){digitalWrite(RL_10, LOW);digitalWrite(RL_20, HIGH);digitalWrite(RL_40, LOW);digitalWrite(RL_80, LOW);}
   if(mod1==30){digitalWrite(RL_10, HIGH);digitalWrite(RL_20, HIGH);digitalWrite(RL_40, LOW);digitalWrite(RL_80, LOW);}  
   if(mod1==40){digitalWrite(RL_10, LOW);digitalWrite(RL_20, LOW);digitalWrite(RL_40, HIGH);digitalWrite(RL_80, LOW);}  
   if(mod1==50){digitalWrite(RL_10, HIGH);digitalWrite(RL_20, LOW);digitalWrite(RL_40, HIGH);digitalWrite(RL_80, LOW);}  
   if(mod1==60){digitalWrite(RL_10, LOW);digitalWrite(RL_20, HIGH);digitalWrite(RL_40, HIGH);digitalWrite(RL_80, LOW);}  
   if(mod1==70){digitalWrite(RL_10, HIGH);digitalWrite(RL_20, HIGH);digitalWrite(RL_40, HIGH);digitalWrite(RL_80, LOW);} 
   if(mod1==80){digitalWrite(RL_10, LOW);digitalWrite(RL_20, LOW);digitalWrite(RL_40, LOW);digitalWrite(RL_80, HIGH);}  
   if(mod1==90){digitalWrite(RL_10, HIGH);digitalWrite(RL_20, LOW);digitalWrite(RL_40, LOW);digitalWrite(RL_80, HIGH);} 
   if(mod1==100){digitalWrite(RL_10, LOW);digitalWrite(RL_20, HIGH);digitalWrite(RL_40, LOW);digitalWrite(RL_80, HIGH);}    
}}
//_________________________End of the program___________________________________




Part 4

The SWITCH-board

3 opmerkingen: