H P S P I N E l e t r ô n i c a D i g i t a l e P r o g r a m a ç ã o d e M i c r o c o n t r o l a d o r e s P I C |
HOME PROJETOS PROGRAMAÇÃO |
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.
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 |
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.
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) - 690ar1000TuneOn
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 18ar1000Seek
Sintoniza a proxima estação. Parâmetros: W = 0 para sintonia abaixo W = 1 para sintonia acimaar1000SeekDir
Especifica a direção da pesquisa. Parâmetros: ARFLAGS<SEEKDIR> = 0 --> sintonia abaixo ARFLAGS<SEEKDIR> = 1 --> sintonia acimaar1000SeekOn
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 gravadoar1000Read
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 bytesar1000WaitSTC
Aguarda STATUS<STC> = 1. Cuidado, pode ficar aguardando para sempre. Parâmetros: Não há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.
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
Para silenciar o rádio, usar a função ar1000Mute.
call ar1000Mute
Para escutar o som do rádio, usar a função ar1000Play.
call ar1000Play
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
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
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:
Índice dos circuitos |
![]() |
H P S P I N Desde 04 de Março de 2010 Atualização: 26 de Apr de 2025 |
![]() |