PIC 18F4550 comunicação RC5

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

PIC 18F4550 comunicação RC5

Mensagempor roquetti » 09 Abr 2009 19:38

Pessoall,

Enviei o vídeo do PIC 18F4550 com comunicação RC5, segue o link:

http://www.youtube.com/watch?v=PD4tXN3jZEQ

Abração
Paulo Roquetti
roquetti
Byte
 
Mensagens: 183
Registrado em: 27 Dez 2008 23:07
Localização: Jaguariúna - SP

Mensagempor tcpipchip » 13 Abr 2009 16:11

Libera o fonte :)
TCPIPCHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

PIC18F4550 - RC5

Mensagempor roquetti » 13 Abr 2009 21:45

tcpipchip escreveu:Libera o fonte :)
TCPIPCHIP





/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definição de Entradas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#define rc5 porta.RA0

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Definição de Saídas *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#define led1 porta.ra1
#define led2 porte.re2
#define led3 portc.rc0



char last_rx;
char comando,sistema;
char dado[5];



void decodifica_bit(void)
{
last_rx=0;
if (rc5) last_rx=1;

delay_us(890);

}






/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Bloco Principal de Programa *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void main()
{
char dado[10];

TRISA=0b00000001;
TRISB=0b111111; //Configura a direção do PORTB
TRISC=0b00000000; //Configura a direção do PORTA
TRISD=0b00000000;
TRISE=0b000;
porta=0;
portb=0;
portc=0;
portd=0;
porte=0;

intcon2.intedg0=1;

dado[0]=0;
dado[1]=0;
dado[2]=0;
dado[3]=0;
dado[4]=0;

ADCON1=15; //Deixa os pinos da forma digital

delay_ms(2000); //Tempo de start-up do display

Lcd_Config(&PORTD,0,1,1,7,6,5,4);
//Configura pinos do LCD
Lcd_Init(&PORTD);



lcd_out(1,1,"Paulo Roquetti"); //Mostra mensagem no display

do
{


if (!rc5) { //Botão está pressionado?
delay_us(445);
comando=0;
sistema=0;

delay_us(890);
decodifica_bit(); //Bit F
//Descartado neste exemplo


delay_us(890);
decodifica_bit(); //Bit C
//Descartado neste exemplo

delay_us(890);
decodifica_bit();
if (last_rx) sistema|=16; //Bit 4 de sistema

delay_us(890);
decodifica_bit();
if (last_rx) sistema|=8; //Bit 3 de sistema

delay_us(890);
decodifica_bit();
if (last_rx) sistema|=4; //Bit 2 de sistema

delay_us(890);
decodifica_bit();
if (last_rx) sistema|=2; //Bit 1 de sistema

delay_us(890);
decodifica_bit();
if (last_rx) sistema|=1; //Bit 0 de sistema


delay_us(890);
decodifica_bit();
if (last_rx) comando|=32; //Bit 5 de comando

delay_us(890);
decodifica_bit();
if (last_rx) comando|=16; //Bit 4 de comando

delay_us(890);
decodifica_bit();
if (last_rx) comando|=8; //Bit 3 de comando

delay_us(890);
decodifica_bit();
if (last_rx) comando|=4; //Bit 2 de comando

delay_us(890);
decodifica_bit();
if (last_rx) comando|=2; //Bit 1 de comando

delay_us(890);
decodifica_bit();
if (last_rx) comando|=1; //Bit 0 de comando






bytetostr(comando,dado);
lcd_out(2,1,"Cmd: ");
lcd_out(2,5,dado);

bytetostr(sistema,dado);
lcd_out(2,9,"Sis: ");
lcd_out(2,14,dado);

switch (comando)
{
case 62:

led1=1;
break;

case 61:



led1=0;
break;


case 59:


led2=1;
break;

case 58:


led2=0;
break;

case 56:

led3=1;
break;

case 55:

led3=0;
break;

}

}




}while(1);
}
roquetti
Byte
 
Mensagens: 183
Registrado em: 27 Dez 2008 23:07
Localização: Jaguariúna - SP

Mensagempor cristian » 24 Jan 2010 11:11

usei seu codigo para um teste aqui e os valores oscilam muito pressionando uma mesma tecla o eu nao fica assim nao???
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor roquetti » 24 Jan 2010 12:10

cristian escreveu:usei seu codigo para um teste aqui e os valores oscilam muito pressionando uma mesma tecla o eu nao fica assim nao???


eu tinha feito um programa para identificar o numero dos botoes em hexa antes, assim fica correto as teclas.
roquetti
Byte
 
Mensagens: 183
Registrado em: 27 Dez 2008 23:07
Localização: Jaguariúna - SP

Mensagempor cristian » 31 Jan 2010 20:20

nao entendi o q vc disse ....mas seguinte com o contrele da philips funcionou perfeito .

mas o controle q vou usar é do paraguai destes usados no MP3CAr ( adaptador usb para carros )

entao montei meu codigo para pegar o valor dos tempos usando a INT EXT consegui pegar certinho e decodificar o controle . MAs tem 6 teclas repetidas , com o mesmo valor ...nao é defeito no controle pois no MP3CAR fucniona

pegeui o controle da lg q no manual vem explicando o codigo do controle remoto segundo o manual vem 32bits mas so recebo 18 sempre e nele tb tem teclas repetidas

vc poderia me dizer o que pode ser ????

aqui esta o codigo

Código: Selecionar todos

#int_timer0
void interr2()
{
estouro=1;
}
#int_ext
void interr()
{
if(!aprende)
{
 //ext_int_edge( H_TO_L);   // Sets up EXT
aprende=1;

set_timer0(0);//zera o timer
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
}else{
      aprende=0;
      setup_timer_0(RTcc_off );
      codigo=get_timer0();
      exibe=1;
      // ext_int_edge( L_TO_H );   // Sets up EXT
      }

}




///---------------------------

while(1)
{

if(estouro)
{
estouro=0;
printf("t_est\n\r");
ind=0;
 setup_timer_0(RTcc_off );
 aprende=0;
 exibe=0;
 disable_interrupts(INT_ext);
ext_int_edge( L_TO_H);   // Sets up EXT
clear_interrupt(int_ext);
codigo=0;
delay_ms(500);
enable_interrupts(INT_ext);
printf("OK\n\r");
}
if(exibe)
{
//printf("%lu\n\r",codigo);    //mostra o codigo
exibe=0;

buffer[ind]=codigo;
ind++;



   if((codigo>2500)&&(codigo<3000))
   {
   

 setup_timer_0(RTcc_off );
 aprende=0;
 exibe=0;
 disable_interrupts(INT_ext);
ext_int_edge( L_TO_H);   // Sets up EXT
clear_interrupt(int_ext);
codigo=0;
ind=0;
nokia_gotoxy(10,3);

.......

cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x