PIC: TEA5767
O circuito integrado TEA5767 é um rádio FM estéreo em um único chip. Possui um baixo consumo de energia e não requer nenhum tipo de ajuste no circuito. Sintoniza bandas FM Japonesas( 76 - 91 MHz ) ou Europeias ( 87.5 - 108 MHz ). Comunica-se com o microcontrolador através de um barramento I2C.
O módulo possui 10 pinos. O pino BUS MODE quando em nível baixo habilita a comunicação via I2C. Para habilitar a comunicação 3-Wire apenas coloque o pino em nível alto. Os pinos SDA ( dados ) e SCL ( clock ) são os pinos da interface I2C. É alimentado com tensão entre 2.5V até 5V. Possui duas saídas para o áudio estéreo ( LEFT e RIGHT ). O pino 10 é para a ligação de uma antena.
BIBLIOTECA
MikroC PRO PIC
#define TEA5767_ADDRESS 0xC0
static char WriteBytes[5] = { 0x00, 0x00, 0xD0, 0x10, 0x00 };
struct
{
union
{
char FREQUENCIA_H : 6;
char SEARCH_MODE : 1;
char MUTE : 1;
};
char FREQUENCIA_L;
union
{
char SWP1 : 1;
char MUTE_LEFT : 1;
char MUTE_RIGHT : 1;
char MONO_TO_STEREO : 1;
char HLSI : 1;
char SEARCH_STOP_LEVEL : 2;
char SEARCH_UP_DOWN : 1;
};
union
{
char : 5;
char BAND_LIMIT : 1; //1 = Japan FM Band, 0 = US/Europe FM Band
char STANDY_BY_ON : 1;
char SWP2 : 1;
};
} TEA5767 at WriteBytes;
void TEA5767_Write()
{
Soft_I2C_Start();
Soft_I2C_Write( TEA5767_ADDRESS );
Soft_I2C_Write( WriteBytes[0] );
Soft_I2C_Write( WriteBytes[1] );
Soft_I2C_Write( WriteBytes[2] );
Soft_I2C_Write( WriteBytes[3] );
Soft_I2C_Write( WriteBytes[4] );
Soft_I2C_Stop();
}
void TEA5767_Read( unsigned long *freq_hz, char *flags, char *sinal )
{
unsigned long Freq_Tmp = 0;
char ReadBytes[5];
//Faz a leitura de 4 bytes
Soft_I2C_Start();
Soft_I2C_Write( TEA5767_ADDRESS | 1 );
ReadBytes[0] = Soft_I2C_Read( 1 );
ReadBytes[1] = Soft_I2C_Read( 1 );
ReadBytes[2] = Soft_I2C_Read( 1 );
ReadBytes[3] = Soft_I2C_Read( 1 );
ReadBytes[4] = Soft_I2C_Read( 0 );
Soft_I2C_Stop();
//Calcula a frequencia em hz
((char*)&Freq_Tmp)[1] = ReadBytes[0] & 0x3F;
((char*)&Freq_Tmp)[0] = ReadBytes[1];
Freq_Tmp <<= 13;
if( TEA5767.HLSI )
Freq_Tmp -= 225000;
else
Freq_Tmp += 225000;
*freq_hz = Freq_Tmp;
//Nivel do sinal recebido
*sinal = ReadBytes[3] >> 4;
//flags
(*flags).B0 = ReadBytes[2].B7; //mono ou stereo
(*flags).B1 = ReadBytes[0].B7; //estacao foi encontrada, caso o scan estiver ativado
(*flags).B2 = ReadBytes[0].B6; //atingiu o limite de banda
}
void TEA5767_Sintonizar( unsigned long freq_hz )
{
//Formula = 4 * ( FREQ + 225000 ) / 32768
if( TEA5767.HLSI )
freq_hz += 225000;
else
freq_hz -= 225000;
freq_hz >>= 13;
TEA5767.FREQUENCIA_H = ((char*)&freq_hz)[1];
TEA5767.FREQUENCIA_L = ((char*)&freq_hz)[0];
TEA5767.SEARCH_STOP_LEVEL = 1;
TEA5767_Write();
}
void TEA5767_Scan( char direcao )
{
TEA5767.SEARCH_MODE = 1;
TEA5767.SEARCH_UP_DOWN = direcao.B0;
TEA5767.SEARCH_STOP_LEVEL = 2;
TEA5767_Write();
}
EXEMPLO
No exemplo, há dois botões, que são utilizados para sintonizar a frequência e, também para procura automática das estações de rádio. A procura das estações ocorre quando o botão é pressionado por mais de 1 segundo. Para sintonizar, basta pressionar o botão, que a frequência irá decrementar ou incrementar em 100KHz ( 0.1MHz ).
O Display de LCD exibirá a frequência da rádio, o tipo da saída de áudio ( Stereo ou Mono ) e também o nível do sínal recebido.
MikroC PRO PIC//Projeto: Radio FM com TEA5767
//MCU: PIC18F4550
//CLOCK: 48MHz ( 20MHz + PLL )
//Autor: Tiago Henrique
//Compilador: MikroC PRO PIC
//Habilitar as seguintes bibliotecas:
// - Conversions
// - Software_I2C
// - LCD
//copie e cole o código da biblioteca aqui!!!
sbit Soft_I2C_Scl at RD1_bit;
sbit Soft_I2C_Sda at RD0_bit;
sbit Soft_I2C_Scl_Direction at TRISD1_bit;
sbit Soft_I2C_Sda_Direction at TRISD0_bit;
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit ButtonUp at PORTB.B2;
sbit ButtonDown at PORTB.B3;
unsigned long frequencia = 103500000; //frequencia de uma rádio em Hz
char nivel;
char radio_flags = 0;
char texto[12];
char tempo = 0;
void main()
{
ADCON1 = 0x0F; //desativa o canal analogico
CMCON = 7; //desativa o comparador analogico
NOT_RBPU_Bit = 0; //habilita os resistores de pull-up da PORTB
Soft_I2C_Init(); //inicializa a comunicacao I2C
Lcd_Init(); //iniciliaza o display lcd
Lcd_Cmd( _LCD_CURSOR_OFF );
Lcd_Cmd( _LCD_CLEAR );
TRISB.B3 = 1; //botao de sintonia ( - ), botao de procura ( down )
TRISB.B2 = 1; //botao de sintonia ( + ), botao de procura ( up )
TEA5767_Sintonizar( frequencia ); //Sintoniza o radio
while( 1 )
{
if( !ButtonUp )
{
tempo = 0;
while( !ButtonUp )//enquanto o botao estiver pressionado
{
tempo++;
if( tempo >= 200 )
break;
Delay_ms( 5 );
}
frequencia += 100000;
TEA5767_Sintonizar( frequencia );
if( tempo >= 200 ) //1 segundo pressionado?
{
TEA5767_Scan( 1 );
Lcd_Out( 2, 8, "SCAN" );
}
}
else if( !ButtonDown )
{
tempo = 0;
while( !ButtonDown )//enquanto o botao estiver pressionado
{
tempo++;
if( tempo >= 200 )
break;
Delay_ms( 5 );
}
frequencia -= 100000;
TEA5767_Sintonizar( frequencia );
if( tempo >= 200 ) //1 segundo pressionado
{
TEA5767_Scan( 0 );
Lcd_Out( 2, 8, "SCAN" );
}
}
TEA5767_Read( &frequencia, &radio_flags, &nivel );
//imprime no display lcd
Lcd_Out( 1, 1, "FREQ: " );
WordToStr( frequencia / 100000, texto );
Lcd_Chr_CP( texto[1] );
Lcd_Chr_CP( texto[2] );
Lcd_Chr_CP( texto[3] );
Lcd_Chr_CP( '.' );
Lcd_Chr_CP( texto[4] );
Lcd_Out_CP( " MHz" );
ByteToStr( nivel, texto );
Lcd_Out( 2, 12, texto );
if( radio_flags.B0 )
Lcd_Out( 2, 1, "STEREO" );
else
Lcd_Out( 2, 1, " MONO " );
if( radio_flags.B1 ) //Estacao encontrada
{
TEA5767.SEARCH_MODE = 0;
Lcd_Out( 2, 8, " " );
}
Delay_ms( 50 );
}
}




Excelente blog! Obrigado por divulgar seus circuitos e códigos!
ResponderExcluirvocê poderia disponibilizar esse componente para simulação no proteus? obrigado e ótimo blog
ResponderExcluirMito dos Projetos, vc poderia fazer um desse Menu e Submenu com Lcd, estou tentando fazer um mas ta dificil.
ResponderExcluirvoçê tem a programação para pcw!!!
ResponderExcluirComo fazer a programação para controlar o volume para o Arduino? Qual é o código? 0x??
ResponderExcluirpoderia disponibilizar o componente TEA5767 para biblioteca proteus?
ResponderExcluirola colega vc envia o codigo HEX pra gravar no pic
ResponderExcluirola colega vc envia o codigo HEX pra gravar no pic
ResponderExcluirola colega vc envia o HEX caso sim depois de mando meu email
ResponderExcluircan you share with me the library of TEA5756 for the proteus
ResponderExcluir