HOME      PROJETOS      PROGRAMAÇÃO     




Rádio FM AIROHA AR1010 Controlado com PIC18F4520

Para quem gosta de ouvir rádio enquanto trabalha, talvez este projeto venha atender sua necessidade
O chip de rádio FM AR1010, com apenas 10 pinos, não necessita componentes externos para funcionar.
Esse dispositivo de rádio FM pode ser controlado digitalmente por microcontroladores e pode ser usado em muitos projetos como rádios relógios despertadores ou apenas um rádio FM para ter sobre sua bancada.





HARDWARE

As únicas conexões necessárias são as portas de controle para se comunicar com o microcontrolador, dois pinos de alimentação, dois pinos de saída de som que deverão ser conectados a um fone de ouvido ou uma caixinha amplificada de PC e um pedaço de fio de uns 15cm para servir como antena. A pinagem e as conexões podem ser vistas no esquema elétrico abaixo.

Muito cuidado com a alimentação do AR1010. O chip deve ser alimentado com uma tensão de 3,6V.

Como você deve estar usando uma fonte de 5V para alimentar o PIC, é simples obter os 3,6V para alimentar o AR1010. Basta conectar em série 3 diodos 1N4007 ou semelhantes entre o Vcc (5v) do PIC e o Vcc (3,6V) do AR1010.

O chip AR1010 se comunica com o mundo externo através de um bus I2C (pinos 9 e 10). Aproveitando que o PIC18F4520 também pode trabalhar em modo I2C, vamos configurar seu módulo MSSP, e usá-lo para fazer a comunicação com o AR1010.

Conectamos os pinos 18(SCL) e 23(SDA) do PIC com os pinos 9(SCL) e 10(SDA) do AR1010. Os pinos são conectados diretamente uns nos outros, sem resistores intermediários. No esquema elétrico do circuito estão representados 2 resistores de 10K conectados do VCC (5v) aos pinos SCL e SDA do bus I2C, porém isso não é necessário.

Por ser um chip muito pequeno é impossível trabalhar com o AR1010 diretamente num protoboard, por isso será necessário fazer uma montagem do AR1010 num pequeno PCB, como a da figura acima a direita, usando pinos apropriados para poder encaixá-lo no protoboard.

Esquema elétrico




SOBRE O AR1010 e o AR1000

Os chips AR1010 e AR1000 são chips programáveis através de interfaces 2-Wires (I2C) ou 3-Wires (serial de 3 fios).

Praticamente não há diferenças entre o AR1010 e o AR1000 a não ser a de, infelizmente, o AR1010 não possui RDS (Radio Data System). Apenas o AR1000 o possui. RDS é um sistema que permite às estações de rádios enviarem, na mesma banda de transmissão, dados como o nome e frequência da estação, o nome da música que está sendo executada, o nome do autor etc. Porém, nem todas as estações de rádio implementam essa facilidade em seus equipamentos.

Neste projeto usaremos a opção 2-Wires (I2c) para aproveitar o módulo MSSP do PIC18F4520 que também pode operar em modo I2C.

O AR1010 é programado através da escrita de valores em seus registradores internos que podem ser acessados através dessas interfaces de comunicação.

O AR1010 possui 18 registradores internos de 2 bytes (R0 a R17) onde são gravados seus parâmetros de configuração. Outros registradores como o STATUS podem ser lidos apenas.

Para operar o AR1010 basta seguir o procedimento de configuração descrito no manual de programação do AR1010, onde se lê que, para fazê-lo funcionar, devemos gravar seus 18 registradores com os valores defaults lá sugeridos. Feito esse procedimento, o rádio já deve estar recebendo uma emissora de FM local. Daí em diante, pode-se mudar de estação, modificar o volume, desabilitar ou habilitar a recepção, etc.





SOFTWARE

Para operar o AR1010 desenvolvemos um driver de controle, escrito em linguagem assembly com várias funções o qual deve ser incluido dentro do programa assembly com a diretiva:

#include "ar1000_service.inc"

Além disso, um driver génerico para dispositivos I2C, que também é usado pelo driver controlador do AR1010, está incluido neste projeto e poderá ser usado em outros projetos para acessar qualquer outro dispositivo com RTCs, SDCards e outros dispositivos I2C. Esse driver não será discutido aqui. Dê uma olhada nos comentários do arquivo fonte para saber como funciona.

A seguir estão as descrições breves das funções que fazem parte do driver de controle do AR1010.
Para conhecer melhor as funções, dê uma olhada no fonte do driver.


ar1000Config

Configura o rádio com os valores iniciais contidos na tabela 'DEFAULTS'. Parâmetros: Não há

ar1000ReadAll

Lê todos os registradores do AR1000 para ARREGS 36 bytes). Parâmetros: Não há

ar1000SetFreq

Sintoniza o rádio na frequência especificada no registrador ARFREQ(2). O valor de ARFREQ(2) deve ser 10 veze a frequência real da estação menos 690. Parâmetros: ARFREQ(2) = (10 * FreqReal) - 690

ar1000TuneOn

Liga o bit _R2<TUNE>. Parâmetros: Não há

ar1000TuneOff

Desiga o bit _R2<TUNE>. Parâmetros: Não há

ar1000Mute

Liga o bit _R1<HMUTE> para desativar o som do rádio. Parâmetros: Não há

ar1000Play

Desliga o bit _R1<HMUTE> para ativar o som do rádio. Parâmetros: Não há

ar1000SetVol

Modifica o volume do rádio. Parâmetros: W contem nivel de volume de 1 a 18

ar1000Seek

Sintoniza a proxima estação. Parâmetros: W = 0 para sintonia abaixo W = 1 para sintonia acima

ar1000SeekDir

Especifica a direção da pesquisa. Parâmetros: ARFLAGS<SEEKDIR> = 0 --> sintonia abaixo ARFLAGS<SEEKDIR> = 1 --> sintonia acima

ar1000SeekOn

Liga a sintonia. Parâmetros: Não há

ar1000SeekOff

Desliga a sintonia. Parâmetros: Não há

ar1000GetFreq

Lê o valor da frequência da estação corrente em STATUS<READCHAN> (9 bits) devolvendo o resultado no registrador ARFREQ(2). Parâmetros: Não há

ar1000Write

Grava um registrador de 2 bytes no AR1000. Parâmetros: W contem o registrador a ser gravado FSR0 aponta um buffer de 2 bytes com o valor a ser gravado

ar1000Read

Lê um registrador de 2 bytes do AR1000. Parâmetros: W contem o registrador a ser lido FSR0 aponta um buffer de leitura de 2 bytes

ar1000WaitSTC

Aguarda STATUS<STC> = 1. Cuidado, pode ficar aguardando para sempre. Parâmetros: Não há




COMO OPERAR O RÁDIO COM UM PROGRAMA ASSEMBLY

Incluir no programa os registradores abaixo:

I2C_CLOCK equ .20000000 ; 20MHZ - FOSC DO SISTEMA I2C_FREQ equ .100000 ; SLEWRATE AR1000PUT equ 0x20 ; endereco write I2C do rádio FM AR1000GET equ 0x21 ; endereco read I2C do rádio FM ARFLAGS RES .1 ; Flags ARSEEKDIR equ .0 ; direção da pesquisa 0->Up 1-->Down ARREGNUM RES .1 ARWRK01 RES .1 ARNBYTES RES .1 ARFREQ RES .2 ; frequência ARREGS RES .36 ; buffer leitura/gravação de registradores

Incluir na memória de programa os arquivos necessários:

#include "delay_services.inc" #include "i2cmssp_services.inc" #include "ar1000.funcs.inc"

Configurar o AR1000 chamando a função ar1000Config.

call ar1000Config

Isto já é suficiente para o rádio entrar em operação. O rádio será configurado com os valores defaults encontrados na lista 'DEFAULTS' ao final do arquivo fonte do driver onde, cada par de valores nessa lista será carregado num registrador do AR1000. Modifique a lista 'DEFAULTS' de cordo com suas necessidades.




Os itens que seguem apenas mostram alguns exemplos de como o rádio pode ser controlado usando outras funções.




Como sintonizar uma estação:

Para sintonizar uma estação usa-se a função ar1000SetFreq.

A sintonização de uma estação é feita gravando-se um valor no registrador _R2 do AR1000 que deverá ser calculado usando-se a seguinte fórmula:

V = (10 * frequência_real) - 690

Por exemplo, para sintonizar a rádio Jovem Pan de São Paulo, cuja frequência real e' 100,9MHZ, fazemos:

V = (10 * 100.9) - 690 V = 1009 - 690 V = 319

Carrega-se o registrador auxiliar 'ARFREQ' (de 2 bytes) com o valor 319 e chama-se a função ar1000SetFreq:

movlw high(.319) movwf ARFREQ movlw low(.319) movwf ARFREQ+.1 call ar1000SetFreq





Como desabilitar o som

Para silenciar o rádio, usar a função ar1000Mute.

call ar1000Mute





Como habilitar o som

Para escutar o som do rádio, usar a função ar1000Play.

call ar1000Play





Pesquisa automática de estações

Mudar automaticamente de estação, para cima ou para baixo, a partir da estação corrente usando a função ar1000Seek.

Se o registrador W for carregado com o valor 0 (zero) a próxima estação abaixo da estação atual será sintonizada.

movlw .0 ; sintoniza proxima estação abaixo da atual call ar1000Seek

Se o registrador W for carregado com o valor 1 (um) a próxima estação acima da estação atual será sintonizada.

movlw .1 ; sintoniza proxima estação acima da atual call ar1000Seek





Como modificar o volume

Controlar o volume de som do rádio usando a função ar1000SetVol.

O volume do rádio é controlado com os registradores _R3 (D7-D10) e _R14 (D12-15).
O volume deve ser controlado com níveis que vão de 1 (mais baixo) a 18 (mais alto).
Cada nivel refere-se a um valor contido na tabela 'VOLUMES' presente no final do arquivo fonte do driver.
Para modificar o volume usa-se a função ar1000SetVol passando no registrador W o nível de volume desejado.

movlw .13 ; nivel de volume call ar1000SetVol






PROJETO DE TESTE

Para testar este projeto, monte o circuito proposto pelo esquema elétrico.

O projeto de teste permite verificar o funcionamento do rádio FM bem como dos drivers desenvolvidos para controlá-lo.

Este é um projeto completo desenvolvido no MPLAB.
Baixe o arquivo AR1000_Modulo_I2C_HPSPIN.zip e descomprima na sua pasta de projetos e, em seguida, faça dois cliques no arquivo "ar1010.mcp" para abrir o projeto no MPLAB.

O programa de teste pode ser usado diretamente, sem necessidade de compilação apenas gravando o PIC com o arquivo "ar1010.hex" que se encontra na pasta do projeto.

O programa de teste faz o seguinte:

  1. Configura o AR1010 com os valores defaults.
  2. Sintoniza na frequência 100,9MHZ permanecendo 5 segundos nessa frequência.
  3. Sintoniza na frequência 96,9MHZ permanecendo 5 segundos nessa frequência.
  4. Sintoniza na frequência 103,3MHZ permanecendo 5 segundos nessa frequência.
  5. Fica mudando automaticamente de estação em order crescente, permanecendo 4 segundos em cada uma.
  6. Fica mudando automaticamente de estação em order decrescente, permanecendo 4 segundos em cada uma.
  7. Volta ao ítem 2.









Índice dos circuitos




H P S P I N

Desde 04 de Março de 2010

Atualização: 27 de Jul de 2024