Autor Tema: Usart y modulos RF (ayuda)  (Leído 8339 veces)

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

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Usart y modulos RF (ayuda)
« en: 30 de Mayo de 2010, 12:19:29 »
Buen dia amigos .
Resulata que quiero comunicar 2 pic por comunicacion serie via rf ,he verificado que mi codigo funciona ya que lo he hecho con cables y anda todo bien ,he preobado de todo enbiar datos de bte a byte e inclusive tramas de 5 bytes ,y me funciona bien,pero a la hora de conectar los modulos no anduvo nada ,he revisado de todo y he modificado mucho mi soft, al final ha logrado transmitir datos ,a sido algo asi rustico lo que he implementado ya que no tengo ninguna experiencia en esto,pero la cosa es que el modulo rx no me deja hacer nada ya que siempre me esta recibiendo datos. (ruido) y la usart me llama a interrupcion a cada instante ,lo que he hecho es que siempre que voy a mostrar los datos recibido(los correctos)en la lcd desactivo la interrupcion pñara que me deje mostrar todos los datos sin que el ruido recibido por usart me interrumpa ,y hasta alli todo bien,una vez recibido lo datos correctos muestro los datos en la lcd(previa dessactivacion de la interrupcion)y una vez mostrados los datos vuelvo a activar las interrupciones ,pero luego de esto el pic se queda bloqueado.Bueno eso es lo que estoy pasando ,y quiero saber como es que puedo hacer que el pic ignore el ruido para que no me estee estorvando durante el funcionamiento de las demas rutinas.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Usart y modulos RF (ayuda)
« Respuesta #1 en: 30 de Mayo de 2010, 16:16:42 »
Hola.

Si desactivas la interrupción y siguen llegando datos, cuando la vuelvas a activar, el bufer de recepción estará lleno y eso puede causar problemas (a mi también me paso algo similar). Procura limpiar el bufer de recepción antes de iniciar nuevamente al interrupción de la USART.

Algo que también me dio lio fue la velocidad de transmisión .. pero es por los módulos que use que son los RLP y TLP ..

Saludos
El papel lo aguanta todo

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: Usart y modulos RF (ayuda)
« Respuesta #2 en: 31 de Mayo de 2010, 16:17:11 »
cual seria la manera correcta de borar el bufer del usart tomando en cuenta que trabajo con el pic simulator ide.
Otra cosa mas en que se diferencian los comandos hserin y hserget he notado en algunos programas usan uno de los dos,mayormente cuand usan arrays para crear un bufer he visto que solo trabajn con el comando hseget pero que es lo que haceexactamente cada unos de estos comandos.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Usart y modulos RF (ayuda)
« Respuesta #3 en: 31 de Mayo de 2010, 18:34:53 »
Hserin hace pausa hasta completar los bytes asignados como entrada, es decir si no hay datos espera.

Hserget, solo puede cargar 1 byte y si la uart no tiene nada devuelve cero.

¿Por qué una u otra?, bueno, esto es más difícil de explicar, para un principiante Hserin es su preferida, ya que simplifica la rutina de control y más aun, si no se dominan las interrupciones del micro.

Hserget yo le incluiría en la categoría de programación avanzada. Por desgracia esto es algo muy inmaterial y por lo tanto difícil de explicar, si se utilizan las interrupciones de la usart Hserget es la opción ideal.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Usart y modulos RF (ayuda)
« Respuesta #4 en: 31 de Mayo de 2010, 18:51:39 »
Este hilo puede que te ayude con el tema de la radio frecuencia:

http://www.todopic.com.ar/foros/index.php?topic=14601.0

PD. Si no recuerdo mal, este codigo debería bastar para borrar los errores de la usart y dejarla operativa de nuevo:

   Dim papelera As Byte
   If RCSTA.OERR = 1 Then
      RCSTA.CREN = 0
      RCSTA.CREN = 1
      Hserget papelera
      Hserget papelera
   Endif
Saludos desde Granada, España.

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: Usart y modulos RF (ayuda)
« Respuesta #5 en: 01 de Junio de 2010, 10:40:20 »
gracias por la respuesta dogflu ,si no fuera molestia podrias darme una beve explicacio de lo que es hserget?? esque creo que seria mejor que leyera almenos algo aunque no lo entoienda bien ,ya que es peor estar en la completa ignorancia.
Otra cosa lo que les decia antes era tambien acerca de como hacer para que el ruido del modulo receptor no me este interrumpiendo la secuencia de mi programa (a cada instante que no me deja hacer casi nada)

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Usart y modulos RF (ayuda)
« Respuesta #6 en: 01 de Junio de 2010, 13:11:07 »
Que tal meledu y a todos los foreros,

Pense qeu nunca llegarian a este punto, jejejeje. Meledu no existe forma de eliminar ese ruido que te genera el modulo receptor a menos que solicites a las companias de celulares, de radio, de television y de todas la telecomunicaciones posibles que apaguen sus esquipos (esto incluye todas las seniales satelitales etc). ESto es imposible. Ahora bien tambien podrias colocar tu proyecto en una jaula de Faraday (una cabina o cuarto completamente ahistado del eelctromagnetismo). Pero creqo eu esto tampoco seria factible para ti. En fin no hay forma de eliminar ese ruido.
Ahora pasemos realmente a como solucionar el problema. Hace algun tiempo publique una forma muy efeiciente de usar los modulos de rF, pero no se que paso que no pude encontrar ese tema. Pero continuando, el problema que simpre tenemos es que pensamos que estos modulos se vana comportar como si fueran alambres de un punto a otro, es decir creemos que son "TRUE WIRE". Eso no es asi. Debido a toda la cantidad de seniales que se encuentran en el aire, estas van a diparar al modulo receptor, haciendo que este envie ruido en la salida de datos. Pero si no puedo apagar todas las cominicaciones del mundo ni tampoco puedo colocar en una jaula de faraday el proyecto que puedo hacer?
La solucion es la siguiente. SE necestia realizar un protocolo de comunicacion, y este puede ser algo asi:
1. El transmisor debe enviar un pulso de duracion de unos 50 milisegundos, es decir encender el transmisor y decirle que envie un nivel alto durante 50 ms, eso ocasionara que el receptor detecte una senial muy "fuerte" y hara que el receptor se coloque en modo de "escucha real", Es decir lograremos que el receptor deje de generar ruido por un corto tiempo, es decir lo hacemos estable.
2. Apagamos el transmisor por unos 5 milisegundos. Con esto habremos estabilizado el modulo receptor.
3. Ahora si, podemos enviar los datos. Pero lo qeu yo aconsejo es que se envie un encabezado al principio de la cadena de trasnmision. SE aconseja que ese encabezado sea un dato que cambie de 1 a 0 alternadamente como puede ser un A5h, 5Ah, AAh o un 55h. Pueden usar cualqueir combinacion de ellos.
    Con este paso el receptor solo reconocera que son datos validos siemrpe y cueando reciba este encabezado.
4. Ahora si podemos enviar lso datos qeu necesitamos, es decir los datoa que realmente son los importante y que es lo que queremos transmitir. Importantisimo es usar un tipo de codificacion de datos, como puede ser, manchester, pwm, NEC, p algun otro. Yo sugiero manchester por su simplicidad. POrque es importante codigicar los datos y no simplemente enviarlos? La razon es esta. REgularmente este tipo de modulos trabajan en baudrates bajos es decir de unos 4800 bps por segundo. Esto hace que cada bit tenga una duracion de 208 microsegundos y cada byte es de 10 bits (incluyendo start bit y el stop bit) de 2.08 milisegundos. Ahora bien Esto no es critico si solo se envian un dato, pero vamos a suponer que se necesita enviar una cadena de 10 bytes. Esto hace un tiempo de transmision de 20.8 milisegundos. Ahora bien imaginemos que esos 10 bytes o 10 datos contienen unicamente 0's, es decir es una cadena de 10 bytes que contienen 00h. Eso significa que el transmisor estaria apagado durante 20.8 milisegundos, eso hara que el receptor se coloque en un modo inestable generando ruido nuevamente, como consecuencia estaremos recibiendo datos erroneos y no los datos adecuados. Manchester es una muy buena opcion para resolver este problema
ya que con esta codificacion se garantiza que todo el tiempo habra un bambio de estado, porque un bit se representa por dos estados.
5. Despues de haber enviado los datos, se recomienda transmitir un byte de verificacion, que puede ser un CRC8 o un simple checksum, esto es opcional pero yo lo recomiendo.

A traves de mi experiencia me he dado cuenta que no es importante cual  metodo de codificacion se use, lo que es importante es usarlo. Y para tener una recepcion correcta, es colocar el receptor en modo estable, y eso se logra simplemente enviando un pulso de unos 50 milisegundos.

Espero que esto sea de utilidad y que no lo borren, jejeje. Tal vez fue por accidente la vez anterior. Pero no importa, aqui esta nuevamente la aportacion.

Saludos a todos.

Elreypic.

Desconectado meledu

  • PIC12
  • **
  • Mensajes: 83
Re: Usart y modulos RF (ayuda)
« Respuesta #7 en: 02 de Junio de 2010, 17:40:26 »
gracias amigo , me pondre a investigar sobre la codificacion manchester que mencionas,pero por siaca so tendras alguna info de como manejar la usart en basic?? algo abansado en donde pueda ver para que sirve exactamente cada comando y tamabien sobre el modulo usart como hard,esque he tenido muchos problemas en cuanto al bufer fisico .Gracias de antemano