TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Diecco en 24 de Enero de 2005, 18:28:00
-
Hola gente soy participe del foro desde hace tiempo pero esta es la segunda vez que escribo......
Bueno les cuento que estoy tratando de recibir las señales del control remoto y e investigado mucho sobre el tema...... he visto los post posteados en este foro y la verdad que me parecen muy buenos....
Me he basasdo en la esplicacion de MODULAY con respecto a este diagrama
http://www.ciberia.ya.com/Modulay/img/cadenarc5.gif
y a lo que el esplico a continuacion:
;-----------------------------------------------------------------------------------------------------
La cadena está formada por 14 bits,dos bits de start,un bit de toggle,y los 11 restantes conforman el código numérico que corresponde a las diferentes funciones del mando: 5 para dirección y los otros 6 para el código en sí,siendo los bits mas significativos los primeros que se envian.
Los bits de start son siempre igual: dos unos.
Los bits de direccion entiendo que ,además de diferenciar entre diferentes módulos en un mismo aparato(volúmen,canales,etc),caracteriza también a los diferentes tipos de aparato(dvd,televisor,radio.etc).
Así para cada botón pulsado,esta cadena de 11 bits será diferente.
Cada bit de dato está formado por dos valores lógicos:
"01" para el 1 lógico y "10" para el 0.
Cada bit tiene una duración de 1.788 ms si no recuerdo mal,por lo que para capturar todos los bits tendremos que crearnos una base de tiempos,con el timer,por ejemplo, de 1.788 segundos para que,una vez que detectemos el cero correspondiente al 1 lógico del primer bit de start (cuando el repector está inactivo,la línea siempre está a 1 lógico) habilitemos la interrupción y así ir capturando un bit aproximadamente cada 1.8 ms
;--------------------------------------------------------------------------------------------------------
Mi diseño del circuito es el siguiente
http://ar.geocities.com/diegofusari/RC5.jpg
Como veran uso RA2 como entrada a las señales del receptor IR
Uso una pantalla de LCD para visualizar los datos binarios en su segunda linea luego de recibir el codigo.....
Bueno la cuestion es que yo he simulado en PROTEUS este circuito donde e reemplazado al receptor IR por otro PIC16F84 y he hecho el supuesto codigo para transmitir...... de lo cual anda perfectamente y el LCD me muestra los dos primeros bytes que recivo del transmisor
He montado el hardware de este circuito y la parte del LCD anda perfecto pero no me recibe el codigo al apretar algun boton de varios controles rempotos que tengo... para mi el problema esta en la recepcion del codigo RC5, pues he intentando de varias formas y no tengo exito, es por eso que estoy aqui para ver si me pueden chequear el codigo y darme sus opioniones al respecto, para mi el tiempo de recepcion de entre bit y bit puesde ser que este mal no lo se
El tiempo lo he he hecho con el TMR0 pues haciendo los calculos con el preescalar 128 me da el valor 14 que en Hexadecimal es "0E", al valor FF le he restado 0E lo cual me da "F1" y este valor le cargo al TMR0 con lo cual se me produce una interrupcion por desboramiento al pasar de FF a 00 y asi actualizar de vuelta la interrupcion para luego seguir recibiendo los datos.....
Insisto que en el proteus todo lo diseñado anda perfecto pero en la realidad no me anda la recepcion del codigo...
Mi programa efectuado es el siguiente para que lo vean
http://ar.geocities.com/diegofusari/rc20052.asm
Agradeceria eternamente que aquellas personas que hallan logrado llevar a cabo su proyecto y que les haya funcionado me ayuden en este tema.....ya que estoy muy aburrio y esto solamente me divierte.....
Saludos..
-
No estoy muy seguro de que tengas bien implementada la parte de la interrupción.
No veo que bajes flags,ni que habilites y deshabilites la interrupción para evitarte solapamiento.Corrígeme si me equivoco.
De todas formas,si dices que simula bien,puedes comprobar un par de cosas con un polímetro.Supongo que tu receptor IR es del estilo del IS1U60.Estos receptores ya entregan la trama demodulada y limpita para que capturemos directamente los bits.Es conveniente que el receptro lo conectes como en el dibujo:

Cuando no hay actividad infrarroja,el receptor tiene su salida a 5 V.Podrías comprobar eso de primera mano con el polímetro,y después prueba a mantener pulsado algún botón del mando a distancia y volver a medir a ver si hay actividad.Cuídate de que el receptor no tenga ninguna fuente de luz cerca.
Echale un ojo a la página del amigo Luis Frino,quizá te ayude:
http://www.frino.com.ar/infrared.htm
-
Modulay:
el receptor IR que tengo no se la marca, lo compre en la electroncia con una carcaza metalica, parece ser que la salida de datos del IR es la pata del medio, ya que al alimentarlo esta pata del medio me tira 5V al no recivir señal
Por otro lado no utilizo interrupcion para detectar el flanco decendente ya que RB0 no lo utilido.... Por otro lado la unica interrupcion que utilozo es por desbordamiento del TMR0
Es decir cuando llega un bit a TMR0 lo carorgo con F1 y activo la interrupcion, luego cuando termino de almacenar el bit en la ram espero a que se active la interrupcion ahi es cuando pasaria 1.8 ms y asi susecivamente
La pata que utilizo es RA0 y chequeo esta pata de la siguiente manera
;*******************************************************************************************
;------------------------- Comienzo de la norma RC5 ---------------------------------------*
ARRANQUE btfsc PORTA , 2 ; Esperamos el bit de arranque
goto $-1 ; ......
call INTERRUPCION ; Configuarmos la interrupcion para TMR0
movlw 0xF1 ; tiempo de 1.788 ms
movwf TMR0 ; TMR0 = F1
bsf INDF , 0 ; Primer bit
incf CONTBIT , F ; incrementamos el contador de bits
;*******************************************************************************************
;*******************************************************************************************
ESPERA goto ESPERA ; Esperamos hasta que pasen los 1.788 ms
LUEGO de ke se produzca la interrupcion salto a la rutina RC5 para ir capturando los bits..... yasi susecivamente...
;*******************************************************************************************
;*******************************************************************************************
RC5 call INTERRUPCION ; Configuamos interrupcion
btfss PORTA , 2 ; 0 o 1 ???
goto UNO ; Capturamos nivel alto
goto CERO ; Capturamos nivel bajo
;*******************************************************************************************
;*******************************************************************************************
;---------------------- Captura los bit de nivel alto -------------------------------------*
UNO rlf INDF , F
incf CONTBIT , F
bsf INDF , 0
movlw 0xF1
movwf TMR0
btfsc CONTBIT , 3
goto RESET
goto ESPERA
;---------------------- Captura los bit de nivel bajo -------------------------------------*
CERO rlf INDF , F
incf CONTBIT , F
bcf INDF , 0
movlw 0xF1
movwf TMR0
btfsc CONTBIT , 3
goto RESET
goto ESPERA
;------------------------------------------------------------------------------------------*
RESET clrf CONTBIT
incf CONTBYTE, F
btfsc CONTBYTE, 1
goto VISUALIZA
incf FSR , F
clrf INDF
goto ESPERA
;*******************************************************************************************
;---------------------- Configuracion de interrupciones -----------------------------------*
INTERRUPCION bsf STATUS , RP0
movlw 0xA0
movwf INTCON
movlw 0xD7
movwf OPTION_REG
bcf STATUS , RP0
return
esta es la parte ke mas destaco ya ke no me anda la recepcion, si vos tenes alguna idea o si me ayudas a depurar mas el codigo... te agradeceria tus opiniones...
Nmos vemos en la proxima
PD: mi msn si kieren agregarme a su lista es diecco@hotmail.com
-
jejeje alegria ya me anda tenia un problema con el receptor IR que estaba mal colocado...... hay ke buscar la pata que oscila cuando alimentamos la otras dos al apretar algun boton del control remoto esa es la pata Vout segun el modelo, tambien agregue el capacitor y la resistencia y anda mucho mejor por que filtra todo... hay que ponerlo si o si o si no anda mal.......
TAMBIEN Y MUY IMPORTANTE es ponerlo fuera del alcace de la luz del ambiente,...... es necesario ponerlo dentro de una cajita con acrilico negro asi no se activa por que si....
VOY a retocar el codigo para que ande mas bonito ya que el posteado anda pero no como yo kiero..... jejejejej, ese era un prototipo
PD: Voy hacer un infomre completo completo sobre este tema y mi proyecto.... en una de esas lo cuelgue en alguna ev ya les avisare nos vemos
-
Mmm no anda como yo kiero, es decir al apretar algun boton en la pantalla del LCD me aparece una trama que no es correspondiente a los que deberian ser, me parece que el tiempo de 1.778 mno lo hago bien hacieque estoy intentando hasta que me resulte... si alguien puede aportar por ke esto se me esta tranformando en un problema..... fuckkk
Gracias............