Hola dom_shaggy, y Bienvenido a nuestros Foro TODOPIC,
para poner un mensaje nuevo en el foro ,primero saber que lenguaje de programacion usas, si es problema de componente, en el foro Tecnico, y si es pregunta que no va ni con lo uno ni lo otro, en el foro OFF TOPIC, si tiene dudas arriba en la pagina principal FUNCIONAMIENTOS DEL FORO TODOPIC ahi te explica todos.
bien respecto a tu problema, puede ser varias, mejor seria si pusiera el codigo y un esquema de tus projectos asi te pueden ayudar mas gente con mas experiencia.
habia que ver como conmuta el MAX485 y si usas interrupciones para activar los Modos (RX-TX).
el Protoboard puede dar problema con el cristal, si lo usa externo y si es internos ahi puede ser el problema, otros problema puede ser la alimentacion de los micros.
ante de poner un mensaje te aconsejo que use el Buscador del foro respecto a RS485 o cualquier otros dudas y si encuentra tus problema entonce escribir un nuevo mensaje.
Saludos
Hola, gracias por tu respuesta, creo que por ahora seguiré en este mismo post puesto que es afín con mi problema y posiblemente le sirva a quien lo inicio.
Adjunto el esquemático de proteus, no se si haga falta unas fotos del montaje físico.
El programa fue realizado en el programa PIC C y lo que hace es que cuando reciba el carácter indicado, toma el dato del puerto B y lo envía a labview, esto es un numero y los dos pic hacen lo mismo.
Como les mencione antes, los dos PIC están montados en la misma porto con la misma configuración y cristal (Cada uno con un cristal de 4MHz) y al PC se conectan con un adaptador de RS485 a USB con protocolo CDC el cual tiene una resistencia de 120 ohm en los conectores A y B(esto no se evidencia en el esquemático adjunto.), cada pic al ser conectado por aparte funciona muy bien pero al unir los MAX485 por los pines A y B, estos dejan de funcionar y ya no transmiten.
A continuación el programa.
#include <16F876a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, WDT
#use delay(clock=4M)
#USE rs232(baud=9600, xmit= pin_c6, rcv=pin_c7, bits=8, parity=E)
char rx;
#int_rda
void main()
{
set_tris_b(0xFF);
set_tris_a(0x00);
setup_wdt(WDT_36MS);
int count;
rx='z';
while(TRUE)
{
if (kbhit())
{
output_low(pin_c0);
restart_wdt();
rx=getch();
}
if (rx =='A')
{
output_high(pin_c0);
restart_wdt();
count=input_b();
printf("%d",count);
delay_ms (10);
output_low(pin_c0);
rx='z';
restart_wdt();
}
}
}
Aclaro que me vi obligado a activar el WDT por que tras la segunda o tercera lectura de puerto con Getch() el pic se bloqueaba y dejaba de funcionar, le hice de todo para remediar esto y al final solo pude activar el WDT con lo que funciona perfectamente.
Son 2 pic con el mismo programa, el 16F876a y un 16F873a, uno tiene la letra A como carácter de inicio y el otro actúa cuando recibe la letra B, es su identificación en la red.
Estoy algo desesperado con este proyecto ya que siempre cuando creo que ya queda me sale algo, por favor ayúdenme... se los agradezco.