TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: osjovi1 en 26 de Abril de 2011, 04:42:34
-
Buenas a todos, necesito comunicar dos pic por medio de modulos rf, los modulos que estoy usando son: tecnologia LINX TXM-916-ES y RXM-916-ES, el pic 16f873lo tengo programado en C, y me gustaria saber que rutinas debo usar para la sustitucion de los encoders. Para no tener que usar un codificador y decodificador.
Gracias.
-
Hola, a mi ahora me tienen que llegar un par de módulos para comunicar dos pics, y lo voy a programar sin los encoders... Creo que no hay ninguna rutina en C para lo que tu quieres, te lo vas a tener que hacer tu...
Tendrás que descartar tú los datos que no sean tuyos mediante soft, porque a tu receptor le va a entrar todo lo que haya por el aire con esa frecuencia, tendrás que codificarte cada dato de forma que puedas discriminar...
-
Hola. puedes probar primero comunicando los 2 PIC por el módulo usart y luego interrumpes la línea de comunicación y pones los módulo LINX, debe funcionar igual, puede que aparezca ruido por esto debes emviar un dato bien codificado.
Saludos.
-
hola que tal el semestre pasado hicimos esto mismo con unos modulos de Rf te dejo el codigo tanto del TX como el RX espero y te funcione
TX
////////////////////////////////////////////////
#include "TX_4550.h"
#byte portb = 0xF81
int8 dat1, dat2=0xFF,i,j;
int16 data;
int32 send[18];
int32 start[3]={50,50,50};
char data1[5];
void main()
{
set_tris_b(0xFF);
while (TRUE)
{
i=0;
j=0;
dat1=portb;
data= MAKE16(dat2,dat1);
itoa(data,10,data1);
for(i=0;i<=2;i++)
{
send=start;
}
for (i=0;i<=4;i++)
{
send[i+3]=data1;
}
for(i=0;i<=4;i++)
{
send[i+8]=data1;
}
for(i=0;i<=4;i++)
{
send[i+13]=data1;
}
for (j=0;j<=17;j++)
{
printf ("%c",send[j]);
}
}
}
RX
//////////////////////////////////////////////////////
#include "RX_4550.h"
#include <string.h>
#use standard_io(b)
#define ready PIN_B7
int i,j,k,x,y,z,d;
int32 start[3]={'A','B','C'};
int32 dato[18];
int32 bandera[3];
int32 dat1[5];
int32 dat2[5];
int32 dat3[5];
void main()
{
set_tris_b(0xFF);
while(TRUE)
{
d=0;
do
{
dato[d]=getc();
if(dato[d]=='A')
{
dato[0]= 'A';
d=0;
}
d++;
}
while(d<=17);
//copia la bandera de inicio del dato recibido
for(k=0;k<=2;k++)
{
bandera[k]=dato[k];
}
//copia en dat1 del dato recibido
for(x=0;x<=4;x++)
{
dat1
}
//copia en dat2 el resto de la bandera
for(y=0;y<=4;y++)
{
dat2[y]=dato[y+8];
}
for(j=0;j<=4;j++)
{
dat3[j]=dato[j+13];
}
if(!strcmp(bandera, start))
{
if (!(strcmp(dat1,dat2))&&!strcmp(dat1,dat3))
{
OUTPUT_HIGH(ready);
for(z=0;z<=4;z++)
{
printf("%c",dat3[z]);
}
printf("\r");
}
}
else
{
printf("\f");
printf("Esperando...");
OUTPUT_LOW(ready);
}
}
}