bueno, les cuento lo que estoy haciendo. tengo un control de esos para manejar luces rgb que se ven en todos lados, como el de la imagen.
el protocolo que utiliza el control remoto es uno de panasonic como el de la imagen
compre un receptor infrarrojo para conectar al pic que era el único que pude conseguir pero no me supieron decir el modelo. por lo tanto no se cual es la frecuencia exacta que trabaja
por otro lado también me compre un foto transistor que tiene la forma de un diodo led común y lo soldé a un cable de micrófono para conectar a la placa de sonido de la pc y ver los comandos del control remoto
y por ultimo después de probar varios códigos diferentes este es el que mejores resultados me da, pero aun asi me parece que algo esta funcionando mal, como que faltaran datos
#int_ext
void ext_isr() {
if(bandera)
{
set_timer0(0);
bandera=0;
}
else
{
t=get_timer0();
bandera=1;
printf("\r\n%d",t);
}
}
los resultados cuando oprimo el primer boton son estos
106
8
8
17
17
17
17
8
8
8
17
8
17
17
el 106 seria el bit de start, los 8 serian ceros y los 17 unos. Pero son solo 13 bit, cuando supuesta mente tendría que recibir 32.
y esta es una imagen de lo que veo en la pc cuando aprieto ese botón, incluso hice un programa que detecte todos los francos y mida todos los tiempos pero siempre recibo la misma cantidad de bits
alguien me puede ayudar a entender que esta pasando? puede ser que el receptor no sea el correcto? o tengo algo mal en el programa?
otro problema que tengo, pero sospecho que es algo del control remoto, es que varia el start bit dependiendo de varias cosas, lo normal es 106, pero a veces manda números aleatorios, en algunos botones la primer vez lo manda bien y después lo manda mal, en otros botones manda intercalados uno bien y uno mal, en otros botones lo manda bien solo si se presiono antes algún otro botón especifico
muchas gracias desde ya.
acá dejo también el programa completo
#include <16f886.h>
#fuses INTRC_IO,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(clock=8000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
int1 bandera;
int8 t;
#int_ext
void ext_isr() {
if(bandera)
{
set_timer0(0);
bandera=0;
}
else
{
t=get_timer0();
bandera=1;
printf("\r\n%d",t);
}
}
void main() {
disable_interrupts(global);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_tris_b(0b00000001);
set_tris_c(0b10000000);
printf("\f\r\n");
ext_int_edge(H_TO_L);
bandera=1;
t=0;
enable_interrupts(int_ext);
enable_interrupts(global);
for(;;);
}