Encender/apagar luz con control remoto

pero madre mia.. tanto copiar proyectos por hay.. jejejjeje

un saludo a todos.

entonces tantos comentarios pero no hay ningun cachin de programa y replanteos de programas..

lo que tendriais que saver es donde mete los valores de los codigos del mando. cosa que teniendo solo el archivo compilado.. bufff (aunque me da que el codificador y bel valor del boton lo cojera de la epron y tendreis que ponersela vosotros)
(me parece que despues de configurar algunba cosas al inicio inicia comandos de epron) pero no estoy seguro. (y paso estudiarlo. antes melo curro)

meta como te esta llendo las practicas con los infrarrojos.
justamente estaba mirando por la red nuevas ideas pero la verdad no e encontrado gran cosa.
tengo en mente un proyecto para regular una dimer.. ( pero que funcione bien. ante todo problena de red) y 4 salidas a rele.

porcierto meta me acavo currar una insoladora nueva que ya acetiempo tenia ganas de montarla y con ello un circuito de practicas nuevo. que porcierto si quereis octener de 7 bit de un puerto tansolo es multiplexarla.
acavo de montar la placa del exapodo o bueno no se lo que montare de primeras igual un cubo led.

pero estaba mirando aver si encontraba algun travajillo que me diera una ideande como recivir el infrarrojo por la entrada rx o sp0 y con ello apenas me coma el tiempo de la decodificacion del mando.

meta y como estas estructurando el programa.. aver enseñame que tienes por hay echo.





un saludo
 
hola peep387, yo logre decodificar de manera muy buena el un control universal utilizando el código para sony, el control es un RCA universal y el código del sony es el 002, logre captar y decodifique todos los comandos, no tome en cuenta la dirección ya que es la misma, únicamente me dedique a tomar los 7bits de los comandos, es realmente fácil ya que la codificación es bien diferenciada entre un 1 lógico y un cero logico aparte del pulso de start que es de 2.4ms aproximadamente, eso lo realice por puerto serie para tener una mejor idea de lo que esta decodificando.

Aprovecho y Explico como funciona el protocolo infrarojo sony y como decodificarlo:

El protocolo sony hay 3 versiones ser segun referencia del enlance de internet, de 12bit, 15bit o 20bit
en la mayoría y en mi caso fue de 12 bits.
Donde:
5 bits son de direccion y 7bits de longitud de comando.

sircmodulation.gif


Un uno esta representado por un pulso positivo de 1.2ms segido espacio 0 logico de 600us
Un cero esta representado por un pulso positivo de 600us segido espacio 0 logico de 600us

sirctrain.gif


El inicio de la señal tiene una cabecera de un pulso que dura 2.4ms seguido por un espacio 0 logico de 0.6ms

Ya teniendo estos datos se puede empezar hacer el programa.
En mi caso yo utilizo el picbasic pro con el comando pulsin.

Lo primero que hago es detectar el pulso de cabecera y si el pulso es de 2.4ms empiezo a codificar los demás pulsos con un arreglo de bit a través de una variable.

Para hacer el primer descarte utilizo la siguiente sentencia.

Nota: yo utilizo un TSOP1136 como receptor infrarojo puede ser cualquier otro.

PULSIN IN_TSOP,0,BIT_IR(0)

Donde IN_TSOP es un symbol para el pin de entrada del TSOP, cero es pulso negados, esto es porque el TSOP invierte los pulsos a la salida y BIT_IR es la variable del arreglo que en este caso es un arreglo de 7, para el pulso de inicio y los 7bits para bits de comando.
Para la declaración de BIT_IR es asi: BIT_IR VAR BYTE(7)

Entonces la primera sentencia luego de esa linea es:

IF BIT_IR(0) <240 THEN GOTO INICIO 'si el tamaño del pulso es menor a 240 se queda en el inicio.

Algo importante es tomar en cuenta el oscilador utilizado ya que cambia el trabajo de pulsin, si se utiliza un oscilador de 4MHZ cada valor de pulsin se toma de 10us y si es de 20MHZ es de 2us, en mi caso utilice uno de 4MHZ interno, para lo cual 240 por 10 = 2400us = 2.4ms.

Una vez que logramos detectar correctamente la cabecera podemos empezar a codificar el comando, en este caso es sencillo porque están bien diferenciados por espacios de tiempo la representación de 1 y 0 lógico con pulsos positivos de 1.2ms para 1 logico y 600us para 0 lógico, por lo cual se puede obviar los espacios vacíos o ceros lógicos.

el código se puede hacer con un arreglo de for next y en pocas lineas pero para fines de aprendizaje lo voy hacer de la manera larga.

Ya teniendo en cuenta como diferenciamos los 1 y los 0, entonces podemos hacer lo siguiente:
Necesitamos una variable para ir almacenando los bit de comando.
comando var byte

PULSIN IN_TSOP,0,BIT_IR(1)
IF BIT_IR(1) <120 THEN
comando.Bit0 = 0
ELSE
comando.Bit0 = 1
endif

En la sentencia anterior si el pulso es menor a 1.2ms el bit cero de comando es 0 de lo contrario el bit cero de comando es uno. Recordando que un uno es representado por un pulso de 1.2ms y un cero por 600us.

Lo mismo ocurre con los demas bits, copia y pega y cambiar los bit y queda asi:

PULSIN IN_TSOP,0,BIT_IR(2)
IF BIT_IR(2) <120 THEN
comando.Bit1 = 0
ELSE
comando.Bit1 = 1
endif

hasta llegar al 7 para BIT_IR y el comando.bit6, debido a que se utilizo el bit 0 de la variable BIT_IR para la cabecera, se empieza a partir del bit1 hasta el bit7, y comando de 0 a 6 hay 7bit.

Luego ya tenemos en la variable comando el valor del botón presionado, en la siguiente lista tenemos los valores de comando para cada botón presionado en un rato subo un video de las practicas.



Dirección Dispositivo
1 TV
2 VCR 1
3 VCR 2
6 Unidad de disco láser
12 Sonido envolvente
16 Cassette / sintonizador
17 Reproductor de CD
18 Ecualizador

Comando Función
0 Dígito 1
1 Dígito 2
2 Dígito 3
3 Dígito 4
4 Dígito 5
5 Dígito 6
6 Dígito 7
7 Dígito 8
8 Dígito 9
9 0 Dígito
16 Canal +
17 Canal -
18 Volumen +
19 Volumen -
20 Silencio
21 Poder
22 Reajustar
23 Modo de audio
24 Contraste +
25 Contraste -
26 Color +
27 Color -
30 Brillo +
31 Brillo -
38 Balance de la izquierda
39 Equilibrar el derecho
47 En espera
 
peep387, la insoladora espero ver imágenes o vídeos, en mi caso lo tengo pendiente, debo tener €€€€€€€€€ para comprar al menos las lámparas.

En cuanto a los LEd infrarrojo, buena inforamción.

Está bien la idea de captar las señales del mando por puerto serie.
 
Debido a un problema que tengo con la pc no puedo subir el video, mas sin embargo realice unas lecturas como indique por el puerto serial y los resultados fueron muy bueno, aunque hay que decir que dependiendo de la distancia los tiempos de los pulsos cambian un poco no se a que puede deberse a la atenuación por la distancia ya que solo ocurre cuando no apunto directamente el control. Anexo el codigo en pbp y el circuito lo subo luego ya que lo hice directo en el protoboard, anexo tambien las lecturas obtenidas en el serial comunicator del microcode.

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17/03/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

					
@ DEVICE PIC16F628A
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_OFF       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF 
INCLUDE  "modedefs.bas"
DEFINE OSC 4

CMCON = 0
TRISA = %00000000      
TRISB = %00000010 
PORTA = %00000000
PORTB = %00000000
 

BIT_IR         VAR BYTE(8)
COMANDO	       VAR BYTE
SYMBOL IN_TSOP = PORTB.1
SYMBOL TX      = PORTB.2
CLEAR

INICIO: 

DETECCION_DE_IR:
COMANDO = 0 

PULSIN IN_TSOP,0,BIT_IR(0)  'PRIMER PULSO NEGADO SE GUARDA EN BIT_IR
IF BIT_IR(0) = 0 THEN GOTO DETECCION_DE_IR   'Si no se recibe nada se queda en DETECCION_DE_IR
IF BIT_IR(0) < 240 THEN GOTO DETECCION_DE_IR  'si el pulso no dura 2.4ms se queda en DETECCION_DE_IR


EXTRAE_BITS:
PULSIN IN_TSOP,0,BIT_IR(1) 
IF BIT_IR(1) < 120 THEN  'SI EL BIT 1 DE BIT_IR ES MENOR A 120
COMANDO.bit0 = 0         'EL BIT 0 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit0 = 1         'EL BIT 0 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(2)
IF BIT_IR(2) < 120 THEN  'SI EL BIT 2 DE BIT_IR ES MENOR A 120
COMANDO.bIT1 = 0         'EL BIT 1 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bIT1 = 1         'EL BIT 1 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(3)
IF BIT_IR(3) < 120 THEN  'SI EL BIT 3 DE BIT_IR ES MENOR A 120
COMANDO.bit2 = 0         'EL BIT 2 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit2 = 1         'EL BIT 2 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(4)
IF BIT_IR(4) < 120 THEN  'SI EL BIT 4 DE BIT_IR ES MENOR A 120
COMANDO.bit3 = 0         'EL BIT 3 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit3 = 1         'EL BIT 3 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(5)
IF BIT_IR(5) < 120 THEN  'SI EL BIT 5 DE BIT_IR ES MENOR A 120
COMANDO.bit4 = 0         'EL BIT 4 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit4 = 1         'EL BIT 4 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(6)
IF BIT_IR(6) < 120 THEN  'SI EL BIT 6 DE BIT_IR ES MENOR A 120
COMANDO.bit5 = 0         'EL BIT 5 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit5 = 1         'EL BIT 5 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(7)
IF BIT_IR(7) < 120 THEN  'SI EL BIT 7 DE BIT_IR ES MENOR A 120
COMANDO.bit6 = 0         'EL BIT 6 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit6 = 1         'EL BIT 6 DE COMANDO ES IGUAL A 1
ENDIF

SEROUT TX,N2400,["COMANDO: "   ,#COMANDO,10]
IF COMANDO < 10 THEN
COMANDO = COMANDO + 1
SEROUT TX,N2400,["BOTON: "   ,#COMANDO,10]
ENDIF

IF COMANDO = 16 THEN
SEROUT TX,N2400,["BOTON: +CANAL",10]
ENDIF
IF COMANDO = 17 THEN
SEROUT TX,N2400,["BOTON: -CANAL",10]
ENDIF
IF COMANDO = 18 THEN
SEROUT TX,N2400,["BOTON: +VOMUMEN",10]
ENDIF
IF COMANDO = 19 THEN
SEROUT TX,N2400,["BOTON: -VOMUMEN",10]
ENDIF
IF COMANDO = 20 THEN
SEROUT TX,N2400,["BOTON: SILENCIO",10]
ENDIF
IF COMANDO = 21 THEN
SEROUT TX,N2400,["BOTON: PODER",10]
ENDIF
IF COMANDO = 59 THEN
SEROUT TX,N2400,["BOTON: PODER",10]
ENDIF 

SEROUT TX,N2400,["PULSO 1 : ",#BIT_IR(1),10]
SEROUT TX,N2400,["PULSO 2 : ",#BIT_IR(2),10]
SEROUT TX,N2400,["PULSO 3 : ",#BIT_IR(3),10]
SEROUT TX,N2400,["PULSO 4 : ",#BIT_IR(4),10]
SEROUT TX,N2400,["PULSO 5 : ",#BIT_IR(5),10]
SEROUT TX,N2400,["PULSO 6 : ",#BIT_IR(6),10]
SEROUT TX,N2400,["PULSO 7 : ",#BIT_IR(7),10]

GOTO DETECCION_DE_IR

Hasta aquí todo bien espero sirva de ayuda para empezar, ya faltaría ponerse con los
demás protocolos RC5, JVA, NEC, etc... Cualquier cosa que correjir me avisan :apreton:
 

Adjuntos

  • IR PUERTO SERIAL.txt
    2 KB · Visitas: 81
Buen trabajo.

En cuanto a lo de subir vídeos, me pasaba lo mismo con el PC y lo subí con una PlayStation 3. Gracias a la PS3, se puede subir directo a youtube o al facebook. No se si con l aX-Box 360 se podrá hacer.

Pruebalo, funciona de maravilla.
 
Logre hacerlo del modo normal ya que no puedo usar ninguna de las opciones sugeridas amigo Meta porque no tengo ninguna, pero igual gracias por el dato, les dejo el vídeo, no le realice comentarios porque creo que se nota bastante de que se trata y como esta en el mismo hilo, lo vi demás, cualquier duda me avisan...:apreton:

 
Bueno el asm es lo mejor pero lo deje hace mucho, pero puedes empezar con algo, por cierto encontré una herramienta ideal para el proyecto se llama IR protocol Analyzer, es un programa gratuito y es muy fácil de usar y auto detecta el comando si lo tiene registrado, en mi caso probé con el sonyirc y funciona muy bien, trabaja con un foto diodo y la entrada de micrófono de la pc es muy sencillo y de gran ayuda, espero te sirva aquí esta el enlace.

http://www.ostan.cz/IR_protocol_analyzer/
 
intenta meter los videos en you tube sin musica.. ami tambien me an quitado alguno o bueno avisaddo que noseque del copirae y eso que suelo ponerlos sin musica igual porque tenga la radio de fondo. (se an buelto un poco puñeteros que menuda tonteria..)

no sta mal reyvilla aunque bueno ese metodo pude mucho programa y muy repetido tanto que uno por bit. asi lo ice yo la primera vez pero no me convencia el metodo. y lo meti en unos for next, solo que la cantidad de instrucciones que conllevan una if con su else de ese tipo ace que no le de tiempo a acerla. y rucandome un poco use otro metodo que come no mucho programa tan solo una subrrutina no muy grande.



este programa seria de un mando panasonic que tengo por casa.. pero que el principio que uso es el mismo para todos.
define osc 4
high portb.1
high portb.2
high portb.3
high portb.5
high portb.6
high portb.7
pause 10
contador var word
ciclo var byte
b0 VAR ciclo.bit7 ' asigna a b0 como intervalo 1 del control remoto
b1 VAR ciclo.bit6
b2 var ciclo.bit5
contador1 var byte
contador2 var byte
incremento var byte
epron var byte
p_epron var byte
servo1 var byte
servo2 var byte
boton var byte
pasos1 var byte
pasos2 var byte
codigo var byte[4]
incremento=1
trisa.4 = 1
'
' programa inicial
'
repe:
if porta.4=0 then gosub controles
if boton=160 then toggle portb.1 :toggle portb.5' boton mute
if boton= 132 then toggle portb.2 :toggle portb.6' boton AV
if boton= 172 then toggle portb.3 :toggle portb.7 ' subir volumen
boton=0
goto repe



controles: ' comprueva el intervalo inicial. ese que es mas largo
contador=0
while porta.4=0
contador=contador+1
wend

if contador<220 then return ' esto es practicamente lo que tienes pulso inicial menor de nos vamos

' en esta parte es donde octengo las 5 byte's 40bit

for pasos2=0 to 4 ' almacenolos 4 bite del codigo
for pasos1=0 to 7 'introduce bit a bit en el bite
codigo[pasos2]=codigo[pasos2]<<1 ' dsplaza los bit ala izquierda = multiplicar *2
PULSIN PORTa.4,1,ciclo
codigo[pasos2]=codigo[pasos2]+(b0|b1) 'suma el bit largo 3 operaciones en el pic
next pasos1
next pasos2

' si te fijas uso mucho menos programa para la lectura de infrarrojos.. tampoco es que sea muy buena pero es lo mas pactico que seme ocurrio y funciona bien.... (aparte de ser pequeño)
'una vez leidos los 40bit y encadenaos en 5bytes comprovamos los 4 primeros bytes de codigo ceso y metemos el byte5 en boton.. qu seria el valor de la tecla que emos pulsado

if codigo[0]=64 and codigo[1]=4 and codigo[2]=1 and codigo[3]=0 then boton=codigo[4]
' verifica el codigo los dos primeros el encoder los 8 primeros bit son iguales que los segundos pero a inversa lo mismo el boton me quedo direcamente con el primer codigo boton el segundo es lo mismo invertido(depende como codifique el mando)
pause 500
return

y bueno la verdad que tenia pensaddo aver si replanteava de otra manera la lectura de los infrarrojos como usando un terminal rx o ps0


pero no esta naddda mal.. asi teneis para rucaros un poco.. yo llevo unas semanas con un atacto mental.. jejejej.. y tengo que ponerme con unos trabajillos.


y porcierto meta. pues la cabronada que no seme dio por sacar ni vieos ni fotos ala placa del relog que seguro te uviera gustado verlo pero si grabe e buenas a primeras con el telefono como me quedo. que tampoco esta bien programada del todo tien algun fallo mas el modo linterna. solo que no tengo nadas de ponerme a ello.. jejejjej


pero no son led infrarrojos son ultravioleta meta.. bueno los que uso son blancos normales pero de 7600k que tiene vastante ultravioleta. tara 10 min en insolar la placa (exactamente lo que tenia pensado) lo bueno que al acertar no estropee ninguna en tantear el tiempo.

un saludo.
 
no si yo tambien lo ice con el 16f84... para no variar. (si toavia no e salido de el) jajajajajajaj
y bueno lo del hola y fin, un poco vacileo. jjejje, ya que tengo que definir los digitos. pues, que narices.

y bueno meta los led an de ser ultravioleta, o porlomenos de rango cercano. yo lo que ice fue comprar unas luces para coches que vendian en el mercachina que era algo azulado, bueno 3 a 4,80€ y los partir ala mitad para distrivuirlos mejor. el circuito al completo no me salria por mas de 20€ sumoniendo que mucho del material era rciclaro empezando por los display. que no son baratos y el pic que es uno de los que mas practicas tengo y esta un poco dañado. pero para eso sirve.

unn saludo
 
Última edición:
Hola peep387, interesante tu codigo el mio es similar, el que coloque es una manera simple de hacerlo de echo hice el comentario que no usaba el for next por cuestiones de que se entendiera lo que se buscaba con el codigo, ahora una idea que tenia en mente era hacer un decodificador universal, pero debido a lo complejo y largo que seria el trabajo, se me ocurre algo mas sencillo, lo que pretendo en si es poder detectar las rafagas de pulsos de un control cualquiera y guardarla en la memoria eeprom del pic, ahora como se trata de pulsos positivos y negativos con sus respectivos tiempos, si logro captarlos sin modificarlo puedo tener un sistema de recepción infrarrojo universal sin necesidad de estar codificando cada protocolo...Seria como un contador de pulsos positivos y negativos con sus tiempos de duración, la cuestión seria si son 64 o de 12 bit y como saber cuando termino, dándole un tiempo máximo para después del ultimo pulso recibido.
 
Debido a un problema que tengo con la pc no puedo subir el video, mas sin embargo realice unas lecturas como indique por el puerto serial y los resultados fueron muy bueno, aunque hay que decir que dependiendo de la distancia los tiempos de los pulsos cambian un poco no se a que puede deberse a la atenuación por la distancia ya que solo ocurre cuando no apunto directamente el control. Anexo el codigo en pbp y el circuito lo subo luego ya que lo hice directo en el protoboard, anexo tambien las lecturas obtenidas en el serial comunicator del microcode.

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 17/03/2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

					
@ DEVICE PIC16F628A
@ DEVICE INTRC_OSC_NOCLKOUT 
@ DEVICE WDT_OFF        
@ DEVICE PWRT_OFF       
@ DEVICE MCLR_OFF       
@ DEVICE BOD_OFF        
@ DEVICE LVP_OFF        
@ DEVICE CPD_OFF        
@ DEVICE PROTECT_OFF 
INCLUDE  "modedefs.bas"
DEFINE OSC 4

CMCON = 0
TRISA = %00000000      
TRISB = %00000010 
PORTA = %00000000
PORTB = %00000000
 

BIT_IR         VAR BYTE(8)
COMANDO	       VAR BYTE
SYMBOL IN_TSOP = PORTB.1
SYMBOL TX      = PORTB.2
CLEAR

INICIO: 

DETECCION_DE_IR:
COMANDO = 0 

PULSIN IN_TSOP,0,BIT_IR(0)  'PRIMER PULSO NEGADO SE GUARDA EN BIT_IR
IF BIT_IR(0) = 0 THEN GOTO DETECCION_DE_IR   'Si no se recibe nada se queda en DETECCION_DE_IR
IF BIT_IR(0) < 240 THEN GOTO DETECCION_DE_IR  'si el pulso no dura 2.4ms se queda en DETECCION_DE_IR


EXTRAE_BITS:
PULSIN IN_TSOP,0,BIT_IR(1) 
IF BIT_IR(1) < 120 THEN  'SI EL BIT 1 DE BIT_IR ES MENOR A 120
COMANDO.bit0 = 0         'EL BIT 0 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit0 = 1         'EL BIT 0 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(2)
IF BIT_IR(2) < 120 THEN  'SI EL BIT 2 DE BIT_IR ES MENOR A 120
COMANDO.bIT1 = 0         'EL BIT 1 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bIT1 = 1         'EL BIT 1 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(3)
IF BIT_IR(3) < 120 THEN  'SI EL BIT 3 DE BIT_IR ES MENOR A 120
COMANDO.bit2 = 0         'EL BIT 2 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit2 = 1         'EL BIT 2 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(4)
IF BIT_IR(4) < 120 THEN  'SI EL BIT 4 DE BIT_IR ES MENOR A 120
COMANDO.bit3 = 0         'EL BIT 3 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit3 = 1         'EL BIT 3 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(5)
IF BIT_IR(5) < 120 THEN  'SI EL BIT 5 DE BIT_IR ES MENOR A 120
COMANDO.bit4 = 0         'EL BIT 4 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit4 = 1         'EL BIT 4 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(6)
IF BIT_IR(6) < 120 THEN  'SI EL BIT 6 DE BIT_IR ES MENOR A 120
COMANDO.bit5 = 0         'EL BIT 5 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit5 = 1         'EL BIT 5 DE COMANDO ES IGUAL A 1
ENDIF

PULSIN IN_TSOP,0,BIT_IR(7)
IF BIT_IR(7) < 120 THEN  'SI EL BIT 7 DE BIT_IR ES MENOR A 120
COMANDO.bit6 = 0         'EL BIT 6 DE COMANDO ES IGUAL A 0
ELSE	                 'SI NO 
COMANDO.bit6 = 1         'EL BIT 6 DE COMANDO ES IGUAL A 1
ENDIF

SEROUT TX,N2400,["COMANDO: "   ,#COMANDO,10]
IF COMANDO < 10 THEN
COMANDO = COMANDO + 1
SEROUT TX,N2400,["BOTON: "   ,#COMANDO,10]
ENDIF

IF COMANDO = 16 THEN
SEROUT TX,N2400,["BOTON: +CANAL",10]
ENDIF
IF COMANDO = 17 THEN
SEROUT TX,N2400,["BOTON: -CANAL",10]
ENDIF
IF COMANDO = 18 THEN
SEROUT TX,N2400,["BOTON: +VOMUMEN",10]
ENDIF
IF COMANDO = 19 THEN
SEROUT TX,N2400,["BOTON: -VOMUMEN",10]
ENDIF
IF COMANDO = 20 THEN
SEROUT TX,N2400,["BOTON: SILENCIO",10]
ENDIF
IF COMANDO = 21 THEN
SEROUT TX,N2400,["BOTON: PODER",10]
ENDIF
IF COMANDO = 59 THEN
SEROUT TX,N2400,["BOTON: PODER",10]
ENDIF 

SEROUT TX,N2400,["PULSO 1 : ",#BIT_IR(1),10]
SEROUT TX,N2400,["PULSO 2 : ",#BIT_IR(2),10]
SEROUT TX,N2400,["PULSO 3 : ",#BIT_IR(3),10]
SEROUT TX,N2400,["PULSO 4 : ",#BIT_IR(4),10]
SEROUT TX,N2400,["PULSO 5 : ",#BIT_IR(5),10]
SEROUT TX,N2400,["PULSO 6 : ",#BIT_IR(6),10]
SEROUT TX,N2400,["PULSO 7 : ",#BIT_IR(7),10]

GOTO DETECCION_DE_IR

Hasta aquí todo bien espero sirva de ayuda para empezar, ya faltaría ponerse con los
demás protocolos RC5, JVA, NEC, etc... Cualquier cosa que correjir me avisan :apreton:

puedo usar el pic clásico (16F84A):D
 
Lo primero son las configuraciones del pic, en tu caso no tienes oscilador interno, así que tendrías que especificar que es externo de 4Mhz y el tipo, y los fuses que no tenga el 84A con respecto al 628A, aparte de eso lo demás quedaría igual.
 
reyvilla, yo ya me curre un programa ace un tiempo para almacenar esos tipos de codigos. vamos el principio es el mismo solo que primero tienes que acer unas partes del programa donde primero cuente la rafagada de pulsos si es menos de 16bit como el el codigo que tu pusiste no valria ya te daria un parpadeo del led indicao que no vale. pero bueno podria mejorarse. pongamos que la base es almacenar el coificador y despues apartir de el almacenar el valor de la tecla.. y bueno como te las injenies programanddo y simplificando.. laa verdad que fue una odisea el que me entrase en el 16f84.
pero despues de escrivirlo lo menos 3 veces.. una seme borro sin querer en otra sobre escrivilo. y bueno la primera lo borre yo que ya me estaba rayando y liando. (cosas que pasan cuando estructuras mal el programa)

la cuestion y a 4 mhz te da tiempo a operar los pulsos y al mismo tiempo acr esta pedazo operacion..
IF BIT_IR(2) < 120 THEN 'SI EL BIT 2 DE BIT_IR ES MENOR A 120
COMANDO.bIT1 = 0 'EL BIT 1 DE COMANDO ES IGUAL A 0
ELSE 'SI NO
COMANDO.bIT1 = 1 'EL BIT 1 DE COMANDO ES IGUAL A 1
ENDIF

lo dudo un poco, te pasara como ami al principio de las pacticas el tiempo que tarda en acer eso a 4Mhz es muy gusto antes de que entres en la lectura del siguiente bit, si a eso le sumas los for next. ya no le da tiempo a leer el siguiente bit.

yo la verdad que las practicas las ice siempre almacenando los valores y resultados en la epron. dspues lo que ago es leer el pic y aver que me dice la epron..


y bueno tan universal no es lo que ice.. em principio seria mas bien solo para tipo codificacion nec y otras pocas parecidas (con los mismos trenes e pulsos) me esplico si es de 16bit normalmnte 8 son el codificador y 8 el boton.. pero no pense en menor de 16bit. si es mayor 32bit las dos ultimas cadenas de 8bit siempre son lo mismo pero una invertida que coresponde al boton y todo lo primero el codificador.. (o como se llame) y naa mas. no me complique mucho. por que con eso ya muchos mandos te valen y no me ocupo esa parte mas de 600 instrucciones una vez compilado, porlomenos la subrutina e lectura del infrarrojo y la de reconocimiento de codigo.. despues todavia te quedo lo que vaya a ejecutar una vez programao el mano. en micaso activar y desactivar bit en el puerto b los 8, para 8 reles

un saludo
 
Última edición:
tengo una gran duda....

y el problema que me prestaba solventando biendo como envia el mano de pinacle este clasico que el receptor lo conectabas al puerto rs232. el circuito creo que era algo muy sensiyo.. pro la verdad que no se donde lo tengo (no lo encuentro por el pc).

pero bueno la custion.. cuando rtrasmites informacion por el puerto 232 es obligatorio el bit e separacion de las caenas e 8 bit...¿?¿?¿? o solo lo es en el 16f628 para entrar en la interruccion???

aunque deveria estar acuendo alguna practica mas que tanto curiosear aaver si veo algo que me de una iea o tanta pregunta.. (pro que poca moral)..

un saludo
 
Atrás
Arriba