Aprender códigos infrarrojos

Hola.

Estoy diseñando un control de potencia por control remoto. Tengo un sensor infrarrojo conectado a un PIC. Lo que quiero hacer es algun programa en el PIC que le permita a este aprender codigos de señales infrarojas. Por ejemplo, yo tendría el módulo con el PIC y al accionar un pulsador este se pondría en modo "APRENDER". Esto haría que al pulsar una tecla de cualquier control remoto de tv por ejemplo, el PIC grabaría esa señal en su memoria. Al estar en modo normal, si pulsamos la misma tecla del control remoto, el PIC la reconocería y activaría la carga.
Me explico?
Espero cualquier sugerencia.

Un saludo.
 
Buenas. Estoy otra vez. Quiero decir que estuve probando de muchas formas y no pude lograr aprender señales. Digamos, la simulación con el PIC anda perfecta. Lo que pasa es que siempre obtengo valores distintos para las mismas teclas del control. No hablo de microsegundos, sino de cientos de ellos... Ya les digo, el programa funciona bien en la simulaciones. Alguien conoce los pasos utilizados para aprender señales infrarrojas que tienen los controles universales? Podría obtener información de algunos fabricantes? Me la darían? Aclaro que es para un proyecto del coelgio sin ningún interés económico.

Saludos.
 
bueno el asunto con los controles universales es que ya traen de antemano los codigos a enviar, realmente no es que los aprendan.
Para el caso de la aplicacion que intentas, me queda una duda y es si usas un discriminante de frecuencia, ya que de otra forma cada ves que tomes datos directos o duros desde el puerto lo que tendrias son pulsos variables dependiendo de si hay mucha luz o si esta lejos o cerca el control, lo que yo te recomendaria en caso de no tenerlo es que lo consigas asi te evitas los pulsos de la portadora y tienes los datos tal cual.
 
hola jjfonsecaz

Hay algunos controles universales que efectivamente aprenden señales. Digamos que le acercás tu control el cual tiene la tecla que querés grabar y al pulsarla el control universal la "aprende".

Discriminante de frecuencia? osea, un filtro? Yo para captar la señal del control remoto utilizo el integrado SFH-5110-38. Es un receptor de hazes de luces infrarrojas modulada para sistemas de telemando. Eso incluye varios filtros pasa banda, un demodulador, etc.
Además tiene un encapsulado en colo negro para protegerse de la luz del día.

La verdad que este receptor me tiene desconcertado... Sería bueno poder usar un osciloscopio digital pero no tengo..

Saludos y espero que me puedan ayudar..
 
Como estas haciendo para captar las señalas? me imagino que utilizando el SFH-5110-38 conectado a un pin del PIC y guardando que tiempo existe entre la secuencia de pulsos que mandas? esta interesante el proyecto si necesitas ayuda solo dime.
 
Claro, el SFH está conectado a un pin del micro. Hice dos programas los cuales grababan las señales de forma distinta. El primero, alamcenaba el estado del pin conectado al SFH cada mas o menos 100us y lo guardaba en 50 registros de 8 bits cada uno.
La segunda forma almacenaba en 50 registros mas o menos el tiempo entre cada flanco ascendente y descendente utilizando el Timer 0.
Estos dos programas a su vez almacenaban esta información en la memoria EEPROM en el caso de que se estuviera en modo "Aprender". Si no, comparaba la señal guardada con la nueva capturada.
Cabe destacar que yo no necesitaba que con la información almacenada se pueda reproducir la señal infrarroja, sino que cada vez que pulso la misma tecla del control remoto se grabe la misma información.
Obviamente, todo esto sin resultados. Las simulaciones andan perfecto, pero en la realidad no. Esto me hace pensar que es un problema de la naturaleza del infrarrojo más que de la programación.
 
Me imagino que utilizaste finalmente la opcion del tmr0 para guardar las secuencias? Intentaste utilizar un osciloscopio para ver exactamente las señales que esta recibiendo el PIC? porque recuerda que en la simulacion todo siempre funciona perfecto por lo general es que siempre olvidan el tiempo muerto que tienen los IC al cambio de un estado.

Pero tu problema es que que el pic no guarda la secuencia correcta o tienes problema ya comparandola?
 
No pude hacer pruebas con el osciloscopio ya que este tenría que ser digital o no?

Lo que pasa es que claro, el pic no graba la secuencia correcta. Lo que hacía era: poner a funcionar el pic con el programa. Lo ponía en modo "Aprender". Luego presionaba una tecla del control para que la almacenase. Una vez que la tecla se había almacenado en la memoria EEPROM, sacaba el pic y lo ponía en el programador. Desde la computadora leía los datos guardados en la memoria EEPROM de este. Cuestión que haciendo esto muchas veces, ninguna secuencia almacenada era igual a la otra, incluso presionando la misma tecla con el mismo control. Llegaban a tener cierta similitud, pero nunca eran iguales. Acá te dejo algunas anotaciones que hice de las memorias EEPROM utilizando como modo de almacenamiento el Timero 0.
Lo que guardaba en que cada byte de la memoria EEPROM era la cantidad de veces que se desbordaba el Timer0 entre cada flanco ascendente y descendente (cada 256 us). En un principio, también guardaba en un byte contigüo el estado del contador del Timer0 cuando se veía un flanco ascendente/descendente (por ejemplo: 2 desbordes, 125 --> numero en el que quedó el timer 0); pero esto lo vi tan impreciso que sólo me quedé con la cantidad de veces que se desbordaba:

*******************************************************************

Control Admiral - Tecla Power

0000: 0A 02 01 02 01 02 01 06 .
0008: 01 02 01 02 01 02 01 02 .
0010: 01 02 01 02 01 02 01 06 .
0018: 01 02 01 02 01 02 01 02 .
0020: 01 06 01 06 01 06 01 06 .
0028: 01 06 01 02 01 02 01 02 .
0030: 01 02 00 FF FF FF FF FF .ÿÿÿÿÿ
0038: FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿ

0000: 0B 01 02 01 02 01 02 06 .
0008: 02 01 02 01 02 01 02 01 .
0010: 02 01 02 01 02 01 02 06 .
0018: 02 01 02 01 02 01 02 0A .
0020: 02 06 02 06 02 06 02 01 .
0028: 02 01 02 01 02 01 02 01 .
0030: 02 02 FF FF FF FF FF FF .ÿÿÿÿÿ
0038: FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿ

0000: 0A 02 01 02 01 02 01 06 .
0008: 06 01 02 06 02 01 02 01 .
0010: 02 01 02 06 02 01 02 01 .
0018: 02 01 02 02 02 06 01 06 .
0020: 01 06 01 06 06 02 06 02 .
0028: 06 02 06 02 0A 06 01 06 .
0030: 01 06 FF FF FF FF FF FF .ÿÿÿÿÿ
0038: FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿ

*******************************************************************

Hay veces que en un chequeo, un byte es '06' y en otro chequeo el mismo byte es '01' ! Eso es lo que más me desconcerta.

Saludos.
 
Aun no c esxatamente como el protocolo de los controles remotos pero no podrias ir contanto cantidad de pulsos que manda el control remoto o siempre manda la misma cantidad pero a diferente tiempos?. Si puedes adjuntar tu codigo quizas podria ayudarte.
 
Atrás
Arriba