Em uma compra da Aliexpress, para aproveitar o frete, mandei vir um módulo de rádio FM baseado no IC RDA5807M. Seu circuito é inacreditavelmente simples, no módulo além do IC propriamente dito há apenas mais dois capacitores e um cristal de 32kHz. Já havia comprado um módulo baseado no IC TDA5767, receptor de rádio FM da NXP, mas nunca consegui fazê-lo funcionar.
O módulo tem as seguintes características:
Duas bandas de frequência;
Saída de áudio Mono ou Stereo com potência suficiente para acionar um fone de ouvido;
Indicador de força do sinal ( RSSI );
Controle de volume;
Comunicação I²C;
Tensão de alimentação de 1,8V a 3,3V;
Pinagem do módulo. |
Módulo montado em uma placa com os headers para o barramento I²C e alimentação à direita e saída de áudio à esquerda. O fio branco é um cabo coaxial que serve como antena. |
Firmware que lista todos os endereços I²C: 0x78 é do controlador do display OLED SSD1308 e 0x20 é do RDA5807M, não descobri porque é listado os endereços 0x22 e 0xC0. |
Inicialização:
O RDA5807M possui vários registros de 16 bits. Para iniciá-lo, usei somente os registros 0x02 a 0x05 que são escritos enviando primeiro a parte alta e em seguida a baixa. Estes registros são enviados nesta ordem e em sequência:
Mapa de bits dos registros 0x02 a 0x05. |
RDA5807 REGISTER 0x02 HIGH
Valor: 0xD0
RDA5807 REGISTER 0x02 LOW
Valor: 0x0D
RDA5807 REGISTER 0x03 HIGH
Valor: 0x00
BAND = 2 (76~108 MHz, world wide)
Channel Spacing = 100kHz, sendo a frequência de sintonização = (Channel Spacing x Channel_Select + 76000)/1000, que neste caso é 76,0MHz
RDA5807 REGISTER 0x03 LOW
Valor: 0x18
RDA5807 REGISTER 0x04 HIGH
Valor: 0x00
RDA5807 REGISTER 0x04 LOW
Valor: 0x00
RDA5807 REGISTER 0x05 HIGH
Valor: 0x88
RDA5807 REGISTER 0x05 LOW
Valor: 0xA4
Volume = 4 (0 a 15).
Os bits 7 e 5 são reservados mas se não tiverem setados a recepção não funciona, ainda bem que peguei estes valores em um fórum do Arduino, nunca iria descobrir.
Os bits 7 e 5 são reservados mas se não tiverem setados a recepção não funciona, ainda bem que peguei estes valores em um fórum do Arduino, nunca iria descobrir.
Operação:
Para ler status e valores de operação, mando o firmaware ler os registros 0x0A e 0x0B, que também são lidos nesta ordem e em sequência. Após a leitura, trato os valores para serem mostrados do display.
Mapa de bits dos registros 0x0A e 0x0B. |
Enviando o comando para procurar estações de rádio acima da frequência atual:
Seta bit SEEKUP de RDA5807 REGISTER 0x02 HIGH (1 = SEEK UP)
Reseta bit TUNE de RDA5807 REGISTER 0x03 LOW (0 = DISABLE TUNE)
Seta bit SEEK de RDA5807 REGISTER 0x02 HIGH (1 = ENABLE SEEK)
Escreve os registros 0x02 a 0x05 novamente
Enviando o comando para procurar estações de rádio abaixo da frequência atual:
Reseta bit SEEKUP de RDA5807 REGISTER 0x02 HIGH (0 = SEEK DOWN)
Reseta bit TUNE de RDA5807 REGISTER 0x03 LOW (0 = DISABLE TUNE)
Seta bit SEEK de RDA5807 REGISTER 0x02 HIGH (1 = ENABLE SEEK)
Escreve os registros 0x02 a 0x05 novamente
Boa Noite. Você poderia me enviar o seu codigo de acesso as funções do modulo, pois também adquiri essa placa mas não consigo sintonizar nenhuma estação.
ResponderExcluirconsigo até alterar volume, mas a estação não sintoniza. Estou pensando em até comprar o TEA5767 e tentar com ele.
Caso afirmativo meu email é: valmir.menegaz@gmail.com
Um Abraço.