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

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

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #75 en: 21 de Marzo de 2009, 20:17:25 »
He estado revisando el hilo, me ha parecido muy interesante. Quisiera añadir que para probar una línea RS485 se puede hacer conectandola directamente al PC (RS232) sin adaptador, tan solo hay que tener las siguientes precauciones:

http://www.todopic.com.ar/foros/index.php?topic=14917.msg129023#msg129023
Saludos desde Granada, España.

Desconectado sanpic

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 430
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #76 en: 22 de Marzo de 2009, 15:08:22 »
Solucionado , el problema estaba en la definición de la variable , se debe agregar un lugar más , ya que la función sprintf() durante la conversión agrega al valor convertido el caracter null , y modificar la función original para que me aceptara más de 1 digito para tener asi en lugar de hasta 9 esclavos , 31.
Si Diego lo autoriza , pego las modificaciones , no quiero salirme del mensaje original.

Saludos a todos.






IF you_know = true THEN                                 
     share_it
ENDIF

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #77 en: 22 de Marzo de 2009, 15:17:22 »
Claro que si, el hilo es de todos.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #78 en: 22 de Marzo de 2009, 19:06:59 »
Disculpen alguno de ustedes me puede dar un ejemplo en CCS de lo que quiero hacer¿?

Lo que quiero hacer es esto: presionar un pulsador que esta conectado a un PIC, el PIC al recibir la señal del pulsador y manda por MAX485 una instrucción el PIC SLAVE recibe la instrucción y activa un rele

La parte del PIC SLAVE ya la tengo echa pero la del PIC MASTER no sep aun como

Desconectado sanpic

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 430
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #79 en: 23 de Marzo de 2009, 11:41:50 »
Hola , solucionado el tema de la conversión.
El problema era que la función sprintf() , agrega un caracter extra a la conversión , que es null.
Los cambios realizados sobre el código original :



Código: CSS
  1. int8 IdControl;  //Identificador segun seteo del dipswitch en portA
  2. int8 A0,A1,A2,A3,A4;
  3. static char WhoAmI[3];       // definir 3 posiciones en lugar de 2 , la funcion sprintf() agrega un caracter null a la conversion      
  4.  
  5.  
  6.  
  7. // se agregan 2 lineas de codigo a la funcion original USART_add_to_buffer
  8.  
  9.  
  10. void USART_add_to_buffer(char c){
  11.  
  12. USART_buffer[USART_nextRec++]=c;
  13.   if(USART_nextRec==bytes_for_USART_buffer){
  14.     USART_nextRec=0;
  15.   }
  16.  
  17.   if(c==end_of_transmit){
  18.     --USART_nextRec;
  19.     if(USART_buffer[USART_nextRec-4]==WhatAmI){
  20.       if(USART_buffer[USART_nextRec-3]==WhoAmI[0]){         // se modifica esta linea para leer el primer digito
  21.        if(USART_buffer[USART_nextRec-2]==WhoAmI[1]){        // se modifica esta linea para leer el segundo digito
  22.         if(USART_buffer[USART_nextRec-1]==Command_Execute)   // se modifica esta linea para aceptar parametro
  23.            Command=0x01;    
  24.       }
  25.      }
  26.     }
  27.     USART_nextRec = 0;
  28.   }
  29. }
  30.  
  31.  
  32.  
  33. // se modifica los parametros de la funcion sprintf() en main()
  34.  
  35. void main()
  36. {
  37.  
  38. ....
  39.   A0 = input(PIN_A0);   //leo puerto A.0
  40.   A1 = input(PIN_A1);   //leo puerto A.1
  41.   A2 = input(PIN_A2);   //leo puerto A.2
  42.   A3 = input(PIN_A3);   //leo puerto A.3
  43.   A4 = input(PIN_A4);   //leo puerto A.4
  44.  
  45.   IdControl = A0 + A1*2 + A2*4 + A3*8 + A4*16;  //establezco el IdControl mediante los jumpers de configuración
  46.  
  47.   sprintf(WhoAmI, "%02d", IdControl);    //se establece el ID para WhoAmI  , de ahora en más y dependiendo de los jumpers por ej: esclavo 5 será 05 (menos de 1 digito se rellena con cero a la izquierda debido al %02d en sprintf) y tendremos la posibilidad de tener hasta 31 esclavos online. Por las dudas aclarar que cada vez que se realiza un cambio en los jumpers se debe hacer reset al pic para que tome el nuevo ID

Este codigo solo va en el Esclavo.
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 #80 en: 21 de Mayo de 2009, 22:52:55 »
disculpa para que es el conector que esta al lado del pic que dice TTL que van conectado a RB1 y RB2 cual es su función

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #81 en: 31 de Julio de 2009, 13:26:52 »
hola disculpen la ignorancia, que significa la siguiente funcion
   
USART_nextChar='\0';

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #82 en: 31 de Julio de 2009, 13:28:45 »
Hola.

Tal como lo escribes, no es funcion, es solo la asignacion del NULL a la variable, es decir, le das el valor de 0.

Saludos
« Última modificación: 31 de Julio de 2009, 14:13:45 por MLO__ »
El papel lo aguanta todo

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #83 en: 31 de Julio de 2009, 16:44:33 »
hola disculpen la ignorancia, que significa la siguiente funcion
  
USART_nextChar='\0';

ok amigo muchas gracias

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #84 en: 03 de Agosto de 2009, 03:13:01 »
Gente, una pregunta...Puede ser que el Proteus simule bastante mal el RS485? Porque hace cosas increibles a veces. Gracias.
Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #85 en: 03 de Agosto de 2009, 13:28:16 »
Pues a mi no me ha dado lata nunca.

Control de un malacate . RS485
El papel lo aguanta todo

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #86 en: 03 de Agosto de 2009, 13:44:07 »
No lo he utilizado mucho, pero tampoco he tenido problemas. A que te refieres con cosas increíbles?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #87 en: 09 de Octubre de 2009, 17:13:59 »
Hola le yendo este magnifico hilo gracias al cual por fin logre hacer funcionar mi red rs485 hay una parte del código que por mas vueltas que le doy no logro entender se lo que hace ahí pero no entiendo la lógica de como lo hace la parte de código en cuestión es esta

Código: [Seleccionar]
  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;
           }
         }
      }
      USART_nextRec = 0;
   }

OK como lo explica el señor red pic la intención de esta parte del código es comparar si la trama recibida es igual a la que tenemos definida en el código.
Asea que si transmito por el Terminal esto R1X! el programa lo recibe así en el buffer
USART_buffer[0]=R
USART_buffer[1]=1
USART_buffer[2]=X
USART_buffer[3]=!
Entonses porque hace esto        --USART_nextRec ????
Y esto                                        if(USART_buffer[USART_nextRec-3 ?????

Cuando mi poco desarrollada e inexperta lógica me dice que debería ser así
Código: [Seleccionar]

      if(USART_buffer[USART_nextRec[0]==WhatAmI){
         if(USART_buffer[USART_nextRec[1]==WhoAmI){
           if(USART_buffer[USART_nextRec[2]==Command_Execute

Como siempre agradezco la ayuda que puedan brindarme  por más que intento entenderlo solo me enredo más




Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #88 en: 09 de Octubre de 2009, 22:56:08 »
Es similar a lo que dices, resulta que cuando defines un vector el último valor es el null, por ende, para hacer la comparación, tal como lo hace el maestro RedPic, debe mermar en uno al valor del index del vector, si no, estaría comparando con el valor siguiente al que él quiere comparar.

Saludos
El papel lo aguanta todo

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: El RS485, un Relé en la lejanía: Hardware y Software
« Respuesta #89 en: 10 de Octubre de 2009, 01:33:11 »
El tema se ha resuelto en este hilo:
http://www.todopic.com.ar/foros/index.php?topic=27894.0

Septiembre_negro, está prohibido duplicar los mensajes. Fíjate el lío que acabas de montar.