Ver las NORMAS de estos Foros Web ZackYFileS Chat ZackYFileS Agregar a Favoritos Contactar con Administrador
 
 

TU PUBLICIDAD AQUÍ!!
Navegación
Retroceder   Foros ZackYFileS >
OTROS TEMAS DE INTERES - INTERNET:
> PROGRAMACIÓN Microcontroladores: PICs , AVRs.
Nombre de usuario
Contraseña
Configuración de UsuarioAyuda (FAQs)Nuevos PostsBuscar


Respuesta
 
Herramientas
Antiguo 31/07/2007, 16:12   #1
ZackY
Administrador
 
Avatar de ZackY
 
Fecha de ingreso: 31/mar/2001
Mensajes: 7.477
ZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asi
Post Receptor IR (protocolo NEC) para PIC16F84

Programa para la captura de emisiones Infrarrojos (IR) de mandos a distancia que empleen el protocolo NEC:

[code]program ReceptorIR NEC
' *******************************************************************************
'Programa Receptor de codigos IR
' Protoloco IR de NEC
'
' (c) ZackY 2007 - http://foros.zackyfiles.com/forumdisplay.php?f=437
'
'-HARDWARE:
' MCU: PIC 16F84A
' Cristal: 4 Mhz
'
' Receptor IR USD160 conectado a PORTB.2 (Entrada)
' Este receptor IR proporciona una señal invertida
' PORTB.3 (Salida SEÑAL) PORTA.1 (Salida LED)
' *******************************************************************************

const Flanco1max as word = 316 ' 013Ch
const Flanco1min as word = 152 ' 0098h
const Flanco2max as word = 156 ' 009Ch
const Flanco2min as word = 148 ' 0094h
const AnchuraPulso1 as byte = 100 ' limite máximo para Error


Dim AnchuraPulso as Byte
Dim ComandoTotal as Word
Dim Comando as Byte
Dim Comando_inv as Byte
Dim AddressTotal as Word
Dim Address as Byte
Dim Address_inv as Byte
Dim i as Byte


'Rutina de lectura de CABECERA
Sub procedure Cabecera_IR
Dim BD1 as word
Dim BD2 as word
ini_cabecera:
Comando=0
Address=0
BD1 = 0
BD2 = 0
WHILE PORTB.2 = 1 ' Espera a comienzo de Cabecera (0=comienzo)
nop
WEND
' RECIBO LA CABECERA y COMPRUEBO
WHILE (PORTB.2 = 0) And (BD1 < Flanco1max) ' 1er Flanco OFF
INC(BD1)
WEND ' Si no es 1er Flanco OK, iniciamos proceso
IF (BD1 > Flanco1max) or (BD1 < Flanco1min) THEN
Delay_ms(80)
GOTO ini_cabecera
End if
' Primer Flanco de cabecera correcto
' Comprobamos el segundo Flanco
WHILE (PORTB.2 = 1) And (BD2 < Flanco2max) ' 2º Flanco ON
INC(BD2)
WEND ' Si no es 2º Flanco OK, salimos
IF (BD2 > Flanco2max) or (BD2 < Flanco2min) THEN
Delay_ms(80)
GOTO ini_cabecera
End if
' Hasta aqui CABECERA RECIBIDA CORRECTAMENTE
End sub

'Rutina de un Bit IR
Sub function Bit_IR as Byte
AnchuraPulso = 0
WHILE PORTB.2 = 0
nop
WEND
WHILE PORTB.2 = 1 And (AnchuraPulso < AnchuraPulso1)
Inc(AnchuraPulso)
WEND
inc(i)
IF (AnchuraPulso>83) and (AnchuraPulso<87) THEN ' ¿entre 53h y 57h?
result = 1
End if
IF (AnchuraPulso>28) and (AnchuraPulso<31) THEN ' ¿entre 1Ch y 1Fh?
result = 0
End if
End sub

'Rutina de lectura de TECLA IR protocolo NEC (Entrada PORTB.2)
Sub procedure Lee_Tecla_IR
Cabecera_IR ' Lee la cabecera
' RECEPCION DE STREAM de ADDRESS + COMANDO
' Me dispongo a almacenar stream ADDRESS
i=0 ' Bit 0
AddressTotal.15=Bit_IR 'Bits de Address
AddressTotal.14=Bit_IR
AddressTotal.13=Bit_IR
AddressTotal.12=Bit_IR
AddressTotal.11=Bit_IR
AddressTotal.10=Bit_IR
AddressTotal.9=Bit_IR
AddressTotal.8=Bit_IR
AddressTotal.7=Bit_IR 'Bits de Address_inv
AddressTotal.6=Bit_IR
AddressTotal.5=Bit_IR
AddressTotal.4=Bit_IR
AddressTotal.3=Bit_IR
AddressTotal.2=Bit_IR
AddressTotal.1=Bit_IR
AddressTotal.0=Bit_IR
' Me dispongo a almacenar stream COMANDO
i=0 ' Bit 0
ComandoTotal.15=Bit_IR 'Bits de Comando
ComandoTotal.14=Bit_IR
ComandoTotal.13=Bit_IR
ComandoTotal.12=Bit_IR
ComandoTotal.11=Bit_IR
ComandoTotal.10=Bit_IR
ComandoTotal.9=Bit_IR
ComandoTotal.8=Bit_IR
ComandoTotal.7=Bit_IR 'Bits de Comando_inv
ComandoTotal.6=Bit_IR
ComandoTotal.5=Bit_IR
ComandoTotal.4=Bit_IR
ComandoTotal.3=Bit_IR
ComandoTotal.2=Bit_IR
ComandoTotal.1=Bit_IR
ComandoTotal.0=Bit_IR
' Guardo datos leidos (Address y Comando)
Address = Lo(AddressTotal)
Address_inv = Hi(AddressTotal)
Comando = Lo(ComandoTotal)
Comando_inv = Hi(ComandoTotal)
End Sub

Main:
TRISB = %00000100 ' PORTB.2 como Entrada PORTB.3 como Salida
TRISA = 0 ' PORTA.0 como Salida
PORTB.3 = 0 ' Salida a 0
PORTA.1 = 0 ' LED OFF

Inicio:
While true
Lee_Tecla_IR()
Wend
End.[/code]

Para dudas o comentarios sobre este programa, podéis usar este mismo hilo.
ZackY está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Antiguo 16/01/2008, 22:53   #2
ru_cremas
Usuario Registrado
 
Fecha de ingreso: 16/ene/2008
Mensajes: 2
ru_cremas está en el buen camino
¿Que mandos usan el protocolo NEC?


Saludos!!
ru_cremas está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 21/01/2008, 23:45   #3
ZackY
Administrador
 
Avatar de ZackY
 
Fecha de ingreso: 31/mar/2001
Mensajes: 7.477
ZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asi
El de mi DVD grabador con dico duro de la Marca LG por ejemplo
ZackY está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 22/01/2008, 00:04   #4
ru_cremas
Usuario Registrado
 
Fecha de ingreso: 16/ene/2008
Mensajes: 2
ru_cremas está en el buen camino
Cita:
Iniciado por ZackY Ver mensaje
El de mi DVD grabador con dico duro de la Marca LG por ejemplo
¿Pero como sé que usa el protocolo NEC?


ES decir, tengo un mando, y como sé que usa dicho protocolo...


Me interesaria adquirir un mando universal con dicho protocolo...

Que modelo escogeria??


saludos!
ru_cremas está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 12/11/2011, 21:41   #5
Illgner
Usuario Registrado
 
Fecha de ingreso: 04/may/2005
Mensajes: 38
Illgner está en el buen camino
Smile necesito compilar a .hex

con que programa has realizado el código? me puedes decir el esquema electrico y el porograma para compilarlo. muchas gracias
Illgner está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 27/03/2013, 16:11   #6
rina
Usuario Registrado
 
Fecha de ingreso: 21/may/2006
Mensajes: 11
rina está en el buen camino
pues la gran mayoria de mandos utilizan codificacion NEC o Rc5, si no es asi suele ser muy similar. tambien hay cidificaciones muy diferentes aunque lo mas comun es eso.

la verdad que concretamente no se que lenguaje a utilizado hay algunos comandos que no entiendo. (y el programilla es algo cutre dentro de la versatilidd de distintos codigos)

ace todvia no mucho mejore una subrrutina que uso para la lectura de estos mandos. en mi caso suelo usar el pic basic

lo siento de antemano por no saver arir una pequeña vetana para introducir parte del programa..


contador var word
infra var byte
b0 var infra.6 ' asignamos los bit altos a usar
b1 var infra.7
pulso var byte ' nos sirve para contar los pulsos del mando
boton var byte ' para introducir la tecla del mando
casilla var byte ' esta nos sirve con pulso para encasillar los bit en un byte
codigo var byte [8] ' donde introducimos el codigo

'se definen las interrucciones (todas desactivadas)

status=%00000000
option_reg=%10000000
intcon=%00000000

programa:
if portb.1=0 then gosub infrarrojos 'cuando etecta una señal seva a leerla
' b.1 porque es la patilla ala que conecto el receptor de infrarrojo (puede ser otra)
if codigo[0]=x and codigo[1]=x then gosub comprovar_boton
' X es por un decir, comprovamos quiue los 16bit del addess sean los que queremos
goto programa

' me imagino que esta es la subrrutina que mas os puede interesar
' pongamos que esto en particular es para un cristal de 8mhz pero va tambien de sobra a 4mhz o menos

infrarrojos:
pulso=0
contador=0
while portb.1=0 ' comprovamos si el primer pulso es vastante largo
contador=contador+1
wend
if contador<320 then fin_por_ruido
'
contador=0
while portb.1=1 ' lo mismo pero que no se pase de largo
contador=contador+1
if contador=420 then fin_por_ruido
wend
'
high porta.0 ' nos indica que esta leyendo el codigo
repeat 'una vez valido empezamos a leer los bit, maximo 64bit
infra=0
while portb.1=0
infra=infra+1 ' si el flanco se pasa de largo se pira
if infra=200 then fin_del_barrido
wend
casilla=pulso>>3 ' dividimos entre 8 para la casilla del bite
codigo[casilla]=codigo[casilla]<<1 ' desplaamos in bit ala izquierda para incrementar el nuevo
infra=0
while portb.1=1
infra=infra+1 ' leemos el bit con la informaion si se pas de rango salimos
if infra=255 then fin_del_barrido
if porta.4=0 then fin_del_barrido ' esta para acer vulto a 8mhz
wend
codigo[casilla]=codigo[casilla]+(b0|b1) 'introducimos el bit en el bite
pulso=pulso+1
until pulso=64
fin_del_barrido: ' por ahorrar programa
casilla=casilla-1 ' restamos una bite por el ultimo bit final
fin_por_ruido:
low porta.0
return

es un programa muy util y eficiente.. quizas alla que ajustar algunos valores a relacion del oscilador pero es mas que lo mismo. y bueno que esta es mucho mas mejorada de la ultima que tenia creada y eficiente.

la verda que no es por vacilar. pero me quedo de miedo ocupanddo poco codigo. aun asi se podria acer por la interruccion serial. pero bueno segun esta os poeis acer una idea espues para programarlo como interruccion del serial.

un saludo al foro y un placer ver tanto trabajo.. aunque todo lo importante sea como siempre de gente fuera de españa vamos estadounidenses, ingleses, etc.

aun asi un cordial saludo alos españoles que tambien les gusta estudiar todos estos temarios y no me refiero a la porqueria programa sino al resto de decodificcion etc
rina está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Antiguo 28/03/2013, 17:41   #7
rina
Usuario Registrado
 
Fecha de ingreso: 21/may/2006
Mensajes: 11
rina está en el buen camino
Código:
infrarrojos:
pulso=0
contador=0
while portb.1=0  ' comprovamos si el primer pulso es vastante largo
    contador=contador+1
wend
if contador<320 then fin_por_ruido 
'
contador=0
while portb.1=1 ' lo mismo pero que no se pase de largo
    contador=contador+1
    if contador=420 then fin_por_ruido
wend
'
high porta.0  
repeat  'una vez valido empezamos a leer los bit, maximo 64bit
    infra=0
    while portb.1=0
        infra=infra+1 ' si el flanco se pasa de largo se pira
        if infra=200 then fin_del_barrido
    wend
    casilla=pulso>>3 ' dividimos entre 8 para la casilla del bite
    codigo[casilla]=codigo[casilla]<<1 ' desplaamos in bit ala izquierda para incrementar el nuevo
    infra=0
    while portb.1=1
        infra=infra+1 ' leemos el bit con la informaion si se pas de rango salimos
        if infra=255 then fin_del_barrido 
        if porta.4=0 then fin_del_barrido ' esta para acer vulto a 8mhz
    wend
    codigo[casilla]=codigo[casilla]+(b0|b1) 'introducimos el bit en el bite
    pulso=pulso+1
until pulso=64
fin_del_barrido: ' por ahorrar programa
casilla=casilla-1 ' restamos una bite por el ultimo bit final
fin_por_ruido:
low porta.0
return
rina está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE
Respuesta


Usuarios viendo actualmente este tema: 1 (0 usuarios registrados y 1 visitantes)
 
Herramientas

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Activado

Ir al foro

Temas similares
Tema Autor Foro Resp. Último mensaje
Emisor de IR (Infrarrojos) para ROOMBA con PIC16F84 ZackY PROGRAMACIÓN Microcontroladores: PICs , AVRs. 1 06/02/2009 12:24
Vulnerabilidad en protocolo FTP de Opera (PASV) caminero21 INTERNET: Navegadores, ADSL, etc. 0 02/04/2007 10:30


!! ADVERTENCIAS !!: Las informaciones aquí publicadas NO CONTIENEN KEYS para la decodificación de ningún sistema: NO SON OPERATIVOS en sistemas SAT que precisen de su correspondiente suscripción.

ESTA TOTALMENTE PROHIBIDO EL USO DE ESTAS INFORMACIONES PARA LA MODIFICACIÓN O  DEFRAUDACIÓN DE SISTEMAS DE ACCESO CONDICIONAL.

ESTOS FOROS SON MODERADOS Y NO SE PERMITE LA PUBLICACIÓN DE INFORMACIONES ILEGALES POR PARTE DE LOS USUARIOS. EN CASO DE DETECTARSE ESTE TIPO DE INFORMACIONES, LOS USUARIOS SERÁN EXCLUIDOS DE ESTAS PÁGINAS.

USO DE COOKIES: Utilizamos COOKIES y de terceros para mejorar nuestros servicios y navegación por la web. Si continua navegando, consideramos que acepta su uso.  


La franja horaria es GMT +2. Ahora son las 21:34.


-------------------------------------------------------------------- --------------------------------------------------------------------

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
Hispaservicios - J.G.C - 29112549T - Rio Cinca, 2, 30 (50180) SPAIN.
Todos los derechos reservados. Prohibida cualquier reproducion total o parcial.


Foros Patrocinados por anunciantes.