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

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

Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 348
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #15 en: 23 de Noviembre de 2007, 08:08:27 »
hola, gracias por responder,
Que cableado utilizas para unir los nodos??? :shock:
estoy usando cable de red utp, que es lo que tengo a mano :mrgreen:
Diego, voy a probar poniendole las 2 resistencias (ahora tiene solo lado pc)
con las resistencias a positivo en las patas 1, 2-3 y 4 del sn75176 de me solucionaron los problemas (aparentemente)
lei por ahi que lo que sucede en que el sn75176 y los pics tienen distintos umbrales de transicion de alto a bajo y por eso genera errores de comunicacion...

saludos
Osvaldo
Osvaldo

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7881
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #16 en: 23 de Noviembre de 2007, 08:30:41 »
Une las masas de ambos circuitos, en lo posible utilizando la malla o en su defecto uno de los pares del cable...
Utilizas uno de los pares trenzados para el 485, no?? :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 348
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #17 en: 23 de Noviembre de 2007, 09:38:00 »
upss.... me parece que se me escapo la tortuga....
no se si no me equivoque con la coneccion de los pares trenzados.... a la tarde te cuento.
en cuanto a la masa, alimento el nodo remoto pos el mismo cable de red

saludos 
Osvaldo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5500
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #18 en: 23 de Noviembre de 2007, 15:35:50 »
En temas de comunicaciones la mejor información, con diferencia de todo los demás que he encontrado, son las Application Notes de Maxim. Y en el tema del RS485 mas aún si cabe.

Te recomiendo las Application Notes by Category : Interface Circuits : RS485

Y de ellos uno que no tiene desperdicio, y que en temas de RS485 debería ser de obligada lectura antes de ponerse hacer nada con este sistema: Guidelines for Proper Wiring of an RS-485 (TIA/EIA-485-A) Network



Cuando leemos ésta última AppNote nuestro conocimiento del RS485 empieza a ser algo cierto y no las ideas difusas que teníamos antes.  :mrgreen:



 
« Última modificación: 23 de Noviembre de 2007, 15:38:31 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7881
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #19 en: 23 de Noviembre de 2007, 16:07:28 »
Buena nota, Diego!! :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5500
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #20 en: 23 de Noviembre de 2007, 16:09:55 »
En la empresa en la que trabajo soy el encargado de impartir las clases de formación de los nuevos técnicos que entran a trabajar en ella, y como además trabajamos muchísimo con redes RS485 una de las primeras cosas que hago es que ésa nota en concreto se la sepan de memoria y comprendan hasta el último detalle de lo que se cuenta en ella.  :mrgreen:

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

Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 348
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #21 en: 23 de Noviembre de 2007, 17:19:06 »
muchas gracias por la info Diego.... la voy a estudiar y voy a prestar mas atencion para no cometer mas errores como equivocarme con el par trenzado... :mrgreen:
saludos y gracias
Osvaldo

pd: siempre me pasa que las cosas que me complican son los descuidos....
Osvaldo

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7881
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #22 en: 23 de Noviembre de 2007, 21:29:54 »
Leete todas las leyes de Murphy !!! :mrgreen: :mrgreen:

A todos nos pasan...
Solucionaste el problema??? :)
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado valdorre

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 348
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #23 en: 23 de Noviembre de 2007, 22:25:56 »
si, hasta ahora funciona bien, gracias por todo... voy a seguir con las pruebas

saludos
Osvaldo
Osvaldo

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7881
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #24 en: 24 de Noviembre de 2007, 08:34:07 »
Me alegro !!! :-/ :-/
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5500
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #25 en: 15 de Enero de 2008, 10:47:24 »
OOhhh... que grande Diego.

Yo tengo ya medio acabada mi comunicación RS485 utilizando las funciones que nos dan los señores de CCS (trama=origen, destino, datos, checksum). La verdad es que me ha costado un poco entenderlas, pero bueno, en cuanto el programa pase mi bataría de pruebas, lo cuelgo en este hilo para que esté toda la documentación al respecto más conglomerada  :D


Un saludo desde Alicante.

¿ :shock:? ¿Lo acabaste? ja, ja, ja  :D :D :D
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #26 en: 15 de Enero de 2008, 19:40:50 »
No tío no  :(

Al final se me hincharon las narices (por no decir otra cosa) y me hice yo el protocolo de comunicación (reutilicé uno que ya tenía hecho y probado).

Con las funciones del CCS unas veces funcionaba... otras no... uufff, un disparate que no veas.

Tras mucho meditar el tema me fío más de mi protocolo.

Y me pregunto yo mismo a mis adentros... por que diablos no hice eso desde el principio? Y la respuesta es... pues porque soy un cenutrio  :D


Un saludo desde Alicante.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #27 en: 21 de Marzo de 2008, 16:28:23 »
Hola muchachos espero esten bien!!!, Estee! bueno, estoy por trabajar en un proyecto que tengo de una materia de la universidad y bueno me encontre con que tengo que usar el protocolo RS485 del cual no se nada cabe destacar!!! He estado toda la mañana leyendo por aquí, leyendo por allá! y la verdad que miestras más leo, pos más me enredo :(... Haber, he estado leyendo el progtrama del señor REdpic, pero no entiendo unas instrucciones allí... se lo que hace, pero no se porque hace ciertas instrucciones!!!!

Empieza mi set de preguntas:

1) Esto siempre tiene que ser así:
Citar
Este firmware tiene la característica de tener que conmutar de Low un Pin del PIC para recibir desde la USART, que es el estado por defecto, a High para poder transmitir, son las funciones USART_activa_rx() y USART_activa_tx().

Es decir, siempre se tienen que conmutar?

2) En el programa, con respecto a las funciones void USART_activa_tx(void), dice que está es para activar la transmisión... o.k perfecto.... y void USART_activa_rx(void) dice que es para activar la recepción, muy chevere también, pero por que usar RB5?? los pines de TX y RX no son Rb1 y Rb2???

3) También en el código.... Sr. REdpic, en otro foro vi que el Sr, pocher le hizo unas preguntas, a la cual usted le contesto esto:

Cita de: redpic
Diego te hago unas preguntas, a ver que te parece:

1ª ¿Para que sirve?:

  if(USART_nextRec==bytes_for_USART_buffer){
     USART_nextRec=0;}

Quizá sirva por si se desborda el Buffer, o por si no lee el byte de fin de transmisión (!) que se inicialize el índice.

Exacto

2ª ¿Los delay_ms tienen que ser del orden de esos valores, para que no hayan problemas? He hecho una prueba cargandomelos y se comunican físicamente bien(y con PROTEUS también).

Estos delays son para usar el conversor RS232-RS485 para conectarme al PC, es semiautomático y detecta cuando tiene que conmutar  de recepción a transmisión o viceversa y requiere un tiempo para hacerlo. Si tus dispositivos están siempre en el modo correcto puedes eliminarlos y en paz


Umm!! la verdad, la verdad!!! quede en las mismas!!! :(... Si me puede explicar, por favor se lo agradeceria enormemente!!! :mrgreen:
Sobre todo la primera pregunta que le hizo el Sr. pocher!, es decir, no entiendo por que la letra C.... y que quiere decir con devolverse al indice!!

3) Esto:
 if(c==end_of_transmit){
    --USART_nextRec;
    if(USART_buffer[USART_nextRec-3]==WhatAmI){
      if(USART_buffer[USART_nextRec-2]==WhoAmI){
        if(USART_buffer[USART_nextRec-1]==Command_Execute){
          Command=0x01;

Porque eso?? Rayos!!!! mientras más veo el programa más me enredo!!! su lógica es demasiado avanzada para mis pequeños conocimientos!!!! :?

Aunque no se le puede quitar que está bien didáctico el ejemplo!!!

4), con respecto a la simulación en proteus!!!
Esa conexión siempre se hace así con los max487?? Y porque la Not que va de un max487 a otro???? Otra cosita, el CTS, que señal es esa???

Ustedes disculpen mi gran falta de conocimientos y las preguntas idiotas que a lo mejor hice, pero es que de pana soy nueva en esto y estoy echa un lio además de que tengo mucho interes en aprender, y que mejor manera de hacerlo, que preguntandole a los que más saben! :mrgreen:!!!! Disculpen la molestia, gracias!! Espero su respuesta!!!

Atte: Enigma... La llanerita de Guayana :-)
« Última modificación: 21 de Marzo de 2008, 16:39:15 por Enigma »
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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5500
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #28 en: 21 de Marzo de 2008, 18:42:17 »
Ahí va el set de respuestas:

1.- El protocolo RS485 utiliza ambos hilos tanto para transmitir como para recibir. Por ello Ó se transmite Ó se recibe, no se puede hacer con dos hilos las dos cosas al mismo tiempo. Así que es imprescindible conmutar al MAX485 (o el SN75176 en mi caso) para que Ó transmita Ó reciba.

2.- Efectivamente RB1 y RB2 son RX y TX del PIC y están conectados como corresponde a los RO y DI del MAX485 (o el SN75176 en mi caso) pero como hay que conmutar el MAX485 (o el SN75176 en mi caso) entre recepción y emisión entonces tengo que utilizar otro Pin del PIC para hacerlo y utilicé RB5 aunque podía haber elegido cualquier otro que estuviese libre.

Ten en cuenta que el MAX485 (o el SN75176 en mi caso) con DE/RE en Low recibe en RS485 por A y B, lo decodifica y transmite en TTL por RO, y con DE/RE en High recibe en TTL por DI, lo codifica y lo transmite en RS485 por A y B.

3.A.- El PIC recibe caracteres de uno en uno, uno detrás de otro. Mi programa los va recibiendo y los va guardando en la variable USART_buffer que es una matriz (un arreglo) de 12 bytes de largo. USART_nextRec es una variable en RAM que incremento (le sumo 1) cada vez que recibo un carácter y que me sirve de índice para guardar el caracter recibido en USART_buffer.

Así al principio USART_nextRec vale 0 y USART_buffer está vacío. Cuando llega el primer carácter lo guardo en USART_buffer[USART_nextRec] (o sea en USART_buffer[0]) e incremento USART_nextRec por lo que USART_nextRec vale 1.

Cuando llega el segundo carácter hago lo mismo, o sea que lo guardo en USART_buffer[USART_nextRec] (o lo que es lo mismo: en USART_buffer[1]) e incremento USART_nextRec por lo que USART_nextRec vale ahora 2.

Así ¿hasta cuando? ... Pues hasta que reciba un carácter especial  que me diga "YA HE TERMINADO". Pero si no recibo este carácter especial, por cualquier tipo de fallo, podría darse el caso de ir recibiendo caracteres mucho mas allá de los 12 bytes que tiene USART_buffer de capacidad. Por ello tengo ese límite en el que si recibo mas caracteres de los que caben en USART_buffer vuelvo a poner USART_nextRec a 0 y así me aseguro que no voy a ir guardando caracteres recibidos a lo largo de toda mi RAM.

3.B.- Si no pones todo el código o lees todo el código va a ser difícil que lo entiendas. Me explico:

En la interrupción por recepción de la USART void interrupt_service_rutine_rda(void) tengo

Código: C#
  1. void interrupt_service_rutine_rda(void) {
  2.   char USART_nextChar;
  3.   USART_nextChar='\0';
  4.   if(kbhit()){
  5.      USART_nextChar=getc();
  6.      USART_add_to_buffer(USART_nextChar);
  7.   }
  8. }
  9.  

O sea que recibo un carácter sobre USART_nextChar y simplemente llamo a la función USART_add_to_buffer(USART_nextChar) pasándole como parámetro el carácter recibido.

Pero es que la definición de esta función es:

Código: C#
  1. void USART_add_to_buffer(char c);
  2.  

Y ahí es donde tienes la "letra c"

Es el parámetro de entrada de la función encargada de guardar el último carácter recibido en el buffer de recepción.

Esta función de USART_add_to_buffer hace dos cosas.

Una: guarda en el buffer el último carácter recibido y ...

Dos: Mira si se dan las condiciones necesarias para ejecutar una orden si, y solo sí, lo recibido está completo, y también que lo recibido es "para mí en concreto", y también que lo recibido es para "mi tipo de dispositivo", y también que la orden recibida es "ejecuta un comando".   

Si todas estas condiciones se dan entonces cargo el valor 0x01 en Command para que sea ejecutado en el main() del programa.

Todo esto creía que lo tenía bien explicado en el texto del post original. Pero parece que o no esta suficientemente claro o simplemente no lo has leído e intentas comprender directamente qué hace el programa leyendo el código del mismo sin tener en cuenta qué es lo que pretendo hacer con este programa.

Un consejo: Yo, cuando intento comprender un programa primero sustituyo las constantes por sus valores definidos en ellas y después lo leo traduciéndolo al idioma hablado normal. Por ejemplo es ese trozo de código que no comprendes haría ...

Imaginemos que recibo "R1A!" tal como digo en el texto que explica el programa, entonces las variables tendrían los siguientes contenidos:

USART_buffer = {R,1,A,!}
USART_nextRec = 3

Código: CSS
  1. if(c=='!'){
  2.     --USART_nextRec;
  3.     if(USART_buffer[0]=='1'){
  4.       if(USART_buffer[1]=='R'){
  5.         if(USART_buffer[2]=='X'){
  6.           Command=0x01;
  7.  


Y lo leería: Si el carácter recibido es '!' (el que me indica que la transmisión es completa) entonces decrementa el indice de caracteres recibidos y comprueba si el primer carácter recibido es '1' (o sea si es para mí), y si el segundo cáracter es 'R' (o sea si es para mi tipo que es un Rele) y si el tercer carácter es 'X' (o sea que ejecute una orden). Si todo es correcto entonces carga un 1 en Command.

Como decía en el texto original:

"Todo esto significa que el PC MASTER va a transmitir un frame del estilo de "R1X!" cuyo significado sería: Mensaje a los Dispositivos de Tipo 'R', al concreto dispositivo '1' para que ejecute el Comando 'X', fin de transmisión.

Todos los PIC escucharán este mensaje pero sólo el PIC que sea de Tipo 'R', que tenga el identificador concreto '1' ejecutará el comando 'X'.
"

4.- En cuanto al Proteus no tengo ni idea porque nunca lo he utilizado.  :?

No se si habré sabido explicarme mejor, pero ya sabes que aquí estamos para lo que podamos ayudar.  :mrgreen:

« Última modificación: 21 de Marzo de 2008, 18:49:17 por RedPic »
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 #29 en: 21 de Marzo de 2008, 23:07:19 »
Hola Sr. Red pic, gracias por responder!!! En estos momentos estoy analizando y revisando
lo que coloco en el post.... O.k, tengo unas dudas! y disculpe nuevamente la molestia!

Nuevamente un segundo set de preguntas:

Cita de: REDPIC
USART_nextRec es una variable en RAM que incremento (le sumo 1) cada vez que recibo un carácter y que me sirve de índice para guardar el caracter
recibido en USART_buffer.

1.) Cuando dice Indice... Se refiere a una especie de variable contador o algo así??

2.) Esa función X, que especifica... pues no está dada como tal? o si?

.....

Continuará!!!!! (Sigo leyendo, y sigo analizando y mientras lo hago pues me surgen más preguntas!!!! :s) :?

Atte: Enigma... La llanerita de Guayana  :-)



P.D: Si lei la primera parte del post!!! pero es que no la comprendi mucho y me fui directamente al programa!!!  (No fue su explicación,
Lo hizo muy bien, soy yo, es que me tienen que explicar con manzanitas!!! jejejeje :mrgreen:)
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!


 

anything