Autor Tema: Interpretando la señal capturada en el osciloscopio  (Leído 9927 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #15 en: 25 de Septiembre de 2011, 13:56:31 »
Pues parece que tome un pulso equivocado, cosa que he averiguado cuando he ido a hacer divisiones de 440us habiendo pulsos que eran de por si mas pequeños que eso. Asi que he vuelto a medir y ahora he sacado valores que son mas razonables.



Ahora cuento con un periodo de 410us, lo que me deja un tiempo por cada bit de 205us.  Dado que siempre estamos haciendo aproximaciones basadas en la observacion, ¿es posible redondear a 400us y 200us?

Cuando mido los pulsos para saber cuantos bits contienen me encuentro valores que jamas me dan divisiones enteras, cosa que esperaba por otra parte. En el caso de un pulso que dura 500us, ¿cuantos bits le asigno?¿y alos que miden 166us?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #16 en: 25 de Septiembre de 2011, 14:36:36 »
el caso es que ahi parece que los 0's son mas pequeños que los 1's no?? Es la misma señal? U otra distinta?? En la otra que pusiste parecia que eran todos del mismo tamaño

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #17 en: 25 de Septiembre de 2011, 14:42:28 »
El fenomeno de 0 y 1 de diferentes longitudes ya lo comente anteriormente me parece. La señal la he vuelto a capturar con el osciloscopio pulsando la misma tecla del mando, asi que bueno podriamos decir que es la misma señal capturada de nuevo. Ante esto, ¿como debo proceder?

PD: para ser la primera vez que me enfrento a un proyecto con IR parece que he escogido uno de dificultad.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #18 en: 25 de Septiembre de 2011, 14:51:33 »
mide la duracion del 1, y del 0, quizas la duracion del 0 sea la mitad del 1.

Puede que no sea tan dificil, muchos circuitos de IR unicamente funcionan segun la señal sin contar con el tiempo, es decir que le vas poniendo 0V y 5V indistintamente del tiempo y el circuito lo interpreta sin tener en cuenta la frecuencia de la señal, unicamente lo hace por deteccion de flanco ascendente y/o descendente.

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #19 en: 25 de Septiembre de 2011, 15:26:55 »
He vuelto a capturar la misma señal y tengo la impresion que los tiempos son bastante imprecisos.

http://img842.imageshack.us/img842/2162/21409225.png

Ahora volvemos a tener un periodo de 860us y midiendo los pulsos unos tienen una duracion de casi 400us los 1 y los 0 470us. En cambio en la captura anterior salian 410us y desafortunadamente medi el periodo completo, pero esta claro que los 1 en este caso son mas largos que los 0.

Imprecisiones al margen, esta claro que he de asignar un tiempo, ¿asigno el mismo a todos sean 1 o 0? Cuando tengo varios pulsos encadenados a 1 o a 0, ¿que tiempo utilizo para sacar cuantos bits son?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #20 en: 25 de Septiembre de 2011, 15:59:45 »
quizas el reloj que use el mando no tenga la precision de us y tenga su margen de error, deberias ir probando combinaciones para ver si te funciona.

Yo probaria de tal forma, cogeria 400us como referencia, si por ejemplo tienes 800-900us en +5V pues lo puedes interpretar como 2 unos.

Si tienes 1200us +- lo interpretas como 3 unos. Es decir, si divides el tiempo en el que tienes entre 400 quizas te de 2,3. Pues interpretalo como 2 bits.

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #21 en: 25 de Septiembre de 2011, 16:26:56 »
quizas el reloj que use el mando no tenga la precision de us y tenga su margen de error, deberias ir probando combinaciones para ver si te funciona.

Yo probaria de tal forma, cogeria 400us como referencia, si por ejemplo tienes 800-900us en +5V pues lo puedes interpretar como 2 unos.

Si tienes 1200us +- lo interpretas como 3 unos. Es decir, si divides el tiempo en el que tienes entre 400 quizas te de 2,3. Pues interpretalo como 2 bits.

En definitiva, un redondeo a la baja. En caso de darme un resultado de 2,8 tendria logica de hacerlo como 3 pulsos, ¿no?

Voy a ello y en cuanto lo pruebe os lo comento.

Muchas gracias!

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #22 en: 25 de Septiembre de 2011, 17:55:49 »
Pues parece que este proyecto se resiste a dar alguna facilidad. Cuando he ido a compilar lo que llevaba escrito para ver como "reaccionaba" resulta que me dice no tener suficiente ram para las variables. Claramente, la culpa es del array donde almaceno el orden en el que van saliendo los 1 y 0, pero lo peor es que aun no esta completa.

Código: [Seleccionar]
   unsigned char trama[]={1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
Dada la imposibilidad de crear un array tan sumamente grande, ¿que otra opcion queda si no sigue un patron concreto esta señal?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #23 en: 25 de Septiembre de 2011, 18:58:11 »
te queda el desplazamiento por bits, no te lo queria comentar porque es algo lioso

que usas ccs u otro??

el desplazamiento por bits seria cuestion de crear una variable larga, de 32bits por ejemplo (cuanto mide la trama?) e ir poniendo de 1 en 1.

seria algo asi

unsigned long trama=0b01010101010.........  (lo tienes que colocar en sentido inverso)(maximo 32, si necesitas mas grande te digo otra forma).

y ahora
for(x=0;x<tamañotrama;x++) {
puerto=(trama>>x)&1;
}

que pic usas por cierto?? te lo comento porque el array es pequeño para quedarte sin memoria
« Última modificación: 25 de Septiembre de 2011, 19:10:58 por MerLiNz »

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #24 en: 25 de Septiembre de 2011, 20:16:10 »
Si, estoy usando el CCS y el pic es el 12F683 que tiene 128 de ram y 256 de rom. Sobre lo de desplazamiento de registros no me termina de quedar claro que no de el mismo problema de tamaño excesivo, pues sea como sea tengo que crear una variable de un tamaño considerable. Es mas, se saldria de rango y quizas se debieran usar una sucesion de variables para poder hacerle el desplazamiento. La longitud total de la trama no la he sacado aun porque tengo follon en casa y no han parado de interrumpirme, asi que he perdido la cuenta varias veces y lo he dejado para mañana.

Gracias una vez mas por tus ideas. En cuanto saque la trama completa posteo mis resultados.

Saludos.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #25 en: 25 de Septiembre de 2011, 20:41:21 »
no creo que sea excesiva, si lo es, buscate otro pic.

con el metodo del array si tienes que poner 32 bits de la trama serian 32*8=256bits.

con el metodo de desplazamiento de bits unicamente serian 32bits para 32 0's y 1's.

Tu pic tiene 1024bits de ram, osea tendrias capacidad para cerca de 900 bits (el otro restante te lo quita el CCS).

en la variable usa entonces "int32" por ejemplo, cambiando lo de unsigned long

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #26 en: 25 de Septiembre de 2011, 21:06:29 »
A ojimetro puede que no me falte ram nuevamente, pues al ocupar unicamente bits en lugar de bytes por cada bit de mi señal el aprovechamiento de recursos es infinitamente mayor. Queda aun por ver la longitud total de la trama una vez troceada, pero te anticipo que va a ser bastante larga.

Ahora me asalta otra duda. Estamos moviendonos en tiempos de microsegundos, ¿perjudicaran de forma evidente los tiempos de ejecucion de cada desplazamiento y comparaciones a la hora de reproducir la trama?

Esta claro que la señal salia cada vez con tiempos distintos, asi que puede ser que en este caso sea relativamente insignificante el efecto que puedan tener en el resultado final, pero en otros casos donde la señal sea mas precisa quiza sea algo a "descontar" del delay.

Por hoy no me enrollo mas y me voy a la cama que mañana me espera un dia duro.

Seguire informando de mis progresos.

Saludos.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #27 en: 25 de Septiembre de 2011, 21:11:07 »
depende de la velocidad de tu pic, a 4mhz tendrias unos 10us de error por el for, esto te lo digo como ejemplo ya que para saberlo habria que ver el codigo en asm generado por el ccs, de todas formas es algo que siempre puedes ir viendo sobre la marcha y con el osciloscopio.

Por muy larga que sea la trama, dudo que llege a 100bits xD

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #28 en: 25 de Septiembre de 2011, 22:44:23 »
Pues parece que este proyecto se resiste a dar alguna facilidad. Cuando he ido a compilar lo que llevaba escrito para ver como "reaccionaba" resulta que me dice no tener suficiente ram para las variables. Claramente, la culpa es del array donde almaceno el orden en el que van saliendo los 1 y 0, pero lo peor es que aun no esta completa.

Código: [Seleccionar]
  unsigned char trama[]={1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0};
Dada la imposibilidad de crear un array tan sumamente grande, ¿que otra opcion queda si no sigue un patron concreto esta señal?

Si eso es constante, o sea no se va a modificar, podes agregar el modificar const que guardará el buffer en rom.

Luego si quieres precisión en los tiempos, al realizar el algoritmo podes ir debuggeando con MPLAB SIM (Se puede usar CCS en MPLAB, usar el buscador para saber como) y determinar los tiempos de ejecución como para ajustarlos si es necesario.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MichaelKnight

  • PIC16
  • ***
  • Mensajes: 154
Re: Interpretando la señal capturada en el osciloscopio
« Respuesta #29 en: 26 de Septiembre de 2011, 09:34:09 »
Interesante observacion. Efectivamente sera constante y jamas cambiara su valor, asi que ese es otro modificador a tener en cuenta.

Muchas gracias.