Autor Tema: Comunicación Serie entre PIC's por RF  (Leído 6022 veces)

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

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Comunicación Serie entre PIC's por RF
« en: 14 de Septiembre de 2010, 16:50:53 »
Hola amigos soy nuevo en esto del C..

Quería consultarles si hay alguna forma de elegir un PIN cualquiera de un PIC y enviar una trama hacia un transmisor RF...

Digamos un tren de pulsos...   para luego recibirlo con un receptor RF de 433mhz...

Un comando para enviar  y otro para recibir ese dato...

Para esto podre usar el puerto TX y RX?  puedo elegir otro?

También quería saber si hay alguna libreria que ya me arme una trama con algun metodo para comprobar errores, y de esta manera filtrar ruidos !!!!

Perdon si no me explico bien..

Saludos!!!



« Última modificación: 17 de Septiembre de 2010, 00:55:02 por elfrancho »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación Serie
« Respuesta #1 en: 14 de Septiembre de 2010, 16:58:58 »
Hola.

Si se puede hacer lo que tu quieres, y la sintaxis depende del compilador que uses. En CCS sería algo así:
Código: C#
  1. #use rs232(baud=150,xmit=pin_a0,rcv=pin_a1,bits=8,parity=N)

Saludos
El papel lo aguanta todo

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie
« Respuesta #2 en: 14 de Septiembre de 2010, 17:04:12 »
Hola.

Si se puede hacer lo que tu quieres, y la sintaxis depende del compilador que uses. En CCS sería algo así:
Código: C#
  1. #use rs232(baud=150,xmit=pin_a0,rcv=pin_a1,bits=8,parity=N)

Saludos

Bien, muchas gracias MLO...  ahora otra consulta...    lo que quiero hacer es un control remoto...  como puedo  hacer para que sea seguro...  O sea necesito que sea algo ordenado,  una trama que contenga (id del receptor, comando, fin de trama)
Y luego en el dispositivo receptor como debería identificar el principio de trama y el fin de trama???

Esto de las comunicaciones serie es algo muy nuevo para mi..

Gracias, saludos !!!!


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación Serie
« Respuesta #3 en: 14 de Septiembre de 2010, 20:44:31 »
Hola.

Pues si quieres seguridad en la transmisión usa una velocidad baja. Para el envío puedes usar un inicio y un final de trama y validarlo en el receptor, puedes enviar un byte para hacer un checksum en el receptor, etc.


Saludos
El papel lo aguanta todo

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie
« Respuesta #4 en: 15 de Septiembre de 2010, 10:38:06 »
Buenisimo, voy entendiendo, ahora:

Como debo armar mi trama?
El recepto recibe constantemente ruido ambiente... Como tengo que hacer en el receptor para identificar el inicio de trama?
Que es el checksum?

Desde ya muchas gracias por su paciencia !!!

El el post siguiente voy a subirte una fotos de algunas capturas que hice con un osciloscopio en el protoboard....


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación Serie
« Respuesta #5 en: 15 de Septiembre de 2010, 21:17:14 »
Hola.

Pues, el receptor siempre esta recibiendo caracteres aleatorios, pero son desordenados.

La idea es enviar un string cualquiera, por ejemplo: xHOLA MUNDOy en donde x es el inicio de trama y y es el final de trama. Cuando recibas x comienzas a guardar el string en un buffer y cuando recibes y comparas lo guardado en el buffer con la una variable que tenga el string HOLA MUNDO ... esa es como la idea.

Mira aqui para el checksum.

Saludos
El papel lo aguanta todo

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie
« Respuesta #6 en: 15 de Septiembre de 2010, 23:45:46 »
gracias en el proximo post, las fotos...  saludos...

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación Serie
« Respuesta #7 en: 16 de Septiembre de 2010, 23:41:17 »
 ;-)

esperamos esas fotos  :-/
El papel lo aguanta todo

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie
« Respuesta #8 en: 17 de Septiembre de 2010, 00:35:58 »
Aca las fotos prometidas:
Trama de un control de alarma de automovil:


Circuito en el protoboard....


Tramas consecutivas....



Mañana voy a realizar otras pruebas y les comento los resultados:

Lo que voy a hacer es conectar el transmisor a un pic y el receptor a otro pic...  y comandar un led por RF...

Mañana los resultados!!!



Saludos !!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación Serie entre PIC's por RF
« Respuesta #9 en: 18 de Septiembre de 2010, 00:13:18 »
Hola

Muy buenas las fotos.

La trama que dices que es de un control de alarma de un automovil, la obtienes del control? o usas el receptor de 433MHz para obtenerla?

Saludos
El papel lo aguanta todo

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 666
Re: Comunicación Serie entre PIC's por RF
« Respuesta #10 en: 18 de Septiembre de 2010, 08:27:54 »
Hola buenos dias la idea seria tomarlas del transmisor y procesarlas p'ara ver si es aplicable igual alñ control de los carros. ojo podrias hacer un clonador de esa alarma automotriz.

Saludos y esta muy bueno el proyecto y ahora viene lo bueno el analisis de esa señal y ver como procesarla.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie entre PIC's por RF
« Respuesta #11 en: 18 de Septiembre de 2010, 11:59:22 »
Hola

Muy buenas las fotos.

La trama que dices que es de un control de alarma de un automovil, la obtienes del control? o usas el receptor de 433MHz para obtenerla?

Saludos


Esa trama la estoy tomando desde el receptor!!!

Saludos

Desconectado elfrancho

  • PIC16
  • ***
  • Mensajes: 101
Re: Comunicación Serie entre PIC's por RF
« Respuesta #12 en: 18 de Septiembre de 2010, 12:06:34 »
Hola amigos, estube intentando comandar un led por rf pero he fracasado...  aqui les envìo los codigos de los programas rx y tx:


TX: envía "A" y "B" alternados cada 1 segundo
RX: si el dato recibido es "A" enciende el led,   si es "B" apaga el led...

Pero no funciona :S  aqui el código de ambos

TX:
#include <16F628A.h>
#FUSES NOWDT                  //No Watch Dog Timer
#FUSES INTRC_IO               //Internal RC Osc, no CLKOUT
#FUSES NOPUT                  //No Power Up Timer
#FUSES NOPROTECT              //Code not protected from reading
#FUSES BROWNOUT               //Reset when brownout detected
#FUSES MCLR                   //Master Clear pin enabled
#FUSES NOLVP                  //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                  //No EE protection
#use delay(clock=4000000)
#use rs232(baud=600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,FORCE_SW)
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ);
 set_tris_a (00000000);
 set_tris_B (00000000);
//output_a (00000000);
//output_b (00000000);

 
   // TODO: USER CODE!!
 while (1){
  delay_ms(1000);
  printf("A");            //
  output_low(pin_B2);
  delay_ms(1000);
  printf("B");            //
  output_low(pin_B2);
 }
}






RX:

#include <16F628A.h>
#FUSES NOWDT                  //No Watch Dog Timer
#FUSES INTRC_IO               //Internal RC Osc, no CLKOUT
#FUSES NOPUT                  //No Power Up Timer
#FUSES NOPROTECT              //Code not protected from reading
#FUSES BROWNOUT               //Reset when brownout detected
#FUSES MCLR                   //Master Clear pin enabled
#FUSES NOLVP                  //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                  //No EE protection
#use delay(clock=4000000)
#use rs232(baud=600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,FORCE_SW)

char x=0;
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ);
 set_tris_a (00000000);
 set_tris_B (00000010);
//output_a (00000000);
//output_b (00000000);

   // TODO: USER CODE!!
 while (1){

   if (kbhit()) {
       x=getc();
       if (x=="A") {
         output_high (pin_A2);
      }
      if (x=="B") {
         output_low (pin_A2);
      }
   }
}
}


A ver si alguien me puede ayudar...  saludos!!!


 

anything