Receptor por fase HF - Arduino Nano - AD9850 SSB CW AM*


Foto :  Painel frontal do receptor

Um novo projeto com o Arduino nano, DDS e a antiga técnica de recepção por fase.
O receptor recebe de 500kHz a 32MHz, tem opção de AGC, Mute, dois VFOs, filtro de CW, LSB ou USB, bypass no filtro passa banda e saida para PC (SDR) tudo controlado pelo Arduino.
Controles de painel ganho de RF, volume e seleção de filtros passa banda (frequencia e banda de  passagem).
O Arduino é controlado por um controle remoto de TV Sony (pode ser dos antigos ou novos ou um destes vendidos por camelô (para TV Sony)), que altera a frequencia e controla as funções acima descritas.
O projeto somente tem alguns componentes criticos no defasador de audio são resistores de 1% (5 valores) e capacitores de polyester de 10nf, que devem ser selecionados com um LCmeter e devem ficar com valores entre 1% de tolerancia (100pF).
* A recepção de LSB, USB ou CW é normal já a recepção de AM deve ser feita um USB ou LSB ouvindo apenas a lateral.

Video no YouTube

Esquema Parte 1/4 :


Foto : Bobinas toko do filtro passa banda

Descrição :
Este BPF funciona com uma impedancia de 5,55 Ohms (50/9) de entrada e de saida, estas impedancias são conseguidas via os dosi transformadores de impedancia que estão na entrada e saida do filtro. Com a baixa impedancia apenas um indutor e um capacitor fazem a filtragem de banda, com cerca de 20dB de atenuação na segunda armonica. O valor do indutor determina tambem a banda de passagem por exemplo com 8µH temos 200kHz (-3db),  com 3,7µH temos 400kHz ... Eu usei muitos indutores queria cobrir abaixo de 500kHz, mas como vimos com pouco capacitor (variavel) e muito indutor, a banda passante diminui muito e ainda nosso transformador de impedancias teria que possuir mais voltas ou seja ter uma indutancia maior.
O rele acionado via controle remoto pelo arduino faz um bypass no BPF ligando a antena diretamente ao receptor.
O amplificador de RF faz muita diferença e pode ser ajustado via painel.
A seleção e ajuste do BPF é manual .. poderiam ser automaticas mas o hardware para mudar a chave de onda teria 10 reles e não foi viavel, já o ajuste não seria problema com um diodo varicap.

Foto : devido as baixas indutancias envovidas dois indutores tiveram que ser soldados diretamente na chave seletora.

Com cerca de 4 indutores podemos conseguir um otimo filtro de 80m a 10m.
Uma otima ideia seria usar um indutor central com um varicap de cada lado, dobrando a eficiencia do filtro ou seja dois filtros em serie.
Se voce quiser desenhar um novo filtro, eu posso ajudar, é só escrever.
Para maiores informações veja o link :
Filtro passa banda

Esquema parte 2 :


Foto : A direita QSD com 74AC74 (dead bug) e mixer 74HC4066 a esquerda

Descrição :
Receptor SDR comum sem maiores problemas, as modificações ficam por conta da tensão de alimentação que ajudam na diminuição dos tempos de comutação. Assim o 74AC74 ficou com 5,7V e o 74HC4066 com 10,1V. A substituição do 74HC4066 por um CI moderno ajuda muito, mas como fica dificil de comprar um no mercado nacional, optei pelo 74HC4066.

Esquema parte 3 :


Foto : reles de comutação a esquerda LSB /USB , saida para PC , acima no meio Rele de CW

Descrição :
Defasador de audio

Filtro de audio

AGC

Video do filtro de audio 300Hz 3kHz


Foto : A esquerda no meio defasage de audio (potenciometro de equilibrio) no centro filtro de AF (300Hz a 3kHz).

Filtro de CW
Sobre o filtro de CW desenhamos ele com um software ( o filtro de audio tambem):
Um filtro passa banda tem dois estagios ...um filtro passa baixas e um filtro passa altas ..assim fizemos o calculo de dois filtros com dois estagios cada :

1.Filtro passa alta :

passa alta estagio 1


Passa alta estagio 2



Passa alta estagios 1 e 2

2. Filtro passa baixa


Passa baixa estagio 1



Passa baixa estagio 2




Passa baixa estagios 1 e 2

Esquema parte 4



Foto : Arduino nano e modulo AD9850 montados em placa padrão de pontos (ilhas) isolados.

Descrição :

Usamos um arduino nano para controle do DDS e do radio.
Para facilitar o hardware usamos um controle remoto de TV Sony, com ele deixamos de colocar varias chaves e pelo menos um encoder.

Foto : Controles remotos Sony - a esquerda generico antigo - TVs antigas (SKY-7333) - centro generico novo - TVs novas MAX-039A - a direita original de TV. Devido a diferenças entre eles  eu sei apenas o teclado numerico e outros dois botões Volume + (VOL+)  e canal + (CH+).

Na parte do VFO DDS como a frequencia maxima é de 45MHz e necessitava de 120MHz, optei 
por usar a terceira armonica do VFO, a partir de 10MHz na recepção ...
Assim o VFO trabalha de 0 a 40MHz (frequencia de recepção vezes  quatro = 4 * F) até 9,999MHz e a partir de 10Mhz trabalha com (a frequencia de recepção  vezes 4 e dividida por tres = 4*F/3)....
Desta forma de 10MHz na recepção o VFO trabalha em 13,333...já em 30MHz o VFO estará em 40Mhz. Abaixo de 10 Mhz temos recepção em 7Mhz VFO em 28MHz.


Foto : Layout do display, as cores não aparecem definidas nesta foto.

Com Arduino controlamos algumas opções (tecla do controle remoto entre parenteses):
 VFO1 (VOL+) e VFO2 (CH+) podemos ajustar as frequencias dos VFOs independentes e com um clic corujar duas frequencias.
 Mute (3) emudece o amplificador de audio.
 AGC (1) liga ou desliga o AGC.
 BPF (0) coloca o BPF entre a antena e o RX ou liga a antena diretamente ao radio
 LSB ou USB (7) seleciona a banda desejada.
 PC (5) liga a saida estereo para o PC tornando o receptor em um receptor SDR com VFO.
 CW (9) liga o filtro de CW.
 Já a mudança de casa decimal para esquerda (4) e para direita (6).
 Mudança acima na casa decimal selecionada (2)
 Mudança abaixo na casa decimal selecionada (8).

Foto : Display mostrando o painel colorido em amarelo o que esta selecionado (VFO1, LSB, AGC e BPF) alem da dezena de kHz. A Barra do Smeter (que aparece inteira branca) tem a cor azul clara até S5 de S6 a S9 Verde e as ultimas 3 +10dB +20 e +30dB em roxo. (no rodapé do display aparecem as cores claras)
Smeter:
O Smeter foi desenhado para ter 3dB para cada sinal S.
A barra grafica do Smeter mostra de 3 em 3 dB até S9 e S9+10, S9+20 e S9+30db.
O valor S colocado do lado esquerdo do display é o valor numérico da barra.
O ajuste do Smeter deve ser feito por comparação do valor de ruido atmosférico ou de fundo e do valor de um sinal recebido em um receptor comercial.
Eu fiz o ajuste de orelhometro (earmeter) mesmo, com S1 para ruido muito baixo e S9+30 para sinais estupidamente altos (lineares de 2kW em 40m).


Foto : Vista geral do Receptor com montagem por modulos .

Resultado :
O receptor recebe bem OM com antena apropriada, mesmo com todos os indutores colocados na pratica não conseguimos filtrar estações abaixo de 800kHz.
Os 80m e 40m são recebidos de camarote (locais e DX SSB e CW).
A estação de 10Mhz do Observatorio Nacional (Radio Relogio) tambem é recebida muito bem.
Estações locais e DX em 20m.


Foto : Vista geral dos modulos.

Problemas apareceram em 15M, devido ao VFO trabalhar em 3a armonica do VFO o que representa exatamente 28MHz que é a frequencia fundamental de 40m (28/4=7Mhz).
Apesar do filtro ser muito bom ele não consegue evitar a presença de sinais de 40m.
 Os sinais de 40m estarão em LSB enquanto os de 15m estarão em USB, com o VFO em 28MHz para sinais de 7MHz teremos LSB, já em 21MHz o VFO estará a 4*F/3 que resulta em USB.

Creio que a solução estará em fazer um novo VFO usando o SI5351, com o uso do VFO em 4*F em toda a banda.

Já em 10m devido a má propagação ainda não ouvi muitas estações.
Em 11m já corujei algumas rodadas.


Foto : vista por traz do painel dianteiro.

Conclusão :
Apesar da trombada em 15m o receptor tem um otimo desempenho, a solução da troca de DDS certamente resolverá o problema.
O Arduino mostrou ser competente para as funções atribuidas a ele.
O display de 15 Reais (3US$) tambem correspondeu.
O receptor é muito silencioso, seletivo e estavel. (tenho passado tardes trabalhando aqui no PC e corujando os 40m)
Apesar do pouco ganho em RF o receptor é bem sensivel para sinais fracos.

Como novos desafios para o uso do arduino, poderiamos :
Colocar sintonia do filtro automatica usando valores tabelados de capacitancia de um diodo varicap em função da frequencia recebida.
Outra ideia seria colocar um scan automatico parando em uma estação recebida. Seria baseado em valores do Smeter. De certa forma isto já ocorre, pois o update do valor do Smeter demora um pouco com um novo valor do sinal S, o arduino tem que apagar o display para mostrar o novo valor e isto faz uma interrupção acrecimo de frequencia ( como botão de frequencia acima sempre apertado)

Sketch do Arduino
Nota : A banda lateral LSB ou USB é setada pelo controle remoto e não esta atrelada ao uso do VFO1 ou VFO2, assim setada para LSB em um VFO no outro continuará a mesma banda lateral  setada.
Temos um bug no programa : ao passar de 9999,990 kHz a banda lateral se inverte e o programa não acusa. A inversão de banda ocorre pelo fato de usarmos a 3a armonica do VFO.
Assim acima de 10Mhz o display marca LSB e na verdade é USB e vice-versa.
Com a presença de VFO1 e VFO2 independentes e a inversão de banda lateral acima de 10MHz a coisa se complicou e ainda não acertei o software.

73 de py2ohh miguel

SKETCH DO ARDUINO :

#include <IRremote.h>
#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

#define cs   10
#define dc   8
#define rst  9

#define W_CLK 7
#define FQ_UD 6
#define DATA 5
#define RESET 4

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
volatile unsigned long frequency = 1000000;
volatile unsigned long freqini = 7000000;
volatile unsigned long freqini2 = 7100000;
float freqvelha = 0;
float freqvelha2 = 0;
long passo = 1000;
char fnal [15];
float VFO = 1 , V1, V2, V1velho, s, svelho;
int i , a;
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results lido;
int lsb= 0, agc=1, mute=0, cw=0, ant=0, pc=0 ;


int gs = 0;
TFT TFTscreen = TFT(cs, dc, rst);
int incr = 1;
int incr2 = 1;
int incrvelho = 1;
int incrvelho2 = 1;
int alt;  //altura do diplay automatica
int larg; // largura do display automatica

// teclas do controle remoto tv sony nova/antiga
float n0 = 0x910  ; //tecla 0 key
float n1 = 0x10  ; // tecla 1 key
float n2 = 0x810  ; //tecla 2 key
float n3 = 0x410  ; //tecla 3 key
float n4 = 0xC10  ; //tecla 4  key
float n5 = 0x210  ; //tecla 5 key
float n6 = 0xA10  ; //tecla 6 key
float n7 = 0x610  ; //tecla 7 key
float n8 = 0xE10  ; //tecla 8 key
float n9 = 0x110  ; //tecla 9 key


float nf1 = 0x490 ; //tecla vol+  VFO1
float nf2 = 0x90 ; //tecla CH+ VFO2

void setup() {
  TFTscreen.begin();
  TFTscreen.background(0, 0, 0);
  alt = TFTscreen.height();
  larg = TFTscreen.width();
 
 
  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);
 
  pinMode(A1, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, OUTPUT);
  pinMode(A5, OUTPUT);
  pinMode(A0, OUTPUT);
 
  pulseHigh(FQ_UD);
  irrecv.enableIRIn(); // Inicializa o receptor IR
  digitalWrite(A3,HIGH) ; // ligar AGC

}

void loop() {
  
      freqini = 7000000;
       sendFrequency((4*freqini));
      gersin();
     

  }

void tfr_byte(byte data)
{
  for (int i = 0; i < 8; i++, data >>= 1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);
  }
}

// Send frequency and command word to AD9850
void sendFrequency(double frequency) {
  int32_t freq = frequency * 4294967295 / (125000000 ); // note 125 MHz clock on 9850
  for (int b = 0; b < 4; b++, freq >>= 8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0);
  pulseHigh(FQ_UD);
}
void gersin() {
  TFTscreen.background(0, 0, 0);
 // TFTscreen.stroke(255, 255, 255);
  TFTscreen.stroke(255, 255, 0);
  TFTscreen.setTextSize(1);
  TFTscreen.text("       RX HF PHASE" , 0 , 2);
  TFTscreen.setTextSize(1);
 
 
  TFTscreen.stroke(0, 255, 255);
 // TFTscreen.text("AGC   Mute    PC    Ant" , 0 , 32);
  TFTscreen.text("AGC" , 10 , 34);
 
  TFTscreen.text("BPF" , 130 , 34);
 
  TFTscreen.text("LSB", 80 , 22);
  TFTscreen.text("VFO1" , 40 , 22);
  TFTscreen.stroke(0, 0, 255);
  TFTscreen.text("PC" , 90 , 34);
  TFTscreen.text("Mute", 50 , 34);
  TFTscreen.text("CW" , 120 , 22);
  //TFTscreen.stroke(255, 255, 255);
  TFTscreen.stroke(255, 255, 0);
  TFTscreen.setTextSize(1);
  TFTscreen.text("   MHz    kHz     Hz" , 0 , 69);
  while (gs == 0) {
    smeter();
    if (VFO ==1) {
      incrvelho2=incrvelho2 + 1;
    if ((freqini != freqvelha) || (incr != incrvelho)) {
      if (freqini >= 10000000) {
      sendFrequency((4*freqini)/3); }
      else {
        sendFrequency((4*freqini));
      }
     
      TFTscreen.setTextSize(2);
      format(freqini ,47);

      freqvelha = freqini;
     
      incrvelho = incr;
      delay(50);
    }}
     if (VFO ==2) {
       incrvelho=incrvelho + 1;
    if ((freqini2 != freqvelha2) || (incr != incrvelho2)) {
      if (freqini2 >= 10000000) {
      sendFrequency((4*freqini2)/3); }
      else {
        sendFrequency((4*freqini2));
      }
     
      TFTscreen.setTextSize(2);
      format(freqini2 ,84);

      freqvelha2 = freqini2;
     
      incrvelho2 = incr;
      delay(50);
    }}
    if (irrecv.decode(&lido)) {
      float result = (lido.value);

      if (result) {
        delay(50);
        if (result ==n7) {
          delay(50);
          if (lsb == 0){
             digitalWrite(A5,HIGH) ;
             lsb = 1;
             TFTscreen.setTextSize(1);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.text("LSB" , 80 , 22);
          TFTscreen.stroke(0, 255, 0);
           TFTscreen.text("USB" , 80 , 22);
           TFTscreen.setTextSize(2);
            }
            else {
             digitalWrite(A5,LOW) ;
             lsb=0;
             TFTscreen.setTextSize(1);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.text("USB" , 80 , 22);
          TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("LSB" , 80 , 22);
           TFTscreen.setTextSize(2);
            }
                     }
        if (result ==n1) {
          delay(50);
          if (agc == 1){
             digitalWrite(A3,LOW) ;
             agc = 0;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 0, 255);
           TFTscreen.text("AGC" , 10 , 34);
           TFTscreen.setTextSize(2);
            }
            else {
             digitalWrite(A3,HIGH) ;
             agc=1;
              TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("AGC" , 10 , 34);
           TFTscreen.setTextSize(2);
            }
                     }
         
          if (result ==n3) {
          delay(50);
          if (mute == 0){
             digitalWrite(A1,HIGH);
             mute = 1;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("Mute" , 50 , 34);
           TFTscreen.setTextSize(2);
            }
            else {
             digitalWrite(A1,LOW) ;
             mute = 0;
              TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 0, 255);
           TFTscreen.text("Mute" , 50 , 34);
           TFTscreen.setTextSize(2);
            }
                     }
                    
          if (result ==n9) {
          delay(50);
          if (cw == 0){
             digitalWrite(A2,HIGH);
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("CW" , 120 , 22);
           TFTscreen.setTextSize(2);
             cw = 1;
            }
            else {
             digitalWrite(A2,LOW) ;
             cw = 0;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 0, 255);
           TFTscreen.text("CW" , 120 , 22);
           TFTscreen.setTextSize(2);
            }
                     }
          if (result ==n0) {
          delay(50);
          if (ant == 0){
             digitalWrite(A4,HIGH);
             ant = 1;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 0, 255);
           TFTscreen.text("BPF" , 130 , 34);
           TFTscreen.setTextSize(2);
            }
            else {
             digitalWrite(A4,LOW) ;
             ant = 0;
              TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("BPF" , 130 , 34);
           TFTscreen.setTextSize(2);
            }
                     }
          if (result ==n5) {
          delay(50);
          if (pc == 0){
             digitalWrite(A0,HIGH);
             pc = 1;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("PC" , 90 , 34);
           TFTscreen.setTextSize(2);
            }
            else {
             digitalWrite(A0,LOW) ;
             pc = 0;
             TFTscreen.setTextSize(1);
             TFTscreen.stroke(0, 0, 255);
           TFTscreen.text("PC" , 90 , 34);
           TFTscreen.setTextSize(2);
            }
                     }
        if (result == nf1)  {
          VFO=1 ;
          TFTscreen.setTextSize(1);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.text("VFO2" , 40 , 22);
          TFTscreen.stroke(0, 255, 255);
           TFTscreen.text("VFO1" , 40 , 22);
           TFTscreen.setTextSize(2);
        }
        if (result == nf2)  {
          VFO=2 ;
          TFTscreen.setTextSize(1);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.text("VFO1" , 40 , 22);
          TFTscreen.stroke(0, 255, 0);
           TFTscreen.text("VFO2" , 40 , 22);
           TFTscreen.setTextSize(2);
        }
        if (result == n4)  {
          if (incr <= 6) incr ++ ;
        }
        if (result == n6) {
          if (incr >= 1) (incr -- );
        }
        double valor = 0;
        switch (incr) {
          case 0:
            valor = 0;
            break;
          case 1:
            valor = 10;
            break;
          case 2:
            valor = 100;
            break;
          case 3:
            valor = 1000;
            break;
          case 4:
            valor = 10000;
            break;
          case 5:
            valor = 100000;
            break;
          case 6:
            valor = 1000000;
            break;
          case 7:
            valor = 10000000;
            break;
        }
      if (VFO==1) {
        if (result == n2) {
                    if (freqini <= 50000000) {
            freqini = (freqini + valor);
          }
          if (freqini > 50000000) {
          (freqini = 50000000);
        }
        }
        if (result == n8) {
          if (freqini > valor) {
            freqini = (freqini - valor);
          }
          else {
            freqini = 0;
          }
        }
        if ((freqini != freqvelha) || (incr != incrvelho)) {
          TFTscreen.fill(0, 0, 0);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.rect(0, 43, 160, 20);
        }
      }
       if (VFO==2) {
        if (result == n2) {
                    if (freqini2 <= 50000000) {
            freqini2 = (freqini2 + valor);
          }
          if (freqini2 > 50000000) {
          (freqini2 = 50000000);
        }
        }
        if (result == n8) {
          if (freqini2 > valor) {
            freqini2 = (freqini2 - valor);
          }
          else {
            freqini2 = 0;
          }
        }
        if ((freqini2 != freqvelha2) || (incr != incrvelho2)) {
          TFTscreen.fill(0, 0, 0);
          TFTscreen.stroke(0, 0, 0);
          TFTscreen.rect(0, 80, 160, 20);
        }
      }
      }
 
      delay(50);
      irrecv.resume();
    }

  }
}

  
void format(unsigned long value , int linha) {
  unsigned long j = 10000000;
  for (int i = 0; i <= 7; i++) {
    int digit = (value / j) % 10;
    incr == (7 - i) ? TFTscreen.stroke(0, 255, 255) : TFTscreen.stroke(0, 255, 0);
    String sfreqini = String(digit);
    sfreqini.toCharArray(fnal, 15);
    TFTscreen.text(fnal , 17 * i + 10, linha);
    if ( (i == 4) || (i == 1)) {
      TFTscreen.stroke(255, 255, 0);
      TFTscreen.text("." , (17 * i + 17), linha);
    }
    j /= 10;
  }
 
  delay(30);
}

void smeter() {
  V2=0;
  for (i=1; i<3; i++){
 a = (analogRead(6));
V2=V2+a ;
}
V1=V2/2;

    V1 = (a * 5000.0) / 1024.0;
    if (V1 < 8) {(s=1); }
    if ((V1 <10)&&(V1>7)) {(s=2); }
    if ((V1 < 15)&&(V1>9)) {(s=3); }
    if ((V1 < 20)&&(V1>14)) {(s=4); }
    if ((V1 < 30)&&(V1>19)) {(s=5); }
    if ((V1 < 40)&&(V1>29)) {(s=6); }
    if ((V1 < 56)&& (V1>39)) {(s=7); }
    if ((V1 < 80)&&(V1>55)) {(s=8); }
    if ((V1 < 113)&&(V1>79)) {(s=9); }
    if ((V1 < 356)&&(V1>112)) {(s=10); }
    if ((V1 < 1130)&&(V1>355)) {(s=11); }
    if ((V1 < 5000)&&(V1>1129)) {(s=12); }
    if (s != svelho) {
      TFTscreen.stroke(0, 0, 0);
      TFTscreen.fill(0, 0, 0);
      TFTscreen.rect(0, 103, 159, 25);
   
       if (s>=1) {//S1
    TFTscreen.fill(255, 220, 0);
         // TFTscreen.stroke(255,255, 0);
          TFTscreen.stroke(0, 255, 255);
          TFTscreen.setTextSize(1);
          TFTscreen.rect(1, 125, 13, 3);
          if (s==1) {
            TFTscreen.text("S1" , 5 , 108);
          }
          delay(40);
    }
    if (s>=2) { //S2
          TFTscreen.fill(255, 195, 0);
          TFTscreen.rect(13, 124, 13, 4);
          if (s==2) {
            TFTscreen.text("S2" , 5 , 108);
          }
          delay(40);
   }
   if (s>=3) { //S3
          TFTscreen.fill(255, 195, 0);
          TFTscreen.rect(26, 123, 13, 5);
          if (s==3) {
            TFTscreen.text("S3" , 5 , 108);
          }
          delay(40);
   }
   if (s>=4) { //S4
          TFTscreen.fill(255, 195, 0);
          TFTscreen.rect(39, 122, 13, 6);
          if (s==4) {
            TFTscreen.text("S4" , 5 , 108);
          }
          delay(40);
   }
   if (s>=5) { //S5
          TFTscreen.fill(255, 195, 0);
          TFTscreen.rect(52, 121, 13, 7);
          if (s==5) {
            TFTscreen.text("S5" , 5 , 108);
          }
          delay(40);
   }
   if (s>=6) { //S6
          TFTscreen.fill(255, 195, 0);
          TFTscreen.rect(65, 120, 13, 8);
          if (s==6) {
            TFTscreen.text("S6" , 5 , 108);
          }
          delay(40);
   }
   if (s>=7) { //S7
         if (s==7) {
           //TFTscreen.setTextSize(1);
          // TFTscreen.stroke(0, 255, 255);
            TFTscreen.text("S7" , 5 , 108);
         }
          TFTscreen.fill(120, 255, 0);
          TFTscreen.rect(78, 119, 13, 9);
          delay(40);
   }
   if (s>=8) { //S8
          TFTscreen.fill(60, 255, 0);
          TFTscreen.rect(91, 118, 13, 10);
          if (s==8) {
            TFTscreen.text("S8" , 5 , 108);
          }
          delay(40);
   }
   if (s>=9) { //S9
          TFTscreen.fill(0, 255, 0);
          TFTscreen.rect(104, 117, 13, 11);
          if (s==9) {
            TFTscreen.text("S9" , 5 , 108);
          }
          delay(40);
   }
   if (s>=10) { //S9+10dB
          TFTscreen.fill(195, 0, 255);
          TFTscreen.rect(117, 116, 13, 12);
          if (s==10) {
            TFTscreen.text("S9+10" , 5 , 108);
          }
          delay(40);
   }
   if (s>=11) { //S9+20dB
          TFTscreen.fill(195, 0, 255);
          TFTscreen.rect(130, 115, 13, 13);
          if (s==11) {
            TFTscreen.text("S9+20" , 5 , 108);
          }
          delay(40);
   }
   if (s==12) { //S9+30dB
          TFTscreen.fill(195, 0, 255);
          TFTscreen.rect(143, 114, 13, 14);
          if (s==12) {
            TFTscreen.text("S9+30" , 5 , 108);
          }
          delay(40);
   }
   delay(100);
   
          svelho=s;
    }      
  }