Autor Tema: Comunicación RS 487  (Leído 7748 veces)

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

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Comunicación RS 487
« en: 23 de Noviembre de 2008, 08:46:10 »
Buenos dias estimados amigos del foro!!!

Me dirijo a ustedes porque necesito crear una red de pic basada en RS487, en la que necesito para empezar que un pic 18f4550 pueda tener disponible el estado de las entradas y controlar las salidas de un 16f877a, para ello es necesario que ambos se comuniquen en forma bidireccional. Para empezar estoy utilizando dos codigos el del 18f4550 se llama maestroA y del 16f877A se llama esclavoA1. Basicamente lo que deberian hacer estos sencillos codigo fuentes pero que no hacen, es que desde el 18f4550 se envie el caracter 'S' hacia el 16f877A luego este verifique que es el dato y de una salida por el puerto D (esto si logro conseguirlo), luego despues que el 16f877A realizo esto procede a enviar un caracter 'R' al 18f4550 que igualmente lo comparara y arrojara una salida por el puerto D (este es el inconveniente que no me llega el caracter 'R' al 18f4550).

Aqui adjunto ambos codigos fuentes para que evaluen y me ayuden a detectar en que estoy equivocado y porque no logro hacer la comunicación de esta manera, o si existe otra manera agradeceria me la facilitaran.

Codigo del maestroA
Código: [Seleccionar]
#include <18F4550.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600,bits=8,UART1)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define bytes_for_USART_buffer 12

int entb,disp=0;
const char Tipo='R';
static char USART_buffer[bytes_for_USART_buffer];
static int8 USART_nextRec;

void enviar(){
output_bit(pin_c0,1);
delay_ms(5);
printf("S");
delay_ms(5);
output_bit(pin_c0,0);
delay_ms(1);
}

void USART_add_to_buffer(char c){
if(c==Tipo)
output_d(0b01010101);
}

#INT_RDA
void serial_isr(){
char USART_nextChar;
   USART_nextChar='\0';
   if(kbhit()){
      USART_nextChar=getc();
      USART_add_to_buffer(USART_nextChar);
   }
}

void main(){
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
set_tris_b(0xff);
set_tris_d(0x00);
set_tris_c(0b10000000);
output_bit(pin_c0,0);
output_d(0x00);
do{
entb=input_b();
if(disp==0){
enviar();
disp=1;
}
}while(true);
}

Codigo del esclavoA1
Código: [Seleccionar]
#include <16F877.h>
#fuses HS,NOPROTECT,NOLVP,NOWDT
#use delay(clock=20000000)
#use rs232(baud=9600,bits=8,UART1)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define bytes_for_USART_buffer 12

const char Tipo='S';
static char USART_buffer[bytes_for_USART_buffer];
static int8 USART_nextRec;

void enviar(){
output_bit(pin_c0,1);
delay_ms(5);
printf("R");
delay_ms(5);
output_bit(pin_c0,0);
delay_ms(1);
}

void USART_add_to_buffer(char c){
if(c==Tipo)
output_d(0b01010101);
enviar();
}

#INT_RDA
void serial_isr(){
char USART_nextChar;
   USART_nextChar='\0';
   if(kbhit()){
      USART_nextChar=getc();
      USART_add_to_buffer(USART_nextChar);
   }
}

void main(){
set_tris_b(0xff);
set_tris_d(0x00);
set_tris_c(0b10000000);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
output_bit(pin_c0,0);
output_d(0x00);
do{
entb=input_b();
}while(true);
}



Y a continuación les adjunto los codigos fuentes asi como la simulacion en proteus!!!

Les agradesco de antemano su respuesta!!! Que tengan un feliz dia!!!
« Última modificación: 23 de Noviembre de 2008, 08:48:17 por jose374 »

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Comunicación RS 487
« Respuesta #1 en: 23 de Noviembre de 2008, 10:39:59 »
Jose:

Me he copiado los dos programas, los he intentando limpiar de "paja" innecesaria y .... no me aclaro con lo que se supone que tienen que hacer.

¿Puedes poner un poco de orden de ideas y describir de forma estructurada lo que deseas que hagan? A ver si así me aclaro y puedo ayudarte.

1º.- El Maestro espera a recibir ... o que pulsen ...
2º.- Lo indica por el PuertoX y envía "A" por la USART
3º.- Vuelve a 1º

o algo parecido.

Porque dices que "... desde el 18f4550 se envie el caracter 'S' hacia el 16f877A ..." y yo me pregunto ¿cuando lo hace? ¿una vez al comenzar el programa? ¿cuando recibe algo por la USART? ¿cuando alguien pulsa algo? ¿cada cierto tiempo? ¿nunca?

Venga verás como  sale andando.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Comunicación RS 487
« Respuesta #2 en: 23 de Noviembre de 2008, 10:49:25 »
¿Existe RS487 o es una errata?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Comunicación RS 487
« Respuesta #3 en: 23 de Noviembre de 2008, 10:54:35 »
La verdad es que ni me he dado cuenta ¿487?  :shock:

Conozco el 232, el 485 y el 422 pero el 487 al menos para mi es nuevo.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación RS 487
« Respuesta #4 en: 23 de Noviembre de 2008, 14:49:38 »
Hola.

Si existe el RS487  :-) pero no he encontrado mucha info acerca de eso, no lo conocia hasta hoy!!!!

http://allshemes.com/diagrams/repair/search/?query=rs485%20rs487&nohistory=1&h=1
El papel lo aguanta todo

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #5 en: 23 de Noviembre de 2008, 18:48:41 »
El MAX RS487 si existe de hecho lo estoy utilizando para mi tesis!!!

Aqui les dejo el datasheet adjunto. Lo que sucede es que uno lo busca en internet con ese nombre y no aparece, pero en este datasheet si, aunque en su titulo se refiere al rs 485 y al rs 422 solo hay que leerlo detenidamente. Lo envio en dos partes porque sobrepasa el tamaño permitido por la pagina.

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #6 en: 23 de Noviembre de 2008, 18:49:56 »
Parte 2

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #7 en: 23 de Noviembre de 2008, 18:51:13 »
Parte 3 y ultima!!!

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #8 en: 23 de Noviembre de 2008, 19:12:09 »
Bueno regresando al tema central que es conseguir la comunicación entre ambos pic!!!

Pero ante todo pedir disculpas a los amigos del foro por no haber sido tan claro en cuanto a la explicación del funcionamiento. Bueno primero los interruptores en ambos pic no hacen nada en este caso. El unico que utilizo es el que se encuentra conectado en el pin mclr o reset del 18F4550. El 18f4550 al inicio envia un unico caracter 'S', luego de alli no hace mas nada solo leer el puerto B y esperar a que el 16f877a le envie un unico caracter, cuando el 16f877a recibe el primer y unico valor proveniente del 18f4550 cuando atiende la interrupcion lee el valor o caracter recibido y lo compara con 'S', de ser verdadera la opción se mostrara por el puerto b del 16f877a el valor 01010101 y envia enseguida el caracter 'R', y queda leyendo el puerto B. Al momento en que el 18f4550 recibe el caracter esperado y lo compara, saba por el puerto B del mismo 01010101. A partir de este momento ambos quedan leyendo innecesariamente los puertos B solo lo agregue para otra aplicación que estaba trabajanddo.

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #9 en: 23 de Noviembre de 2008, 19:17:50 »
Yo solo quiero es que me ayuden con este pequeño ejemplo y yo me encargo de lo demas!!! en realidad a lo que quiero llegar es a crear una red de varios pics un 18f4550, y 3 16f877a como esclavos en los que el maestro se encargara de controlar las salidas y leer las entradas de los 16f877a, pero  como no quiero que me hagan todo el trabajo solo deseo conseguir la comunicacion de estos 2 pic y les prometo que cuando culmine mi trabajo como agradecimiento llo publicare!!! Estare atento esperando su pronta respuesta amigos!!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicación RS 487
« Respuesta #10 en: 23 de Noviembre de 2008, 19:42:39 »
Hola.

Creo que esto solucionara todos tus problemas
http://www.todopic.com.ar/foros/index.php?topic=19057.0
El papel lo aguanta todo

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #11 en: 23 de Noviembre de 2008, 20:05:14 »
Bueno gracias por tu ayuda amigo pero de alli mismo fue de donde saque el ejemplo. Y no me funciona!!!

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Comunicación RS 487
« Respuesta #12 en: 23 de Noviembre de 2008, 21:58:52 »
¿Como era esa frase del principio de las novelas? ¡Ah, sí! Cualquier parecido con la realidad es mera coincidencia.  :mrgreen:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #13 en: 23 de Noviembre de 2008, 22:10:32 »
Lo que sucede es lo siguiente que en el ejemplo que usted publico la comunicación no se realiza entre dos pic!!! aunque no entiendo porque no me da el resultado que espero!!! por eso mismo recurro a ustedes si supiera la respuesta no les preguntara y lo hago porque no encuentro el motivo por el cual no se realiza lo que espero!!! gracias!!!

Desconectado jose374

  • PIC10
  • *
  • Mensajes: 15
Re: Comunicación RS 487
« Respuesta #14 en: 26 de Noviembre de 2008, 00:09:21 »
Buenas noches estimados amigos amigos de todopic!!!

Bueno le di y le di hasta que logre resolver!!! no era error de programación sino de la forma en que tenia conectado los terminales virtuales!!! Me  pude dar cuenta de este detalle cuando lo desconecte cuando  estaba tanteando haber que error lograba conseguir!!! Bueno estoy disponible para cualquier consulta que requiera cualquier usuario!!! sin estar mandandolo a buscar cosas que no tienen relacion con lo que uno esta haciendo!!! y si no se esta en la disponibilidad de responder mejor no se den respuestas vacias!!! bueno publico este ejemplo ya que de verdad no encontre ninguno por el foro y de ser asi que alguien me corrija!!!

Bueno agradesco de igual forma porque de no ser por la información disponiblle en el foro no hubiese llegado tan lejos!!!

Aqui les dejo el archivo en Rar para que lo prueben!!! funciona correctamente!!!


 

anything