Senhores, estou precisando desenvolver um leitor de codigos RC5 baseado em PIC. Achei este programa na net, mas ate o presente momento ainda não consegui fazer funfar!
// Author: Aurelian Nichita nicksubzero@yahoo.com
// Based on: http://www.xs4all.nl/~sbp/knowledge/ir/sirc.htm
#include <18F452.h>
#fuses XT,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP
#use delay(clock=4000000)
#include "MOD_lcd.c"
#define LED1 pin_C0
#define LED2 pin_C2
#define TIMER0_CONFIG RTCC_INTERNAL | RTCC_DIV_1
#define ONE_MIN 1675
#define ONE_MAX 1925
#define ZERO_MIN 1075
#define ZERO_MAX 1325
int16 irframes[13];
int8 ircount = 0;
int1 irdone = FALSE;
#int_ext
void ext_isr()
{
if (irdone) return;
irframes[ircount] = get_timer0();
if (ircount >= 13)
irdone = TRUE;
ircount++;
set_timer0(0);
}
int1 decode_ir(int8 &addr, int8 &cmd)
{
int8 i;
int8 mask;
int8 bits[13];
addr = 0;
cmd = 0;
for (i=1; i<=12; i++)
{
if ((ONE_MIN <= irframes[i]) && (irframes[i] <= ONE_MAX))
bits[i] = 0x01;
else
if ((ZERO_MIN <= irframes[i]) && (irframes[i] <= ZERO_MAX))
bits[i] = 0x00;
else // Error
return FALSE;
}
mask = 0x01;
for (i=1; i<=7; i++)
{
if (bits[i])
cmd = cmd | mask;
mask <<= 1;
}
mask = 0x01;
for (i=8; i<=12; i++)
{
if (bits[i])
addr = addr | mask;
mask <<= 1;
}
return TRUE;
}
void start_ir()
{
memset(irframes, 0X00, sizeof(irframes));
ircount = 0;
irdone = FALSE;
set_timer0(0);
}
void main()
{
int8 addr, cmd;
int1 ok;
addr=0;cmd=0;
setup_timer_0(TIMER0_CONFIG);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
lcd_ini();
delay_ms(133);
start_ir();
while(1)
{
if (irdone)
{
ok = decode_ir(addr, cmd);
lcd_pos_xy(1, 2);
printf (lcd_escreve,"\fCmd %3u\ nAddr %3u", cmd, addr);
if (!ok)
{
lcd_pos_xy(1, 2);
printf (lcd_escreve,"ERROR");
output_high(led1);
delay_ms(200);
output_low(led1);
}
if (ok)
{
output_high(led1);
delay_ms(200);
output_low(led1);
}
start_ir();
}
}
}
O programa esta lendo o sinal em RB0, ja olhei no Scope e o sinal esta normal, ao ler o codigo nao exibe os dados e exibe no lcd ^erro^ toda vez que le um codigo.
Agradeco toda a ajuda possivel!