Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema para decodificar control remoto daewoo r48c04
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="joaco-k, post: 671641, member: 9277"] Hola amigos, estoy tratando de leer los codigos de un control remoto DAEWOO R48C04 con un programa hecho con el mplab, el programa que use de base era uno que encontre en internet para decodificar el protocolo de sony y funciona bien para esta marca; segun la informacion que encontre del protocolo daewoo [URL]http://users.telenet.be/davshomepage/daewoo.htm[/URL], cambie los valores para la lectura de los bits, compile el programa e hice la simulacion con el mpsim, stimulus, watch y el stopwatch y el programa funciona ok, pero cuando lo paso al PIC, no hace nada, subo el programa para que lo puedan analizar y me den su opinion: [code];********************************************************************** ; Programa para decodificar un tren de pulsos codificados en * ; formato Daewoo para el Microcontrolador PIC16F628A @ 4Mhz. * ; utlizando el oscilador interno* ;********************************************************************** LIST P=16F628A #include <p16F628A.INC> ;======================================================= ; Bits de configuracion del pic ;======================================================= __CONFIG 0x3F18 #DEFINE Banco0 bcf STATUS,RP0 ; Fija banco 0 de la memoria #DEFINE Banco1 bsf STATUS,RP0 ; Fija banco 1 de la memoria ;======================================================= ; Definicion de variables, constantes y puertos ;======================================================= Z equ 2 C equ 0 IR equ 4 ; Entrada 4 de PuertoA CMCON equ 0x1f ; Posicion de los comparadores TMR0 equ 0x01 ; OPTION_REG equ 0x81 ; Registro OPTION ESTADO equ 0x03 ; Registro ESTADO ;******* Definición de las teclas del Control Remoto ;Power equ 0x15 ;ChanelL equ 0x11 ;ChanelP equ 0x10 ;TvVtr equ 0x4A ;Rew equ 0x1B ;Play equ 0x1A ;FF equ 0x1C ;Stop equ 0x18 ;Pause equ 0x19 PtoA equ 0x05 ; Puerto A PtoB equ 0x06 ; Puerto B CBLOCK 0x20 Tempo Cont_Ba ; Contador de tiempo (low byte) Cont_Med ; (middle byte) Cont_Alt ; (high byte) ContaBit ; Contador de bits Tecla ; Ultimo comando recibido ; Comando ; Ultimo comando recibido Conta Ciclo1 Ciclo2 Temp0 Temp1 Temp2 ENDC ;======================================================= ORG 0x000 ; vector reset del procesador goto INICIO ; ir a comienzo del programa ;********************************************************************** ; Delay ; Espera por aproximadamente W mseg y retorna ;********************************************************************** Delay clrf Tempo d1 nop decfsz Tempo,F ; Lazo 255 * 4uS goto d1 movwf Tempo ; repita el lazo W veces decfsz Tempo,W goto Delay retlw 0 ;********************************************************************** ; BYTE espera hasta 2 segundos por 14 bits. Los datos ; Daewoo son enviados como 7 bits de direccion y 7 bits ; del cómando, en ambos casos los LSB ; primero. Sólo necesitamos el comando de 7 bit al cual ; agregamos un octavo bit puesto a cero para completar ; un byte ;********************************************************************** BYTE Banco0 clrf Cont_Ba ; reset contadores movlw 0x80 movwf Cont_Med clrf Cont_Alt BYTE1 incf Cont_Ba,F ; Espera por una señal btfsc ESTADO,Z incf Cont_Med,F btfsc ESTADO,Z incf Cont_Alt,F movlw D'3' ; pero no mas de 2 seg subwf Cont_Alt,W ; (2.5*256*256*12us ~ 2seg) btfsc ESTADO,C goto PPAL ; aborte si el tiempo se excede btfss PtoA,IR ; sino cheque a ver si hay señal goto BYTE1 ; y sino, loop ; Hay señal ; call CABECERA ; ver si es un encabezado btfss ESTADO,C goto BYTE1 ; ; Es un encabezado...continue ; Lee 7 bit Código del dipositivo pero los ignora ; movlw D'7' movwf ContaBit ; Preparado para recibir 7 bits BYTE3 call VR_BIT decfsz ContaBit,F goto BYTE3 call _550microS call _4mSeg ; Lee los 7 bits del comando. Resultado en Tecla movlw D'7' ; preparado para recibir 7 bits movwf ContaBit clrf Tecla BYTE2 call VR_BIT rrf Tecla,F decfsz ContaBit,F goto BYTE2 rrf Tecla,F ; agrega un 8 bit bcf Tecla,7 ; puesto a cero ; Como test final, asegurese que son solo 14 bits los recibidos call _550microS clrf Cont_Ba ; Reset contadores clrf Cont_Med BYTE4 btfss PtoA,IR ; Chequee que no hay señal por el ; resto de la transmision del CR goto PPAL ; Si hay aborte incf Cont_Ba,F btfsc ESTADO,Z incf Cont_Med,F movlw D'4' ; Cheque cuanto he esperado subwf Cont_Med,W ; (4*256*10us = 10ms) btfss ESTADO,C goto BYTE4 ; loop hasta que los 10ms expiren retlw 0 ;********************************************************************** ; VR_BIT Determina el valor del bit que se esta recibiendo. ; Retorna con carry = 1 si el bit = 1 y carry = 0 si el bit = 0 ; Los bits Daewoo son codificados como 550us sin portadora (low) seguido ; de 450us de portadora (high) para un "0" o 1450us para un "1". ;********************************************************************** VR_BIT clrf Cont_Ba ; Reset contador BIT1 incf Cont_Ba,F ; determne tiempo de no portadora movlw D'125' subwf Cont_Ba,W ; permite hasta 1000us (125*8us) btfsc ESTADO,C goto PPAL ; aborte si es mayor btfsc PtoA,IR ; mantengase contando portadora viene goto BIT1 ; Un espacio menor que 800us fue recibido ; movlw D'25' ; Asegurese que es mas grande que subwf Cont_Ba,W ; 25*8us = 200us btfss ESTADO,C goto PPAL ; aborte si es menor ; Determine la longitud del pulso IR que esta siendo recibido clrf Cont_Ba BIT2 incf Cont_Ba,F ; Cuente este pase movlw D'250' subwf Cont_Ba,W ; Permita hasta 2000us (250*8us) btfsc ESTADO,C goto PPAL ; Aborte si es mayor btfss PtoA,IR ; siga contando hasta final pulso goto BIT2 ; Señal presente movlw D'52' ; Asegurese que es mayor que subwf Cont_Ba,W ; 69*8us = 552us btfss ESTADO,C goto PPAL ; Si no aborte ; Que es: un 1 o un 0 movlw D'125' ; Compare con un ancho de 1000us subwf Cont_Ba,W ; Carry 1 o 0 retlw 0 ;********************************************************************** ; ; Detecta encabezado > 1.8 ms low ; Retorna con carry = 1 si es un encabezado y carry = 0 si no lo es. ; ;********************************************************************** CABECERA call _8mSeg ; _550microS call _4mSeg clrf Tempo ; Chequee para un encabezado de aprox. 2.5 ms de longitud CAB1 incf Tempo,F ; Cuente cada pase a traves del loop bsf PtoA,IR Banco1 ; Banco 1 movlw B'00100000' ; movwf PtoA ; Reset schmitt movlw B'00110000' ; Entrada a la deriva debido a la movwf PtoA ; luz ambiental Banco0 ; Banco 0 tiempo movlw .2 movwf Ciclo1 uno decfsz Ciclo1,1 goto uno nop movlw D'175' ; Chequee para un encabezado de subwf Tempo,W ; aprox. (175*19us ~4.05 ms) ; call _4mSeg btfsc ESTADO,C goto CAB2 ; Aborte si es muy largo btfss PtoA,IR ; Chequee si la señal esta aun ahi goto CAB1 ; y si esta mantengase looping ; Un pulso de menos de 3ms de duración ha sido recibido ; movlw D'153' ; Asegurese que es mayor que subwf Tempo,W ; 138*13us ~ 1.8ms retlw 0 ; C = 1 si T>1.8ms CAB2 clrw addwf Tempo,W ; Agregando 0 a cualquier numero C=0 retlw 0 ;********************************************************************** ; ; Programa Principal ; ;********************************************************************** Banco0 INICIO clrf PtoA ; Clear registro PtoA clrf PtoB ; Clear registro PtoB movlw 0x07 movwf CMCON ; Apaga comparadores Banco1 ; Banco 1 movlw B'00110000' ; RA4 - RA5 como input movwf PtoA ; Configure TRISA movlw 0x00 ; Puerto B todos Salidas movwf PtoB ; configura TRISB ; banco0 PPAL call BYTE ; Tomar un byte de Comando movf Tecla,0 movwf PtoB ; Muestre comando por Puerto B goto PPAL ;===================================================================== ; TIEMPOS ;===================================================================== ; Rutina de 9.6 mS para detectar estado bajo en la cabecera de la ; tecla pulsada ;======================================================= _8mSeg clrf Temp0 clrf Temp1 clrf Temp2 movlw .3 movwf Temp0 alto2 movlw .250 ; Rutina de 8 mSeg. movwf Temp1 alto1 movlw .2 movwf Temp2 btfss PtoA,IR goto fin alto0 decfsz Temp2,1 goto alto0 decfsz Temp1,1 goto alto1 decfsz Temp0,1 goto alto2 fin retlw 0 ;======================================================= ; Rutina de tiempo de aprox 4000 mS ;======================================================= _4mSeg clrf Temp0 clrf Temp1 clrf Temp2 movlw .2 movwf Temp0 bajo2 movlw .180 ; Rutina de 4 mSeg. movwf Temp1 bajo1 movlw .2 movwf Temp2 btfsc PtoA,IR goto fin2 bajo0 decfsz Temp2,1 goto bajo0 decfsz Temp1,1 goto bajo1 decfsz Temp0,1 goto bajo2 fin2 retlw 0 ;======================================================= _550microS clrf Temp0 clrf Temp1 movlw .10 ; Rutina de 550 mSeg movwf Temp0 alto3 movlw .17 movwf Temp1 nop btfss PtoA,IR goto fin3 alto4 decfsz Temp1,1 goto alto4 decfsz Temp0,1 goto alto3 fin3 retlw 0 ;===================================================================== END ; FIN DEL PROGRAMA[/code] Subo tambien una imagen del control remoto Daewoo, le he hecho variaciones de valores al programa pero no he logrado que funcione, el control remoto esta bien, por que lo revise con un osciloscopio para pc que utiliza la tarjeta de sonido del computador y la grafica muestra que el CR esta transmitiendo; quisiera saber si es que este control remoto maneja otro tipo de protocolo y su grafica de tiempos o valores de los bits para poderlos modificar en el programa, o si hay algo en lo que este fallando, por favor recibo gustosamente cualquier observacion al respecto. [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Microcontroladores y sistemas embebidos
Problema para decodificar control remoto daewoo r48c04
Arriba