Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

PIC: RDA5807

Share:

PIC: RDA5807



RDA5807P é um circuito integrado que é capaz de sintonizar emissoras de rádio FM, operando na faixa de 76MHz até 108MHz.

CARACTERÍSTICAS

  • Duas bandas de frequência;
  • Mono ou Stereo;
  • Indicador de força do sinal ( RSSI );
  • Controle de volume;
  • Comunicação I2C;
  • Tensão de alimentação: 5V;
VANTAGENS
Este chip possui as mesmas características do TEA5767. A vantagem de utilizá-lo é que eu encontrei uma placa pronta para utilizar, precisando apenas conectar os fios, ao contrário do TEA5767 ( talvez exista um módulo para ele, mas não encontrei ) que precisa soldar os fios e correr o risco de destruir a plaquinha ( acabei arrancando uns componentes, rs ). Outra vantagem do RDA5807P é que é possível controlar o volume da saída, mesmo utilizando fones de ouvido, o som é muito alto.

FUNCIONAMENTO
Possui 4 registradores internos de 16 bits, utilizados para sua configuração, como a frequência atual, volume, seleção da banda, ativar o modo de busca, entre outros. Para realizar a operação de escrita, basta enviar o endereço do dispositivo ( 0x20 ) e os 8 bytes.


Para poder sintonizar uma frequência, devemos escrever nos bits CHAN, setar o bit TUNE e enviar os todos os bytes. Podemos calcular o valor da frequência através dessa fórmula: F = SPACE * CHAN + ( 87000 ou 76000 );

Para realizar uma busca, devemos definir a direção da busca ( pra cima ou pra baixo ) definindo um valor para o bit SEEKUP. Também devemos setar o bit SEEK e enviar todos os bytes.

Também possui 2 registradores de 16 bits, que são utilizados para leitura, informando a frequência atual, a força do sinal captado e contendo vários bits de sinalização.


CÓDIGO DA BIBLIOTECA
MikroC PRO PIC

EXEMPLO:





14 comentários:

  1. Mas onde estão as bibliotecas para SSD1306 ..!

    ResponderExcluir
  2. Pra mim ta dando um erro nas estruturas "union", o erro fala "Invalid declarator expected'(' or identifier" e indica onde fecha a chave do "union" no ";"... ja tentei diversas coisas e nada, sabe o que pode ser? bem que vc poderia tirar um print da janela "edit project" pra saber como que ficou a configuração no teste

    ResponderExcluir
    Respostas
    1. Dei Ctrl+C, Ctrl+V no código e aqui tá compilando numa boa...Utilize a ultima versão do MikroC. Sobre os bits de configuração, eu não coloco porque cada um pode utilizar um PIC diferente, clock diferente, etc, e em geral não há muito o que alterar nas configurações.

      Excluir
    2. OK, minha versao do MikroC é a 6.0.0, vou tentar instalar a versão mais atual para ver se funciona! vlw pela atenção.

      Excluir
    3. Vlw Tiago, era o mikroC mesmo, funcionou perfeito, eu modifiquei para usar o lcd 16x2 e deu certo, gostei do som desse RDA ta bem legal por ser um circuito minusculo rs... ainda vou modificar mais pra tentar usar com outros periféricos, se eu tiver outras duvidas no codigo eu te pergunto rsrs... vlw mesmo me ajudou bastante.

      Excluir
  3. Tiago meus parabéns pelo seu post, seu código funcionou perfeitamente aqui. Só uma dúvida, queria coloca botões para controle de volume, criei as funções para fazer isso e realizo o incremento e decremento do char VOLUME, porem não surte efeito... Existe algum formular para isso? Não consegui achar nada especifico na net que pudesse me ajuda.

    Obrigado e novamente parabéns pelo seu post. Abs,

    ResponderExcluir
    Respostas
    1. cara isso é facil... na biblioteca adiciona um void para decrementar o volume e outro para incrementar, tipo assim...
      void RDA5807P_VOLDW( RDA5807P * radio)
      {
      radio->VOLUME--;
      RDA5807P_Write( radio );
      Delay_ms( 40 );
      }
      faça outro pra incrementar, e depois comanda no programa principal. ok flw

      Excluir
    2. Fiz exatamente isso que você mencionou, segue minha função, porem quando faço a chamada dela nada acontece....
      void RDA5807P_VOL_UP( RDA5807P * radio )
      {
      radio->VOLUME++;
      RDA5807P_Write( radio );
      Delay_ms( 20 );
      }

      Você já utilizou deste mesmo modo?

      Obrigado. Abs.

      Excluir
    3. funciona sim!
      adiciona tbm uma chamada na biblioteca na parte
      onde ta escrito /* funções */ coloca o seu void RDA5807_VOl_UP(RDA6807*radio); lá
      agora no programa faz um if pro botao
      if(se tal botao + for pressionado)
      {
      limpa o flag;
      RDA5807_VOL_UP(&radio);
      }
      isso tem que dar certo, senão é outra coisa ok. cabe a vc analisar.
      flw

      Excluir
  4. Olá ! Como eu poderia incluir os botões para volume + e - ? Obrigado.

    ResponderExcluir
  5. Como usar o RDS dele ? E como adaptar para LCD 16x2 ?

    ResponderExcluir
  6. Estou com este projeto na bancada, alguem tem alguma tabela das funcionalidades da comunicação I2C? não encontrei nenhuma LIB

    ResponderExcluir