Autor Tema: Comunicacion RS 485 con PIC  (Leído 9658 veces)

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

Desconectado lord_edwin

  • PIC10
  • *
  • Mensajes: 3
Comunicacion RS 485 con PIC
« en: 24 de Julio de 2005, 00:55:00 »
Sonrisa Gigante Estoy realizando un circuito de comunicacion entre PICs a largas distancias,

Alguien sabe como realizar una comunicacion RS 485 entre 2 o mas PICs.Rebotado

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: Comunicacion RS 485 con PIC
« Respuesta #1 en: 25 de Julio de 2005, 15:06:00 »
Hola, no conozco bien cuales son las diferencias entre el rs232 y el rs485, pero asumo que solo variaran los niveles de voltaje de cada uno... entonces si usabamos el max232 para la comunicacion rs232 entonces usaremos un max485 para la comunicacion rs485 jajajajaSonrisa Gigante es una broma, pero mas o menos creo q es la idea...
Hasta donde se la cuminicacion RS232 y la RS485 solo son comunicacion punto a punto, es decir de uno a uno, o de pic a pic... se tambien que aca algunos compañeros han llegado a hacer una comunicacion con rs232 entre varios pic"s, seria cuestion de probar... por otro lado hay otro tipo de comunicacion q puedes ver q es el bus i2c que tambien es serial y q sirve para varios perifericos todos comunicandose con las mismas conexiones... o si te parece que necesita mas potencia puedes usar el bus can se parece un poco al i2c pero es mas industrial y soporta un ambiente de trabajo mas duro...

No se si te habre podido aclarar algunas cosas, pero espero que te sirva...Fumador

Saludos .... Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado elreypic

  • PIC12
  • **
  • Mensajes: 79
RE: Comunicacion RS 485 con PIC
« Respuesta #2 en: 13 de Agosto de 2005, 10:09:00 »
Que tal amigos foristas:

Voy a ampliar un poquito el uso del RS485. El RS485 tiene la caracteristicade que puedes alcanzar hasta 1.2 km de distancia con un baud rate de hasta 115200 bps.
La comunicion en RS485 puede ser utilizada en configuraciones de:
a) PUNTO A PUNTO
b) PUNTO A MULTIPUNTO

Es decir pudes tener varios dispositivos colocados en el mismo par de hilos (como el I2C). Puedes tener hasta 256 elementos o dispositivos colgados en la red RS485. Esto depende del transceiver que se use, es decir existen algunos que tiene solamente 1/8 UL que son los que pudes usar hasta 256. Existen de 1/4 de UL, 1/2 de UL y 1 UL.
Esto lo que equivale es a que se colocan menos dispositivos en la red, es decir; si tu transceiver tiene:
a) 1 UL podras colocar solo 32 elementos
b) 1/2 UL podras colocar 64 elementos
c) 1/4 UL podras colocar 128 elementos
d) 1/8 UL podras colocar 256 elementos

Existen tambien algunos que estan limitados a un baud rate, existen otros que son full-duplex (4 hilos) o bien half-duplex (2 hilos).

Bueno pues ojala les sirva esta info.

Saludos.
El ReyPic.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Comunicacion RS 485 con PIC
« Respuesta #3 en: 13 de Agosto de 2005, 10:17:00 »
Se sale algo de la tematica pero, ¿quien sabe si al que abrió el hilo no le interesa más para su proyecto?

Ahi va ... ¿Teneis info del bus can? es la primera vez que lo escucho y me gustaria aprender algo sobre el pues parece interesante, agradeceria algunos comentarios y/o enlaces Sonrisa Gigante
Si juegas contra el mejor, pierdes como los demás.

Desconectado lord_edwin

  • PIC10
  • *
  • Mensajes: 3
RE: Comunicacion RS 485 con PIC
« Respuesta #4 en: 26 de Agosto de 2005, 22:42:00 »
Pues, yo fuí el que abrió el hilo y claro que aun me interesa la informacion para mi proyecto. Sonrisa Gigante

Tengo el PDF del MAX485, donde se detalla la informacion tecnica sobre este.

Agradecería informacion sobre como programar el puerto serie, de tal forma que pueda detectar cuando hubo errores en los datos que se enviaron de un punto a otro, puesto que voy a controlar un proceso que es muy critico, y que puede constarle la vida a decenas de personas si la informacion no se transmite correctamente. Rebotado

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Comunicacion RS 485 con PIC
« Respuesta #5 en: 27 de Agosto de 2005, 13:25:00 »
Esto son palabras mayores.

Si va a depender la vida de las personas de lo que hagas, mejor que escojas otro bus de campo mas fiable y robusto, como es el bus CAN. Hay transceivers de bus CAN a usart y es mucho más fiable (detección de errores) que el 485.

El bus CAN es un bus serie utilizado, entre otras aplicaciones, en los automóviles para la captura de datos en los diversos sensores del motor. Si los fabricantes de automóviles confían nuestras vidas a este bus, será por algo Sonrisa GiganteSonrisa GiganteSonrisa Gigante

Desconectado Pic_lady

  • PIC10
  • *
  • Mensajes: 13
Re: Comunicacion RS 485 con PIC
« Respuesta #6 en: 31 de Mayo de 2008, 23:27:28 »
Tengo un problema relacionado con este tema, tengo un termometro digital y mediante el hyperterminal si le envío una letra mayuscula en particular me envia la temperatura y si le envio la misma letra minuscula es para introducir el set point. El 485 que va conectado al Pic tiene su linea de control conectada al mismo, y la que va junto al max232 a la PC se controla manualmente mediante un interruptor. Cuando le pido la temperatura me funciona bien, pero no me envía bien el retorno de linea y cambio de linea, solo me envía el  segundo que escriba de los dos. En cuanto al set point yo mando un mensaje al hyperterminal que dice algo como "Introduzca el set point" pero no me lo envía no se por que. Aqui esta una parte del codigo

INICIO:
                   call                   Cond_Iniciales
Principal:
         btfss      flagi,1
         goto      sigue
                   call                   Convertir
         bcf         flagi,1
                   call                   Mostrar
sigue:
                   call                   atencion_int
         call         comparar_temp_setpoint
                     goto               Principal
               
         
;********************************************************************
;--------------------------------------------------------------------
; Subrutinas...
;-------------------------------------------------------------------
INTERRUPCION:
         btfss      PIR1,RCIF
         goto      check_tmro_int
                   banksel            PIR1
                     bcf                PIR1,RCIF
                   bsf                flagi,0
                   movf               RCREG,w
                   movwf           Dato_recibido
         goto      salir_de_interrupcion

check_tmro_int:                   
         btfss      INTCON,T0IF
         goto      salir_de_interrupcion
         banksel      TMR0
         movlw      0x3C
         movwf      TMR0
         banksel      INTCON
         bcf         INTCON,T0IF
         incf         cuenta_convertir
         bcf         STATUS,C
         movf      cuenta_convertir,w
         sublw      0x28
         btfsc      STATUS,C
         goto      salir_de_interrupcion
         clrf         cuenta_convertir     
         bsf         flagi,1
         goto      salir_de_interrupcion
salir_de_interrupcion:                                         
                   movf               pclath_Anterior,w
                      movwf           PCLATH
                     movf               status_Anterior,w
                     movwf           STATUS
                   movf               w_Anterior,w

         retfie

;-------------------------------------------------------------------
atencion_int:
                   btfss              flagi,0
                   goto               volver
                   bcf                   flagi,0       
                     movlw           0x60
                   bcf                STATUS,C
                   subwf              Dato_recibido,w
                   movwf           ID
                   movf               PORTA,w
                   andlw              b'00111100'
                   movwf           rest
                   bcf                STATUS,C
                   rrf                rest
                     rrf               rest,w
                   bcf                STATUS,Z
                   subwf              ID,w
                   btfss              STATUS,Z
                      goto               check_set_point
                   call                   CarryRet_USART
                   call                   NextLine_USART
                   call                  Enviar_temp
         goto      volver

check_set_point:
         bcf                   flagi,0
         movlw           0x40
                   bcf                STATUS,C
                   subwf              Dato_recibido,w
                   movwf           ID
                   movf               PORTA,w
                   andlw              b'00111100'
                   movwf           rest
                   bcf                STATUS,C
                   rrf                rest
                     rrf               rest,w
                   bcf                STATUS,Z
                   subwf              ID,w
                   btfss              STATUS,Z
                      goto                  volver
                   call                   CarryRet_USART
                   call                   NextLine_USART   
         clrf         puntero   
         call         mensaje_serial
         call                   CarryRet_USART
                   call                   NextLine_USART
         call         tomar_set_point
         goto      volver

tomar_set_point:
         movlw      0x20
         movwf      FSR
         bcf         PIE1,RCIE
         bcf         INTCON,T0IE
ciclo_set:
         btfss      PIR1,RCIF
         goto      ciclo_set
         bcf         PIR1,RCIF
         bcf         STATUS,C
         movf      Dato_recibido,w
         sublw      0x40
         btfss      STATUS,C
         goto      ciclo_set

         bcf         STATUS,Z
         movf      Dato_recibido,w
         xorlw      0x0D
         btfsc      STATUS,Z
         goto      limpiar_flag

         bcf         STATUS,Z
         movf      Dato_recibido,w
         xorlw      0x2E
         btfss      STATUS,Z
         goto      sigue_set1
         movf      Dato_recibido,w
         call                   DatoUSART_Tx
         goto      ciclo_set
sigue_set1:   
         movf      Dato_recibido,w
         call                   DatoUSART_Tx
         movlw      0x30
         bcf         STATUS,C
         subwf      Dato_recibido,w
         movwf      INDF
         incf         FSR
         movf      FSR,w
         bcf         STATUS,Z
         xorlw      0x23
         btfsc      STATUS,Z
         goto      limpiar_flag
         goto      ciclo_set
limpiar_flag:
         bcf         flagset,0
         call                   CarryRet_USART
                   call                   NextLine_USART
         bsf         PIE1,RCIE
         bsf         INTCON,T0IE
         return

volver:            return

Enviar_temp
         bsf         Control_pin
                   call               Retardo   
         movlw           0x30
                   addwf              ID,f
                      movlw           'T'
                   call                   DatoUSART_Tx
                   movlw           '#'
                   call                   DatoUSART_Tx
                   movf              ID,w
                   call                   DatoUSART_Tx
                   movlw           ':'
                   call                   DatoUSART_Tx
                   movlw           ' '
                   call                   DatoUSART_Tx
                   movf               DIGIT5,w
                      addlw              0x30
                   call                   DatoUSART_Tx
                   movf               DIGIT4,w
                   addlw              0x30
                   call                   DatoUSART_Tx
                   movlw           '.'
                   call                   DatoUSART_Tx
                   movf               DIGIT3,w
                   addlw              0x30
                   call                   DatoUSART_Tx   
                   Movlw              ' '
                   call                   DatoUSART_Tx
                   Movlw              'C'
                   call                   DatoUSART_Tx
         bcf         Control_pin
                   return
     
mensaje_serial:
            movlw         LOW(Tablaset_point)
            movwf         Offset_L
            movlw         HIGH(Tablaset_point)
            movwf         Offset_H

            movf         puntero,w         
            addwf         Offset_L,f
            btfss         STATUS,Z
            goto         $+3

            movlw         .1
            addwf         Offset_H,f
     
            movf         Offset_H,w
            movwf         PCLATH

            movf         puntero,w
            Lcall         Tablaset_point
            movwf         var
            movlw         0x00
            addwf         var
            btfsc         STATUS,Z
            goto         salir_mensaje
            movf         var,w
            call            DatoUSART_Tx
            incf            puntero     
            goto         mensaje_serial
salir_mensaje:
         return

Tablaset_point:     
            addwf      PCL,f
tablaset:         EQU      $           
            DT         " Introduzca el set point entre 40 y 90 ",0x00


 

anything