Comunicación RS-485 PIC C CCS

#61
De mi intervención anterior...

SIC "...he visto que usas velocidad de 9600, intenta bajar a 1200..."

Las resistencias de terminación en las dos puntas de 120ohms son necesarias(no se si las culpables de que no te funcione a ti el sistema).

Las distancias que usas no son largas pero no tengo ni la mas pálida idea de que has echo tu en lo físico/real....conexiones, alimentación, etc, etc.

Una cosa es el esquema, plano, etc. y otra muy distinta la construcción real y física en si.
 
#62
Tengo esas plaquetas que se venden de Arduino de RS485 con unas placas con los pic16f886 con par telefonico que no hay mas de un metro entre una laca y otra con una en el medio ningun secreto mas que eso, por eso preguno es necesario con esas plaquetas rs485 de arduino poner resistencias? porque son un circiuito completo esas plaquetas de arduino. y voy a probar a bajar la velocidad.
 
#64
Hola dcsalg, veo que estas padeciendo con el problema este del rs485.
Por lo que leí en simulación esta funcionando todo.

Entonces ahora es cuestión de atacar al hardware, para esto se puede hacer lo siguiente:
Verificar que los módulos rs485 estén en buen estado.

Para esto nos olvidamos de todo el protocolo implementado (solo se cambia el programa, el circuito debe estar armado sin que le falte nada) y solo usamos el puerto serie.
Se elige un supuesto maestro y este envía una trama de datos cualquiera a los demás que serían los esclavos, los esclavos deberían recibir la misma información que envió le maestro, si alguno de los esclavos no recibe los datos correctamente entonces ya sabremos a quien centrar la atención.
Supongo que para verificar si recibió los datos se puede usar un lcd u otros puertos serie conectados a la pc.
 
#65
Hola Saint_ lo que sucede que no es que hay un maestro o un esclavo todos se comunican con todos, lomque utilizo son esos modulos de RS485 que se venden y lo que sucede que no siempre es el mismo el que responde segun como se le antoja a veces reacciona siempre uno o los 3 o a veces ni recibe entonces es como que me deja descolocado todo esto. tendra algo que ver porque no utilizo el RS232 de la plaqueta y utilizo por software? pero la realidad que no creo que sea eso la libreria de CCS esta bastante bien realizada, el problema es que si tengo 3 plaquetas, y transmito de la 1 la plaqueta 2 y 3 lo reciban y enciendan el led, como un repetidor de la 1 seria, y si se me ocurre apagar el led de la laqueta 2, que la plaqueta 1 y 3 lo apaguen, y si enciendo de la 3, que la plaqueta 1 y 2 enciendan, no resulta. Baje velocidad, la comunicacion esta a 1 metro entre plaquetas, y es cosa de no creer uno un par telefonico como puse antes para esta prueba que para un metro de distancia me va a servir como prueba y lo peor que como vi en su momento que funcionaba en la computadora construi las 3 plaquetas quedo lindo pero me pasa esto y me agarro una cosa adentro que no lo puedo creer porque le estoy haciendo de todo, nose ya porque lado viene el problema. :cry::cry:
 
#66
Normalmente en I2C se usa un maestro y los demás son esclavos, lo que tu estás haciendo caería en multimaestro y es tiene sus detalles, en lo posible seria que trabajes en modo maestro-esclavo.
 
#67
Saint_ estoy usando RS485, no I2C.
Recién ahora comienzan a funcionar las plaquetas, lo que no entiendo es por qué tengo que resetar cada plaqueta con el boton de reset, si no, no funcionan.
O sea, conecto las plaquetas que son 3 y nada, presiono reset, esa comienza a funcionar, luego presiono el reset de la siguiente y así, si no presiono el reset, nada.
Es como si arrancara mal el programa, no sé. ¿Estará mal el orden de las líneas de código?
 
Última edición por un moderador:
#68
Saint_ estoy usando RS485 no I2C
Tienes razón, se me fue ese detalle, quise decir que en rs485 igual se usa la figura de maestro esclavo.

Por ahí me da la impresión de que como estas enviando los datos “todos contra todos”, tienes colisiones en el bus y eso justificaría el por qué recibes valores erróneos y de manera aleatoria.
 
#69
Saint_ ¿Y cómo hago eso de maestro esclavo? Porque en caso de I2C pones Master y los Otros Slave.
Y otra consulta. ¿Si yo presiono una tecla en un esclavo para que encienda su led y quiero que encienda el led en el maestro, el esclavo no pasa ser master?
Porque el que envía en este caso es el esclavo y no puedo estar interrogando con el maestro a todo momento los esclavos.
Creo porque esa linea también se usa para otras cosas, si-no estaría todo el tiempo ocupada en interrogar.
 
Última edición por un moderador:
#70
En realidad el maestro es que decide que va a hacer los esclavos.

En el caso de que si el en el esclavo se presiona una tecla y este enciende un led, se debería guardar el estado del led en alguna variable y cuando el maestro le pida información recién el esclavo le envié el dato esto implica que el maestro deberá interrogar periódicamente al o los esclavos, los esclavos pueden estar haciendo sus tareas y solo enviar información cuando el maestro se los pida. Por eso en la trama RS485 normalmente se envía el id del que inicia la comunicación (este podría ser el maestro), el ID del destinatario (podría ser el esclavo), numero de bytes enviados, datos y el ackt, de este modo se pueden detectas si hubo errores y si eso pasa entonces retransmitir.