Para los Alumnos de Microcontroladores y los que deseen implementarlo...
Les dejo imágenes y código de programa que les ayudara ha realizar un Control Remoto Universal. Los protocolos que tienen que implementar se encuentran en este Enlace.
El control remoto que se implementado y simulado en ISIS PROTEUS simula los protocolos IR: SIRC de SONY y RC5 PHILLIPS, con este ejemplo ya pueden culminar su trabajo.
Tiene comunicación Serial por el se envía los comandos respectivos tiene el siguiente formato:
$Dirección-Comando.
La "Dirección" es de tres digitos al igual que el "Comando" Ejemplo: "$005053."
Les dejo imágenes y código de programa que les ayudara ha realizar un Control Remoto Universal. Los protocolos que tienen que implementar se encuentran en este Enlace.
El control remoto que se implementado y simulado en ISIS PROTEUS simula los protocolos IR: SIRC de SONY y RC5 PHILLIPS, con este ejemplo ya pueden culminar su trabajo.
Tiene comunicación Serial por el se envía los comandos respectivos tiene el siguiente formato:
$Dirección-Comando.
La "Dirección" es de tres digitos al igual que el "Comando" Ejemplo: "$005053."
'*******************************************************************************
'Interupción del puerto USART
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_BAUD 2400
RCIF VAR PIR1.5 ' Alias RCIF (USART Receive Interrupt Flag)
OERR VAR RCSTA.1 ' Alias OERR (USART Overrun Error Flag)
CREN VAR RCSTA.4 ' Alias CREN (USART Continuous Receive Enable)
INTCON = %11000000 ' Enable interrupts
ON INTERRUPT GoTo PROTOCOLO ' Declare interrupt handler routine
PIE1.5 = 1 ' Enable interrupt on USART
'*******************************************************************************
'// Define variables
Ciclos VAR BYTE '// numero de ciclos
Index VAR BYTE '// Index
DBYTE VAR BYTE '// Byte de datos
ABYTE VAR BYTE '// 5-bit dirección - protocolo SIRC
Cabecera var byte
Cero var byte
Uno var byte
RETARDO VAR word
RETARDO1 VAR byte
RET VAR byte
'*******************************************************************************
COMANDO VAR BYTE[7]
MARCA VAR BYTE : TIPO1 VAR BYTE : TIPO2 VAR BYTE : TIPO3 VAR BYTE
ACCION1 VAR BYTE : ACCION2 VAR BYTE : ACCION3 VAR BYTE : I var byte
TRISB.7 = 0
TRISB.1 = 0
portb.1=0
'*******************************************************************************
INICIO:
pause 10
PORTB.7 = 0
GOTO INICIO
DISABLE
'*******************************************************************************
PROTOCOLO: 'SELECIONAR PROTOCOLO
HSerin [WAIT ("$"),STR COMANDO \8\"."]
MARCA = COMANDO[0] ' MARCA , SONY, LG ETC
SELECT CASE MARCA
CASE "A" ' MARCA SONY EJECUTAR PROTOCOLO SIRC
Cabecera=96 '// Cabecera = (96 * 25uS) = 2.4mS de duración
Cero=24 '// Cero = (24 * 25uS) = 0.6mS de duración
Uno=48 '// Uno = (48 * 25uS) = 1.2mS de duración
ret=150
FOR I=0 TO 100
GOSUB SIRC
NEXT I
CASE "B"
Cero=32 '// Cero = (32 * 28uS) = 0.889mS de duración
Uno=32 '// Uno = (32 * 28uS) = 0.889MS de duración
RETARDO = 889
ret=156
FOR I=0 TO 100
GOSUB RC5
NEXT I
CASE "C"
CASE "D"
END SELECT
RESUME
'*******************************************************************************
'//////////////////////////////PROTOCOLO SIRC///////////////////////////////////
SIRC:
DBYTE = (COMANDO[4]-48)*100 +(COMANDO[5]-48)*10+ COMANDO[6]-48
ABYTE = (COMANDO[1]-48)*100 +(COMANDO[2]-48)*10+ COMANDO[3]-48
GOSUB ENVIAR_SIRC
RETURN
'*******************************************************************************
'// Send Cabecera Pulsos + 13-bit data/address packet on keypress
ENVIAR_SIRC:
Ciclos = Cabecera
CALL Pulsos
'// Enviar 7 bits de datos
FOR Index = 0 TO 6
IF DBYTE.0[Index] = 0 THEN
Ciclos = Cero
retardo=ret
ELSE
Ciclos = Uno
retardo=ret
ENDIF
CALL Pulsos
NEXT Index
'// Enviar 5-bit de dirección
FOR Index = 0 TO 4
IF ABYTE.0[Index] = 0 THEN
Ciclos = Cero
retardo=ret
ELSE
Ciclos = Uno
retardo=ret
ENDIF
CALL Pulsos
NEXT Index
PAUSE 25 '// 25mS delay entre paquetes
return
'*******************************************************************************
Pulsos: '// Genera 40kHz ;
ASM
Pulso bsf PORTB, 7 ;// 1uS, LED=on [necesita 25uS total]
goto $+1 ;// 3uS (2uS por goto $+1)
goto $+1 ;// 5uS
goto $+1 ;// 7uS
goto $+1 ;// 9uS
goto $+1 ;// 11uS
goto $+1 ;// 13uS
bcf PORTB, 7 ;// 14uS, LED=off
goto $+1 ;// 16uS
goto $+1 ;// 18uS
goto $+1 ;// 20uS
goto $+1 ;// 22uS
decfsz _Ciclos,f ;// 23uS
goto Pulso ;// 25us
goto $+1 ;//2
salto decfsz _RETARDO,f ;// 3
goto salto ;// 4
ENDASM
RETURN '// Retorna programa Enviar_SIRC
'*******************************************************************************
'//////////////////////////////FIN PROTOCOLO SIRC///////////////////////////////
'-------------------------------------------------------------------------------
'//////////////////////////////PROTOCOLO RC5///////////////////////////////////
RC5:
DBYTE = (COMANDO[4]-48)*100 +(COMANDO[5]-48)*10+ COMANDO[6]-48
ABYTE = (COMANDO[1]-48)*100 +(COMANDO[2]-48)*10+ COMANDO[3]-48 +192
GOSUB ENVIAR_RC5
RETURN
'*******************************************************************************
'// Send Cabecera Pulsos + 13-bit data/address packet on keypress
ENVIAR_RC5:
'// Enviar 8 bits direccion mas cabecera
FOR Index = 7 TO 0 STEP-1
IF ABYTE.0[Index] = 0 THEN
Ciclos = Cero
CALL FREC36
ELSE
Ciclos = Uno
retardo1=ret
CALL FREC36b
ENDIF
NEXT Index
'// Enviar 6-bit de datos
FOR Index = 5 TO 0 STEP-1
IF DBYTE.0[Index] = 0 THEN
Ciclos = Cero
CALL FREC36
ELSE
Ciclos = Uno
retardo1=ret
CALL FREC36b
ENDIF
NEXT Index
PAUSE 25 '// 25mS delay entre paquetes
return
'*******************************************************************************
FREC36: ' GENERA FRECUENCIA DE 36KHZ APROX , BIT 0
ASM ;
FRE36 bsf PORTB, 7 ;// 1uS, LED=on [necesita 28uS total]
goto $+1 ;// 3uS (2uS por goto $+1)
goto $+1 ;// 5uS
goto $+1 ;// 7uS
goto $+1 ;// 9uS
goto $+1 ;// 11uS
goto $+1 ;// 13uS
bcf PORTB, 7 ;// 14uS, LED=off
goto $+1 ;// 16uS
goto $+1 ;// 18uS
goto $+1 ;// 20uS
goto $+1 ;// 22uS
goto $+1 ;// 24uS
NOP ;// 25US
decfsz _Ciclos,f ;// 27uS
goto FRE36 ;// 28us
ENDASM
PAUSEUS RETARDO
RETURN '// Retorna programa Enviar_RC5
'******************************************************************************
FREC36b:' GENERA FRECUENCIA DE 36KHZ APROX , BIT 1
ASM
salto1 goto $+1 ;// 2uS
decfsz _RETARDO1,f ;// 3us
goto salto1 ;// 5us
nop ;// 6us ;
FRE bsf PORTB, 7 ;// 1uS, LED=on [necesita 25uS total]
goto $+1 ;// 3uS (2uS por goto $+1)
goto $+1 ;// 5uS
goto $+1 ;// 7uS
goto $+1 ;// 9uS
goto $+1 ;// 11uS
goto $+1 ;// 13uS
bcf PORTB, 7 ;// 14uS, LED=off
goto $+1 ;// 16uS
goto $+1 ;// 18uS
goto $+1 ;// 20uS
goto $+1 ;// 22uS
NOP ;// 23uS
decfsz _Ciclos,f ;// 24uS
goto FRE ;// 26us
ENDASM
RETURN '// Retorna programa Enviar_RC5
'*******************************************************************************
'//////////////////////////////FIN PROTOCOLO RC5///////////////////////////////
'-------------------------------------------------------------------------------
2 comentarios:
Muy buena su pagina, y muy claros sus algoritmos ademas de que estan muy bien explicados.
He aprendido muchas cosas sobre PicBasic Pro, en su Blog.
Muchas Gracias por compartir su trabajo.
Luis Fernando Angel
hola muy buenas, eso codigo si esta completo? no entiendo como envio la direccion y el comando?
Publicar un comentario