FAQ FAQ  •  Buscar Buscar  •  Registrarse Registrarse  •  Entre para ver sus mensajes privados Entre para ver sus mensajes privados  • Login Login

Controlar un PIC 16f877 desde mando sony protocolo SIRC

Índice de los Foros Electronica Facil » FOROS ELECTRONICA » Microcontroladores PIC
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
AutorMensaje
amen77
6 Asunto: Controlar un PIC 16f877 desde mando sony protocolo SIRC MensajePublicado: 12 Jun, 2011 - 12:55
Nuevo en el Foro
Nuevo en el Foro


Registrado: 12 Jun, 2011
Mensajes: 1

Llevo unos días buscando como puedo configurar el pic 16f877 de manera que realize ciertas instrucciones que se envian desde el mando sony hasta un infrarrojo IR SFH 5110, a ver si alguien me podria decir como puedo diferenciar el pulso de un 0 al de un 1 con instrucciones en un programa del tipo .ASM; con eso creo que ya sabria hacerlo.

Me pasare por aqui en un rato por si no ha quedado demasiado claro y alguien se interesa

Gracias por anticipado, Salu2
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
rina
Asunto:  MensajePublicado: 12 Jun, 2011 - 08:16
Fanatico de la Electronica
Fanatico de la Electronica


Registrado: 14 Ago, 2005
Mensajes: 1894

yo al usar el pic basic mas bien uso un comando que es pulsoint puerta,el pulso a leer ya sea 0 o 1, y la bariable done la mete...

en rai en mplab
es un reten si el bit esta al contrario del quequieres leer "ya sera el largo del pulso 0 o el largo e pulso 1" (ala espera)
una vez q enten elitervalo se pone a incremta uno la variable que usesa, asta que buelve r del contrario y sale.

esplicadome mejor:
un receptor de ingrarrojos esta en estado uno mientr no exixt luinfrarroja que lo escite y se pne a uno cuando la detecta...
y un mando a distancia normalmente dn pulso muy largo indicando que ba mandar la informacion. despues empieza a mandar el codigo:
__------___-_-__-_-_-__-_-__-__-__-__-_-_-______
---inicio-----0--1---0--0--1---0--1---1---1---1---0--0

una cosa asi colo que 32 o 48bit o mas
por norma general lo ultimos 2x8bif son el boton donde 8bit es el valor de la tecla y los otros ocho su valor imvertido todo lo del principio es el indicador o cidificador.

se meten los intervalos de 0 y 1 en el pulso cero para aorrar bateria en los mandos si fuera del reves el mando a distancia consumiria mas corriente al trasmitir los 1.
(a cuentas es lo mismo que lo de +r y -r en los dvd's)

ahora tomando de que el receptor invierte los pulsos, el flanco que hay que contar es el 1.

pones la variable a usar en 0
retienes hasta que la entrada ascienda a 1
boble sumando la barieble + 1
sale del buble al descender a 0

pongamos que a 4Mhz no te da mucho tiempo a hacer operaciones complejas e comparacion en los 300ms +- que dura el pulso que determina la frecuencia.
suponiendo que el pulso cero dura l mitad o l mismo que la frecuencia y el uno dura el doble de tiempo. la baiable que usaste tndra un numero con un 0 y el doble con un 1 esaminas cual es el bit mas alto en el estado, y te quedas con el bit que sea y sea el biy6 o el bit7 bien ls dos (por s baria un poco a relacion de la pila del mando)
y lo incerementas en otra variable (bit6 or bit7)+ la variable que uses eso incrementaria un uno o nada.
(bueno anterior mente hay que desplazar los bit ala izquierda de esa bariable para dar paso al nuevo bit uno y e anterior se situe masarriva asta complr los 8...

me parece que me toy esplayando mucho...

te pongo como lo tengo echo en pic basic para un cristal de 4mhz

infrarrojos:
contador=0
tecla=0
while porta.4=0 'leemos el largo del pulso de inicio codigo
--contador=contador+1
wend
if contador<380 then return si es menor seguro no sirva se sale
high porta.0 ' indicacion
for temp2=0 to 3 ' almacenolos 4 bite del codigo
--for temp1=0 to 7 'introduce bit a bit en el bite
----codigo[temp2]=codigo[temp2]<<1 ' dsplaza los bit ala izquierda = multiplicar *2
----PULSIN PORTa.4,1,ciclo
----codigo[temp2]=codigo[temp2]+(b0 | b1) 'suma el bit largo (el tiempo es relativo al infrarrojo o codigo)
--next temp1
next temp2
' comprueva el codificador 2x8bit y compara el codigo del boton (3ºcodigo)con su invertido (4ºcodigo)
if codigos[0]=codigo[0] and codigos[1]=codigo[1] and codigo[2]+codigo[3]=255 then tecla=codigo[2]
low porta.0
return


bo y b1 son alias del bit7 y bit6 de la variable ciclo "|" simboliza OR y el simvolo << es desplazar ala izquieda los bit.

lo ago de esta manela unica mas rapida para poder cojer el siguiente codigo.

desplazamos lavariable donde metemos el codigo ala izquierda
pulsin es lo que te dije
un reten asta que el flaco sea de 0 a 1
un buble con contador incrementando a uno la variabley sale de el en la transicion de 1 a 0

automaticamente metemos el bit correspondiente a uno en la bariable que bamos asignar como codigo.


tambien se podria usar el contador tmr0
poniendolo a cero en el flanco descendente
y almacenando su valor en el flanco ascendente

teniendoesos principios claros e puede acer de muy diversas maneras o lenguajes

primero prueva a almacenar los valores de los 16 primeros pulsos y metelos en la epron aver lo que te sale y vas tanteando.

un saludo y espero que te sirva de ayuda
 
 Ver perfil de usuario Enviar mensaje privado  
Responder citando Volver arriba
Mostrar mensajes anteriores:     
Cambiar a:  
Todas las horas son GMT
Publicar nuevo tema   Responder al tema
Ver tema anteriorEntre para ver sus mensajes privadosVer tema siguiente
 Índice de los Foros Electronica Facil » FOROS ELECTRONICA »  Microcontroladores PIC
powered by phppowered by MySQLPOWERED BY APACHEPOWERED BY CentOS© 2004 - 2025Información Legalpoliticas de cookiesipv6 ready