hola, mira, tengo varias ideas para vos...
el receptor infrarrojo, cuando detecta un tren de pulsos a 40kHz, tira la salida a 0, o a 1, no se. Pero la verdadera información del control remoto tiene una frecuencia de unos 800Hz aprox. VER IMAGEN ADJUNTA
entonces lo que vos vas a tener a la entrada de tu micro es una señal de aprox. 800Hz.
como hacer para detectar que el control remoto empezo a emitir?
1. si usas el PORTA, no te queda otra que hacer una encuesta constantemente al puerto hasta que cambie del estado de reposo.
2. si usas el PORTB, podes usar tanto la linea RB0 como las lineas RB4;RB7. Con estas usas las interrupciones como detector de cambio de estado.
tanto en una como en otra vamos a tener un problema... como detectar un cero al principio? y si, porque si ya en reposo tenes un cero, que cagada...
bueno, como lo que vos necesitas es todo un byte de información, miras la tabla de codigos dl control y te fijas cuando va a haber un 1. apenas lo haya contas cuantos ceros te comiste y despues simplemente los metes al final del byte. esa es una idea qe tengo.
ahora... el gran problema... como leo 8 bits por una sola linea? tenes qe generar por software tu propia comunicacion serie.
mi idea, y seguro la de muchos:
esperas a tener un uno, cuando lo tenes damos por empezado la recepcion de codigo del control.
primer bit SIEMPRE: 1
qe hago? seteo el CARRY y lo desplazo con el comando "rrf" en un reigstro cualquiera, sea el W o uno que hayas definido vos.
despues de desplazar el bit leido, procedes a leer el proximo bit del control (a todo esto tenes qe esperar 1/800Hz para tener la certeza de qe cambie de estado... por las dudas, en el primer bit yo esperaria un poco mas, y despues si esperaria 1/800Hz). si el proximo bit da uno de nuevo, volvemos a setear el carry y desplazarlo en el mismo registro anterior, ahora, si te da cero, borramos el carry y lo desplazamos...
este proceso lo tenemos qe repetir 8 veces para leer los 8 bits.
ejemplo:
bueno... despues de que termine de leer el codigo, lo comparas con tu lista, o haces un salto indexado como dijo Meta y listo...
espero que te haya servido...
cualquier cosa pregunta por aca.
salu2,
mano.
el receptor infrarrojo, cuando detecta un tren de pulsos a 40kHz, tira la salida a 0, o a 1, no se. Pero la verdadera información del control remoto tiene una frecuencia de unos 800Hz aprox. VER IMAGEN ADJUNTA
entonces lo que vos vas a tener a la entrada de tu micro es una señal de aprox. 800Hz.
como hacer para detectar que el control remoto empezo a emitir?
1. si usas el PORTA, no te queda otra que hacer una encuesta constantemente al puerto hasta que cambie del estado de reposo.
2. si usas el PORTB, podes usar tanto la linea RB0 como las lineas RB4;RB7. Con estas usas las interrupciones como detector de cambio de estado.
tanto en una como en otra vamos a tener un problema... como detectar un cero al principio? y si, porque si ya en reposo tenes un cero, que cagada...
bueno, como lo que vos necesitas es todo un byte de información, miras la tabla de codigos dl control y te fijas cuando va a haber un 1. apenas lo haya contas cuantos ceros te comiste y despues simplemente los metes al final del byte. esa es una idea qe tengo.
ahora... el gran problema... como leo 8 bits por una sola linea? tenes qe generar por software tu propia comunicacion serie.
mi idea, y seguro la de muchos:
esperas a tener un uno, cuando lo tenes damos por empezado la recepcion de codigo del control.
primer bit SIEMPRE: 1
qe hago? seteo el CARRY y lo desplazo con el comando "rrf" en un reigstro cualquiera, sea el W o uno que hayas definido vos.
despues de desplazar el bit leido, procedes a leer el proximo bit del control (a todo esto tenes qe esperar 1/800Hz para tener la certeza de qe cambie de estado... por las dudas, en el primer bit yo esperaria un poco mas, y despues si esperaria 1/800Hz). si el proximo bit da uno de nuevo, volvemos a setear el carry y desplazarlo en el mismo registro anterior, ahora, si te da cero, borramos el carry y lo desplazamos...
este proceso lo tenemos qe repetir 8 veces para leer los 8 bits.
ejemplo:
Código:
CBLOCK
Codigo
BCont_A
ENDC
movlw .8
movwf BCont_A
Byte btfss ENTRADA
goto EsCero1
EsUno1 bsf STATUS,C
goto Fin
EsCero1 bcf STATUS,C
Fin rrf Codigo,F
call RetardoX
decfsz BCont_A
goto Byte
bueno... despues de que termine de leer el codigo, lo comparas con tu lista, o haces un salto indexado como dijo Meta y listo...
espero que te haya servido...
cualquier cosa pregunta por aca.
salu2,
mano.