TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: elfrancho en 14 de Septiembre de 2010, 16:50:53

Título: Comunicación Serie entre PIC's por RF
Publicado por: elfrancho 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!!!



Título: Re: Comunicación Serie
Publicado por: MLO__ 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
Título: Re: Comunicación Serie
Publicado por: elfrancho 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 !!!!

Título: Re: Comunicación Serie
Publicado por: MLO__ 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
Título: Re: Comunicación Serie
Publicado por: elfrancho 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....

Título: Re: Comunicación Serie
Publicado por: MLO__ 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 (http://es.wikipedia.org/wiki/Suma_de_verificaci%C3%B3n) para el checksum.

Saludos
Título: Re: Comunicación Serie
Publicado por: elfrancho en 15 de Septiembre de 2010, 23:45:46
gracias en el proximo post, las fotos...  saludos...
Título: Re: Comunicación Serie
Publicado por: MLO__ en 16 de Septiembre de 2010, 23:41:17
 ;-)

esperamos esas fotos  :-/
Título: Re: Comunicación Serie
Publicado por: elfrancho en 17 de Septiembre de 2010, 00:35:58
Aca las fotos prometidas:
Trama de un control de alarma de automovil:
(http://lh3.ggpht.com/_l2gU6kOtjso/TJLg13WNjbI/AAAAAAAABjs/fZlnuKpUfWY/s1024/2010-09-14_18-52-17_12_null.jpg)

Circuito en el protoboard....
(http://lh3.ggpht.com/_l2gU6kOtjso/TJLg7X73WEI/AAAAAAAABj0/cfroyaRCiXo/s1024/2010-09-14_18-53-47_432_null.jpg)

Tramas consecutivas....
(http://lh6.ggpht.com/_l2gU6kOtjso/TJLg-0TIiGI/AAAAAAAABj4/uij0GUwSdwI/s1024/2010-09-14_18-55-05_371_null.jpg)


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 !!
Título: Re: Comunicación Serie entre PIC's por RF
Publicado por: MLO__ 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
Título: Re: Comunicación Serie entre PIC's por RF
Publicado por: ASTROCAR 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.
Título: Re: Comunicación Serie entre PIC's por RF
Publicado por: elfrancho 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
Título: Re: Comunicación Serie entre PIC's por RF
Publicado por: elfrancho 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!!!