Autor Tema: Problema de conexión entre PIC a PIC usando RS485 en el medio  (Leído 1787 veces)

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

Desconectado gemanet

  • PIC10
  • *
  • Mensajes: 2
Problema de conexión entre PIC a PIC usando RS485 en el medio
« en: 12 de Julio de 2012, 09:27:10 »
Buen dia. Quisiera ver si alguien podria darme un mano.

Tengo un circuito que tiene un procesador ATMEL. con una salida RS485 a 9600 baudios. desde ahi, pasamos a un circuito unido que recibe RS485.

Ahora bien, el circuito es un PIC16F88 con un Crystal de 16 mhz.. Pero al recibir a 9600 baudios, velocidad que me provee en forma unica el proveedor del circuito con el cual me conecto, recibo parte del paquete de datos.

Les dejo el programa que SI FUNCIONA en 4800 baudios. Pero no en 9600.

#include <16f88.h>
#include <string.h>
#include <stdlib.h>





#fuses  HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOMCLR,NOLVP
#use delay(clock=16000000)

#use rs232(baud=9600,uart1 ,stream=rs485,errors,STOP=1, PARITY=N)
#use rs232(baud=4800, xmit=PIN_b4,rcv=PIN_a0,stream=xbee)

#use fast_io(A)
#use fast_io(B)


void main()
{
//init();
 // ext_int_edge(H_TO_L);
  //disable_interrupts ( GLOBAL );       // enable all interrupts
   setup_adc_ports(No_analogs);
 //  clear_interrupt(INT_RDA);
  // enable_interrupts(INT_RDA);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

 delay_ms(1000);

 while (true)
 {
 
 long timeout;
 timeout=0;
 
 while (kbhit(rs485) )
 {
   fputc(fgetc(rs485),xbee);
 }
 
 while  (kbhit(xbee))
   { fputc(fgetc(xbee),rs485); }
   
  }
}


Me gustaria agregar que si yo hago

char a;
char b;
char c;
char d;
y luego

a=fgetc(rs485);
b=fgetc(rs485);
c=fgetc(rs485);
d=fgetc(rs485);

Esos 4 caracteres los recibo perfectamente. Pero claro, tengo un string que no es fijo, entonces no sirve.
Si uso un puntero a un string. No funciona, tambien hace el problema de comerse gran parte del string e inclusive que aparezcan caracteres raros.

como les digo.. el programa original en 4800 baud anda perfecto.- Pero ahora lo debo usar conectando este circuito a un equipo que tiene velocidad de 9600 , recibir por el XBEE y retransmitir para que llegue a una pc que esta a distancia y que recibe por otro XBEE a RS232.-

Desconectado gemanet

  • PIC10
  • *
  • Mensajes: 2
Re: Problema de conexión entre PIC a PIC usando RS485 en el medio
« Respuesta #1 en: 12 de Julio de 2012, 17:18:57 »
Bueno, otras pruebas realizadas, coloque, un Crystal de 12 mhz. Para que 12000000/9600 de igual a un numero entero, y así evitar el porcentaje de error.
Pero seguimos recibiendo la cadena incompleta y con símbolos extraños.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Problema de conexión entre PIC a PIC usando RS485 en el medio
« Respuesta #2 en: 16 de Julio de 2012, 13:25:07 »
Hola Amigo gemanet

No entendi muy bien eso de..

Citar
Esos 4 caracteres los recibo perfectamente. Pero claro, tengo un string que no es fijo, entonces no sirve.
Si uso un puntero a un string. No funciona, tambien hace el problema de comerse gran parte del string e inclusive que aparezcan caracteres raros.

creo que el xbee trabajan con tramas de datos..

otra cosa si tienes dos dispositivos a diferentes velocidades
simpre se deberia de adaptar al mas lento o el mas rapido saturara al lento
y en cosecuencias perdera datos el mas lento.

Revisate las lineas de definicion de rs232
si el pc va mas rapido que el xbee no se van ha entender y terminaras saturando el xbee

espero que nos cuentes un poquito mas sobre esto.

Seguro que te podemos ayudar.

Un Saludo.