Autor Tema: El RS485, un Relé en la lejanía: Hardware y Software  (Leído 77733 veces)

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

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #60 en: 06 de Septiembre de 2008, 11:43:54 »
Hola Enigma !  :)

Yo estoy trabajando actualmente con un proyecto que involucra RS485 y estoy utilizando el SN75176.
Cuando comencé a diseñar la placa que vá conectada a la PC con el MAX232 y el SN75176, intenté alimentarla directamente con DTR y/ó RTS desde el mismo COM1, pero no me funcionó.

Al investigar porqué me sucedía ésto y al alimentar dicha placa de forma externa, descubrí que en Tx, la placa (MAX232 + SN75176) me consumía cerca de los 70mA !!!  :shock: por lo que tuve que dotarla de una fuente de alimentación independiente.
Podría haber sacado alimentación de la misma PC pero es para una aplicación que podría llamarse "móvil", por lo que la alimentación de energía debía acompañarse con la interface.

No sé cuál será el consumo del MAX485 pero debe estar próximo supongo. Habría que revisar el datasheet.

Espero te sirva el comentario.

Saludos.
Mario

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #61 en: 06 de Septiembre de 2008, 16:34:14 »
Mirando los Datasheets veo que el SN75176 de Texas Instruments consume 60 mA en transmisión y el DS75176B de National consume 55 mA.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #62 en: 10 de Septiembre de 2008, 10:14:10 »
Hola Muchachos gracias por estar atentos, yo no habìa respondido, porque la pagina ha estado obtusa y siempre decia SERVICE UNABLE!  :? Pero gracias a Dios ahorita logre ingresar...
 
ES interesante lo que comentas Marioguillote, yo estoy trabajando en un proyecto "Pasivo" y pues necesito la comunicaciòn 485... Intente sacar la misma también de la PC, pero fue un intento fallido puesto que el consumo es de 30mA. Pero a diferencia tuya estoy usando un ADM485AN que es el mismo MAX485 pero es de la Analog Device, donde según su datasheet el consumo ha de ser entre 0.7 y 2.2mA :shock: lo cual para mi es perfectisimo, porque lo minimo que requiero son 4mA de consumo del circuito. Pero al parecer como siempre, todo en papel es bello hermoso, puesto que en la realidad no es así, porque cuando estoy transmitiendo un dato y le mido el consumo, este es de 25mA :shock: osea!!!  ... de 2.2mA a 25mA es la locura :z)  y bueno, ´lo peor de todo es que no dice de ninguna resistencia ni de ningún arreglo que hacerle para que en realidad consuma lo que tiene que consumir!! Y lo peor de todo es que no puedo conectarle fuente externa, porque entonces ya pasaría de Pasivo a Activo! y no es la idea!!!! :? Estoy frita, he hecho miles de circuitos para bajar ese consumo y nada, porque o smplemente no transmite, o se calienta o consume más de lo que debe! :?

P.D: Adjunto les envio el datasheet del ADM485AN para que comprueben que el consumo que les dije es cierto!

Y lo que dice RedPic con lño del consumo del SN75176 es muy cierto acabo de ver el datasheet y es la locura en consumo de corriente!!! :z)

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #63 en: 11 de Septiembre de 2008, 08:46:10 »
Hola Enigma !

.... pero es de la Analog Device, donde según su datasheet el consumo ha de ser entre 0.7 y 2.2mA ...

Según el datasheet, yo entiendo eso cómo Salidas Habilitadas = Output Enable, lo que no significa "Transmitiendo"

Si te fijas más arriba en el gráfico que has puesto, en la primera sección donde están las especificaciones del driver, habla de corrientes de cortocircuito de hasta 250 mA en las salidas y más abajo en el datasheet donde están las curvas características, se vé que la corriente de salida vá a llegar a los 100 mA cómodamente,con estados bajos ó altos en las entradas.

Debieras alimentar al menos momentáneamente la placa que utilizas de interface, con una fuente externa y lograr la comunicación a través del bus.
Una vez que hayas comunicado exitosamente, medir la corriente de consumo de la interface.
Seguramente te consumirá valores cercanos a lo que te estamos expresando con Diego.
El puerto serie al no poder entregarte toda la energía que necesitas para hacer funcionar la interface y te hará cometer errores de creer que la misma no funciona; cuando es en realidad que el COM1 no puede darle la energía suficiente para transmitir.

Respecto a que no puedes conectarle una fuente externa porque pasarías de un sistema pasivo a uno activo, puedo decirte que tu conectarás la interface a una PC y nada te impedirá sacar 5 Volts de la misma PC para alimentar tu interface. No entiendo porqué has tenido un intento fallido  :shock: la fuente de la PC entrega muchos amperes a 5 Volts por lo que no veo el motivo de que no puedas sacarla de allí. (vuelve a probar.... cables rojos)
Estamos de acuerdo en que no será solo conectar en COM1 y ya está !, pero puedes sacar energía de la misma PC si la aplicación es fija (por más "pasiva"que sea)

Creo que no podrás evitar la alimentación externa (de donde provenga).
Corrientes de 2 mA a niveles TTL no llegarían a más de 20 metros en cualquier cable ... es correcto que consuman entre 50 y 100 mA los IC éstos.

Saludos !
Mario

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #64 en: 12 de Septiembre de 2008, 23:17:01 »
Umm si te entiendo! Tu me dices extraer los cables de 5V de la fuente de la pc! Eso seria una solución bastante razonable siempre y cuando la aplicación va dirigida a procesos cercanos al area de control... Pero imagina en una industria, que el transmisor este en campo y la sala de control este a 200 o 300 metros del area... No me seria factible alimentar con la pc, la targeta interface que estoy diseñando, al menos que lleve un cable que salga de la fuente de la pc que está en sala de control hasta el area donde se encuentra el transmisor! un poco engorroso!

Yo lo que estaba pensando era pues, en vista de que solo puedo usar 20mA que es lo que debe consumir el circuito como tal (bueno en realidad son 4mA), pero podría usar los otros 16mA cuando cuando necesite transmitir. Es decir, en cristiano. Cuando la conexión RS485 este en "linea", que se yo identificando esa conexión de alguna manera (aún no se como :?), pues en ese momento mi transmisor no tomara medidas de campo, solo limitará a enviar la información que previamente he almacenado en forma de historial en la eeprom interna del pic; y cuando desconecte el cable de transmisión, pues que se detecte esa conexión de alguna manera y pues encender el transmisor para que siga recogiendo datos! No se si estará muy loca esa idea! :shock:

PD; Por cierto tienes razón con lo del datasheet... Sorry!   :oops:

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #65 en: 13 de Septiembre de 2008, 00:46:46 »
Hola nuevamente Enigma !

Umm si te entiendo! Tu me dices extraer los cables de 5V de la fuente de la pc! Eso seria una solución bastante razonable siempre y cuando la aplicación va dirigida a procesos cercanos al area de control... Pero imagina en una industria, que el transmisor este en campo y la sala de control este a 200 o 300 metros del area... No me seria factible alimentar con la pc, la targeta interface que estoy diseñando, al menos que lleve un cable que salga de la fuente de la pc que está en sala de control hasta el area donde se encuentra el transmisor! un poco engorroso!

No, no, no señorita ...  :)

La interface la debes tener siempre "pegada" (por dar un término figurado) a la PC.
Tú sales y/o entras a la PC con RS232 y allí mismo, en la misma plaqueta debe estar el conversor a RS485 (ADM485AN).
No puedes salir de la PC, recorrer 200 metros y colocar en el campo a la interface.
RS232 (lo que tienes en el COM1 ó Puerto Serie) no te permite una distancia de cable mayor a 15 metros, entonces sí ó sí deberás tener la interface junto a la PC y luego de allí sí puedes irte los metros que quieras con el cableado y allá donde tú quieras a los metros que desees, colocas tu PIC con el otro ADM485AN, que naturamente deberás alimentarlos con cualquier fuente de energía que dispongas en el lugar que emplaces esa "terminal" ó cualquiera de las tantas terminales que puedas "colgar" del bus RS485.

Se entiende la idea ?

Tu sistema remoto que yo he denominado "terminal" al momento de transmitir los datos almacenados te consumirá entre 50 y 100 mA sin que lo puedas evitar y a ésa corriente la deberás sacar de una fuente de alimentación que estará en el lugar de aplicación.
Si en el lugar de aplicación (allá lejos de la interface "RS485 - PC" receptora de los datos) no dispones de una toma de corriente, deberás pensar en algún sistema de baterías recargables y lógicamente en el método de recarga en los horarios en que el sistema no esté en uso, acercándolo hasta la toma de energía más próxima que tengas.

Son ideas, claro.

Pero conceptualmente debes comprender que desde el COM1 ó Puerto Serie y utilizando RS232 tal cómo sale, no puedes recorrer más que 15 metros. Precisamente por éso se "convierte" a RS485. Para lograr largas distancias de comunicación.

Si no es claro lo que trato de explicar, podría hacer algunos dibujos para graficar mejor el tema.

Saludos llanerita ! Nos leemos !

Mario

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #66 en: 14 de Septiembre de 2008, 20:17:02 »
Hola de nuevo marioguillote!

Cita de: Marioguillote

La interface la debes tener siempre "pegada" (por dar un término figurado) a la PC.
Tú sales y/o entras a la PC con RS232 y allí mismo, en la misma plaqueta debe estar el conversor a RS485 (ADM485AN).
No puedes salir de la PC, recorrer 200 metros y colocar en el campo a la interface.
RS232 (lo que tienes en el COM1 ó Puerto Serie) no te permite una distancia de cable mayor a 15 metros, entonces sí ó sí deberás tener la interface junto a la PC y luego de allí sí puedes irte los metros que quieras con el cableado y allá donde tú quieras a los metros que desees, colocas tu PIC con el otro ADM485AN,

Ummm! si ya entendi jejeje bueno sabes que esa es la idea que tengo desde el principio.


Cita de: Marioguillote
que naturamente deberás alimentarlos con cualquier fuente de energía que dispongas en el lugar que emplaces esa "terminal" ó cualquiera de las tantas terminales que puedas "colgar" del bus RS485.

Tu sistema remoto que yo he denominado "terminal" al momento de transmitir los datos almacenados te consumirá entre 50 y 100 mA sin que lo puedas evitar y a ésa corriente la deberás sacar de una fuente de alimentación que estará en el lugar de aplicación.


Esta es la cuestión, que teoricamente no debo disponer de una alimentación externa, por la condición pasiva que tiene el transmisor.... Estos ADM485 debo alimentarlos con el mismo circuito pasivo sin fuente! está un poquito rudo, pero creo que se puede hacer si hago una multiplexación de señales de alimentación! Por ejemplo: Cuando el transmisor este midiendo variables, pues el consumira su 4mA correspondientes si ningún problema. En este momento la parte de transmisión estará apagada( para que el ADM485 no consuma la corriente y no cargue la salida)... Ahora cuando vaya a transmitir, pues multiplexo la señal desde donde se alimenta el transmisor a la parte de transmisión, claro bajando esos 24V a 5V para alimentar el pic. La cuestión esá en que no se como detectar cuando sea conectado el cable 485 para que el pic haga la multiplexación solo, automaticamente! No se como hacer que el pic me detecte que el cable ha sido habilitado para transmitir! No se ha de haber un bit que se activa en la transmisión, pero no se, porque en cuestiones de transmisión de datos usando estos protocolos pues me hago un rollo! no se nada!, se justo lo necesario! :( :?

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado totuer

  • PIC10
  • *
  • Mensajes: 31
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #67 en: 16 de Enero de 2009, 14:05:05 »
Hola a todos
Sobre la idea del hilo de hacer un conversor rs232 a rs485 lo implemente con un pic 16f627 (economico3 USS en Bs As) un max232 y un max485 y anda de maravillas usé la usart fisica con el 485 y una usart por software con la pata de recepcion en rb0 para la interrupcion externa y por rda, por lo demas solo basta con imprimir lo recogido en el puerto contrario con las practicas funciones fprintf (stream, ... y kbhit(stream). gracias a todos por el aporte.
Sigo tratando de solucionar mis problemas de reflecciones en una red 485 que estoy tratando de armar.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #68 en: 16 de Enero de 2009, 21:25:15 »
No se te olvide el tema de las resistencias de 120 Ohms en cada extremo de la red. A mi desaparecieron los "ecos" en cuanto las puse.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado totuer

  • PIC10
  • *
  • Mensajes: 31
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #69 en: 17 de Enero de 2009, 12:59:12 »
Si ya las puse y mejoro, pero me encontre con un problema cuando mando datos de pc a pc con el teclado anda barbaro pero cuando los datos los mando desde un pic (muchos) se bloquea la comunicacion y tengo que desconectar y conectar para que retome, creo que se me está desbordando el buffer propio del micro. en cuanto ande subo todo. :x :x :( :x

Desconectado totuer

  • PIC10
  • *
  • Mensajes: 31
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #70 en: 17 de Enero de 2009, 19:23:55 »
Graciasssssss. ENIGMA  :-)
No se que seria de mi vida sin el diagrama de conversor rs232 a rs485.
Anda diez puntos, le hice una pequeña modificacion, solo cambié los capacitores por 1 uF,(lo recomienda MAXIM) y el circuito anda de maravillas a cualquier velocidad.
Amigo Red sin tu rele a la lejania no podria haber ni empezado Gracias. :mrgreen:
Gracias gracias y gracias a todos, despues de 5 dias de intenso laburo ahora hablo entre micros a 100 metros sin problemas y a 9600bd que no es poco(seguiré probando velocidades).
 :-/ :-/ :-/
Pd: no abandone el otro pero se cuelga el micro  :(
Pd 2 Les comento que ahora que tengo comunicacion voy a desarrollar una red de micros que midan y envien las mediciones a la pc para graficar y almacenar, identificandose y que suenen una alarma si alguna de sus mediciones(6) está fuera de rango, mostrando por pantalla (LCD local 128x64 y PC) el motivo y guardando la info.

Desconectado sanpic

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 430
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #71 en: 19 de Marzo de 2009, 20:17:38 »
Hola amigos , les cuento que estoy iniciandome en el PicC y me encuentro intentando modificar el ejemplo de Diego.
Les cuento que he logrado hacer correr el mismo en una red 485 con 5 esclavos y a 57600 bpos y funciona perfectamente.
Ahora , pretendo usar un Maestro para preguntar a los esclavos y sacar al PC de la red 485 para que no le llegue todo el tráfico de la misma.
He logrado que a través de un bucle el Maestro haga las preguntas y los esclavos respondan correctamente , ahora tengo problema para que el Maestro una vez que recibe una respuesta cree un  evento (en principio sólo prenda un led  PIN_RELE , luego envie la trama ecibida por el esclavo a traves de soft UART al PC)


EL IDentificatorio del maestro es 0 (cero) , o sea que cuando circule un mensaje con prefijo R0X , es una respuesta de un esclavo y sólo lo dee interpretarlo él.
Entonces , el Maestro pregunta (R1X..R9X) y recibe del esclavo 7 lo siguiente  R0X$R7X;abcde$! , que se interpretaria asi : mensaje para el Maestr (R0X) , soy el esclavo 7 (R7X) , este es mi mensaje ($R7X;abcde$) , fin de transmisión (!)

Todo va perfecto , el maestro les pregunta a todos y recibe respuesta del 7 (lo veo perfecto en el tráfico de la 485) , el único problema es que el maestro no interpreta la llegada del mensaje para él ya que no realiza el parpadeo del led.


Les pego el bucle , el resto es exactamente igual al código original.
Cualquier ayudita es bien recibida.

Saludos a todos.


Código: [Seleccionar]
do{
 

      for(veces=1; veces<=10; ++veces) {     // creo un bucle para realizar las peticiones de consulta a los esclavos
         delay_ms(25);
         USART_activa_tx();
         delay_ms(5);
         printf(":R%dX!\r\n",veces);
         USART_activa_rx();
         delay_ms(10);
         enable_interrupts(global);
         enable_interrupts(int_rda);
     
         // si recibo alguna contestación de algún esclavo entonces parpadeo un led
         if(Command==0x01){
            Command =0x00;     
 //           USART_activa_tx();
 //           printf(USART_buffer);       
 //           USART_activa_rx();   
            output_high(DRIVER_RELE);
            delay_ms(50);
            output_low(DRIVER_RELE);
          }
      }   
   } while(true);




Edito:   Solucionado , tenía mal la trama de recepción.
Les paso el dato , quizás lo sepan , yo como estoy recién mirando el C , lo acabo de descubrir. :P
Cuando configuramos el define para la comunicación , existe una opción para hacer de habilitador en la comunicación rs485 , y el comando es ENABLE. O sea definiendo un PIN al momento de transmitir se activa a 1 y en cuanto deja de transmitir se pone a 0


#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1)    // modo normal


#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1, ENABLED=PIN_B3)  // definimos B3 como enabled

Realmente lo he probado y funciona perfectamente , en el ejemplo de Diego deshabilite las funciones activa_tx y activa_rx y funciona sin inconvenientes.


Diego mil gracias por este pedazo de ejemplo que has escrito. Un abrazo.




« Última modificación: 20 de Marzo de 2009, 19:34:25 por sanpic »
IF you_know = true THEN                                 
     share_it
ENDIF

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #72 en: 20 de Marzo de 2009, 15:03:17 »
Como les va, me ha ayudado mucho el tema ya que tengo un proyecto que es manejar unos reles en la distancia pero no los voy a manejar desde la PC sino con otro PIC, como hago para poner el PIC como master.

Lo que quiero hacer es que cuando pise un pulsador en el PIC master mande la instrucción por el MAX485 y el otro PIC slave lo reciba y active el rele por cierto tiempo

Desconectado sanpic

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 430
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #73 en: 21 de Marzo de 2009, 18:40:20 »
Hola , el código del mensaje anterior , hace una barrida constante preguntando a todos los esclavos y escuchando respuesta.
Si en tu caso sólo deseas que la barrida se haga como consecuecia de algun evento (pulsador sobre un pin o algo ) debes adecuarlo a tu necesidad.


Saludo a todos.
IF you_know = true THEN                                 
     share_it
ENDIF

Desconectado sanpic

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 430
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #74 en: 21 de Marzo de 2009, 19:21:50 »
Hola.
Siguiendo con el ejemplo de Diego (y para complicar) , necesito implementar que el Identificador del esclavo no sea implementado por el firmware sino que se pueda setear mediante jumpers , y cuando se cambie la posición de los jumper , con sólo resetear el pic , tome el nuevo identificador.
Para eso utilizo el puerto A , hago la lectura y la convierto para que sea el valor de "WhoAmI"
Peroooo , no me reconoce el dispositivo.  :P
Creo que el problema viene por el lado de la conversión del int a chr , me esta agregando algun caracter que cuando hace la comparación   
Código: [Seleccionar]
if(USART_buffer[USART_nextRec-2]==WhoAmI){  la halla incorrecta.
Se agradece cualquier orientación.


Saludos a todos.


Código: [Seleccionar]
int8 A0,A1,A2,A3,A4,IdControl;
char WhoAmI[2];


void main()
{

   ...
 
  A0 = input(PIN_A0);
  A1 = input(PIN_A1);
  A2 = input(PIN_A2);
  A3 = input(PIN_A3);
  A4 = input(PIN_A4);
 
  IdControl = A0 + A1*2 + A2*4 + A3*8 + A4*16;
  printf("Mi ID control es : %d \r\n", IdControl);   //perfecto , me muestra el valor correcto
  delay_ms(10);
  sprintf(WhoAmI,%d,IDControl);  // transformo el entero
  printf("WhoAmI es : %s \r\n", WhoAmI);   //perfecto , me muestra el valor correcto
IF you_know = true THEN                                 
     share_it
ENDIF