Autor Tema: se puede master slave con solo max232 ?  (Leído 1612 veces)

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

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
se puede master slave con solo max232 ?
« en: 04 de Julio de 2007, 13:37:04 »
Buenas tengo la siguiente duda , estaba pensando usar un protocolo 485 pero no requiero mucha distancia por eso pense
usar por ejemplo dos pic esclavos cada uno con su max232 , mi duda era la siguiente pensaba que la pc fuera el master
y no se si habra algun problema si conecto el TX de la pc a rx1 y rx2(esclavos, aca creo q no) y su RX a t1 y t2(aca es donde tengo esa duda) pues llegar el momento en que cada esclavo debera de mandar su mensaje al maestro y al hacerlo por ejemplo el esclavo uno quiere responder al maestro enviara los datos por t1, pero tener en cuenta que tambien t1 esta conectado con t2 osea estoy forzadamente enviando del esclavo al t1 ala salida t2 , en lo real producira algun problema o no pues en el proteus esta parte en la que el esclavo responde no manda nada por estar conectado t1 con t2, si alguien pudiera aportar con alguna idea seria fenomenal  :-/

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: se puede master slave con solo max232 ?
« Respuesta #1 en: 04 de Julio de 2007, 14:42:59 »
Hola electronando, en un principio el RS-232 había sido diseñado para funcionar hasta con 2 slave, pero núnca en mi vida e visto que se use de esta manera, tampoco e podido encontrar ninguna aplicación que lo use, pero sí e llegado a leer que no es posible implementar un sistema de RS-232 y 2 slaves.

Por lo tanto la info que yo poseo es un poco "confusa", veremos que comentan los demas colegas, pero si me pides mí opinión yo diría que no es posible o muy poco recomendable.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: se puede master slave con solo max232 ?
« Respuesta #2 en: 04 de Julio de 2007, 14:55:12 »
Concido contigo Chaly29, no se debe intentar hacer una comunicación multiesclavo con RS-232, para ello es mejor utilizar RS-485, hay algunas cosillas para utilizar I2C y SPI mediante buffers adecuados y otros inventos, aunque estas interfaces estén diseñadas para interconectar circuitos integrados en una misma placa.

Yo te recomiendo electronando que uses RS-485, o USB, con USB, si las velocidades de comunicación son bajas puedes llegar hasta unos 15metros, con los cables adecuados y suministrando la alimentación a tus placas desde una fuente independiente, es decir no usar Vcc del USB.

Saludos
Reinier

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: se puede master slave con solo max232 ?
« Respuesta #3 en: 04 de Julio de 2007, 19:30:48 »
veremos que comentan los demas colegas, pero si me pides mí opinión yo diría que no es posible o muy poco recomendable.

Coincido en que no es recomendable, pero si es posible, solo que debes manejar muy bien el protocolo de comunicación para identificar cada pic con una dirección única, de manera que solo uno de ellos envie datos hacia el computador, si ambos pic envian al mismo tiempo la información se perdería.  El computador debe gestionar la comunicación solicitando información a uno de los pic por medio de la dirección.

Para evitar el problema de colisión de datos solo tienes que hacer una OR con los pines de TX de ambos micros, adjunto una imagen para mas claridad.

saludos,
Pereira - Colombia

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
Re: se puede master slave con solo max232 ?
« Respuesta #4 en: 05 de Julio de 2007, 01:54:08 »
les agradesco la ayuda eso tb como que me causaba una indigestion electronica el querer hacer esa coneccion para el rs232
sucede que estoy haciendo la prueba con tres esclavos y un maestro con coneccion rs-485 pero no me enlaza me refiero el maestro esta continuamente enviando una direccion la del esclavo1 2 y 3, a lo cual el esclavo esta en modo escucha hasta que recibe la direccion del maestro en ese instante , el esclavo cambia a modo emisor y el maestro a modo receptor por un tiempo esperando alguna respuesta de su esclavo direccionado , por ejemplo estoy probando con dos pulsadores en el esclavo si se activa determinado pulsador me manda un mensaje al maestro dependiendo del pulsador pulsado y de que esclavo pertenece mediante una pantalla lcd en el esclavo espero para que comprendan adjunto el codigo del maestro y esclavo esta en basic proton , me comunico por medio de interrupciones por la usart , esta transmision funciona ok sies q se coloca directamente pero al poner la red 485 no sucede eso y no creo sea la coneccion de los componentes pues e probado fisica y virtualmente en el proteus con el max487 , les agradeceria si tienen algun ejemplo de un maestro enviando una informacion a sus esclavos y que el esclavo responda sea cual fuese el lenguiaje la verdad por la red no e encontrado nada y ya estoy perdiendo la fe que por eso puse el post de rs232 q tampoco me parece muy profesional , a quien desee ver la simulacion y codigos fuente en hex y basic completos se los puedo enviar a su correo , mi meil es electronando@hotmail.com a continuacion el codigo master y slave :


DEVICE 16F877a
DECLARE XTAL 4
ON_INTERRUPT GOTO INT_RECEPCION 
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.4
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTB.2
SYMBOL RCIE=PIE1.5
SYMBOL RCIF=PIR1.5
SYMBOL TXIF=PIR1.4
SYMBOL CREN=RCSTA.4
SYMBOL GIE=INTCON.7
DIM K AS BYTE
DIM BUF_RECEP AS BYTE
DIM BUF_TX AS BYTE
SYMBOL BOTA=PORTD.0
SYMBOL BOTB=PORTD.1
SYMBOL BOTC=PORTD.2
SYMBOL MODO=PORTC.0
GIE=0
GOTO SALTO
'*************RUTINA DE INTERRUPCION***********************
INT_RECEPCION:
'MODO=0
IF RCIF=1 THEN
    RCIF=0   
    IF RCSTA.1=1 THEN
        CREN=0
        CREN=1
        GOTO FIN_RECEPCION
    ENDIF
    IF RCSTA.2=1 THEN
        RCSTA.2=0
        GOTO FIN_RECEPCION
    ENDIF
    BUF_RECEP=RCREG
    GOSUB ANA_RECEPCION
    'INTCON.2=0
    'TMR0=0
    'GOTO ESPERA_B
ENDIF
FIN_RECEPCION:
RCIF=0
'MODO=1
CONTEXT RESTORE
ENABLE
'**********************FIN DE RUTINA DE INTERRUPCION****************
SALTO:

option_reg=%10000010  'con prescaler 8
RCIE=1
INTCON=0
INTCON.6=1 'PARA INTERUPCION EXTERNAS
intcon.2=0
TRISC.0=0
TRISC.6=0
TRISC.7=1
RCSTA.4=0
RCSTA.4=1
RCSTA=%10010000
TXSTA=%00100100
SPBRG=25
TRISD.0=1
TRISD.1=1
TRISD.2=1
TRISB=0
'DELAYMS 1000
K=48
MODO=1
VUELTAS:
FOR K=49 TO 51
    @NOP
    @NOP
    @NOP
    @NOP
    @NOP
    @NOP
    BUF_TX=K
    TXREG=K
    @NOP
    @NOP
    ESPERA2:
    IF TXIF=0 THEN ESPERA2
    @NOP
    @NOP
    @NOP
    @NOP
    @NOP
    INTCON.2=0
    TMR0=150
    ESPERA4:
    IF INTCON.2=0 THEN ESPERA4
    INTCON.2=0
    TMR0=0

    modo=0
    CREN=1
    GIE=1
    TMR0=0
    INTCON.2=0
    ESPERA3:
    IF INTCON.2=1 THEN
        INTCON.2=0
        tmr0=0
        GOTO ENVIAR
    ENDIF
    goto espera3
    ENVIAR:
    modo=1
    CREN=0
    GIE=0
   
    'DELAYMS 1
NEXT
GOTO VUELTAS





ANA_RECEPCION:
IF BUF_RECEP="H" THEN
    CLS
    PRINT AT 1,1,"HOLA DE :",BUF_TX  'NO SE POR Q HAY Q RESTARLE
ENDIF
IF BUF_RECEP="C" THEN
    CLS
    PRINT AT 1,1,"CHAO DE :",BUF_TX
ENDIF
RETURN

en lo anterior se transmite a 9600 baudios


para el salave

DEVICE 16F873a
DECLARE XTAL 4
ON_INTERRUPT GOTO INT_RECEPCION 
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
DECLARE LCD_DTPIN PORTB.4
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTB.2
SYMBOL RCIE=PIE1.5
SYMBOL RCIF=PIR1.5
SYMBOL TXIF=PIR1.4
SYMBOL CREN=RCSTA.4
SYMBOL GIE=INTCON.7
DIM K AS BYTE
DIM BUF_RECEP AS BYTE
DIM BUF_TX AS BYTE
SYMBOL BOTA=PORTD.0
SYMBOL BOTB=PORTD.1
SYMBOL BOTC=PORTD.2
SYMBOL MODO=PORTC.0
GIE=0
GOTO SALTO
'*************RUTINA DE INTERRUPCION***********************
INT_RECEPCION:
IF RCIF=1 THEN
    RCIF=0   
    IF RCSTA.1=1 THEN
        CREN=0
        CREN=1
        GOTO FIN_RECEPCION
    ENDIF
    IF RCSTA.2=1 THEN
        RCSTA.2=0
        GOTO FIN_RECEPCION
    ENDIF
    BUF_RECEP=RCREG
    IF BUF_RECEP=49 THEN
        CREN=0
        'MODO=1
        @NOP
        @NOP
        @NOP
        @NOP
        IF PORTA.0=0 THEN
            BUF_TX="H"
            GOTO MANDA
        ENDIF
        IF PORTA.1=0 THEN
            BUF_TX="C"
            GOTO MANDA
        ENDIF
        BUF_TX=0
        MANDA:
        TMR0=0
        INTCON.2=0
        ESPERA3:
        IF INTCON.2=1 THEN
            INTCON.2=0
            tmr0=0
            GOTO ENVIAR
        ENDIF
        goto espera3
        ENVIAR:
        TXREG=BUF_TX
        ESPERA2:
        IF TXIF=0 THEN ESPERA2
       
        CREN=1
        RCIF=0
        @NOP
        @NOP
    ENDIF
ENDIF
FIN_RECEPCION:
RCIF=0
MODO=0   
CONTEXT RESTORE
ENABLE
'**********************FIN DE RUTINA DE INTERRUPCION****************
SALTO:

option_reg=%10000001  'con prescaler 4
RCIE=1
INTCON=0
INTCON.6=1 'PARA INTERUPCION EXTERNAS
intcon.2=0
TRISC.0=0
TRISC.6=0
TRISC.7=1
RCSTA.4=0
RCSTA.4=1
RCSTA=%10010000
TXSTA=%00100100
SPBRG=25
TRISD.0=1
TRISD.1=1
TRISD.2=1
TRISA.0=1
TRISA.1=1
ADCON1=7
'DELAYMS 1000
GIE=1
CREN=1
MODO=0
VUELTAS:
    @NOP
    @NOP
   
GOTO VUELTAS

END

la coneccion de los max es en modo half duplex
 :mrgreen:
 


 

anything