TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rachelies en 08 de Marzo de 2013, 12:32:59
-
Hola:
Estoy tratando de conectar 3 Pic entre sí usando la usart. El sistema se compone de una placa con un PIC que hará de "maestro" y será el que reciba y envíe datos al pc, y a la vez envía ciertos datos recibidos del PC a otros 2 PIC en otras placas. Esto me funciona bien, los otros 2 Pic reciben los datos correctamente. Lo que no me funciona nada bien es cuando alguno de estos dos "esclavos" mandan algo al maestro, muchas veces no llegan estos datos, seguramente por problemas de colisiones o no se.
Las placas están bastante cerca y no utilizo max232, va conectado directamente uno a otro. ¿Cómo puedo controlar que no está enviando ninguno para poder utilizar el bus?
Un saludo y gracias
-
Hola, estas frente a dos cuestiones
1: ambos micros esclavos envian simultaneamente, utiliza un control de flujo o protocolo para evitar las colisiones.
2: electricamente ambos son salidas y en estado de reposo estan a 1, entonces por alli que cuando uno pone el "bus" a 0 se producen problemas, te sugiero coloques un diodo a cada salida de TX de los esclavos y unidos por el catodo al RX del master.
saludos.
-
Simulando con el Proteus, si coloco los diodos solo envía uno de ellos, el contrario que sin diodos.... :?
-
Simulando con el Proteus, si coloco los diodos solo envía uno de ellos, el contrario que sin diodos.... :?
Y si pruebas en fisico??
Edito: cambia los diodos por una compuerta AND, en la misma simulacion.
saludos
-
Las placas están bastante cerca y no utilizo max232, va conectado directamente uno a otro. ¿Cómo puedo controlar que no está enviando ninguno para poder utilizar el bus?
No creo que RS232 esté diseñado para lo que pretendes hacer (una red compartida entre varios dispositivos), yo utilizaría I2C o SPI.
-
Con la puerta AND tampoco funciona, ahora envia el otro. No lo puedo probar físicamente porque no estoy en casa
-
Puedes intentar con una llave comandada mediante un pin del pic. Si dicho pin se encuentra en 1, se comunicará al pic maestro con el esclavo 1, si el pin de control se encuentra a 0 se comunicará el maestro con el esclavo 2. Si utilizas dos llaves comandadas por el mismo pin, lograrías conmutar tanto RX como TX
-
Mañana probaré en el circuito físico a ver si funciona o que falla, porque con el proteus no va. Si no funciona, tendré que hacerlo en i2c...
Saludos
-
Estoy de acuerdo con planeta9999, mejor utiliza otro protocolo, SPI me parece lo mas ideal
-
Pero con SPI tengo que utilizar un pin de enable en el master para cada esclavo, ¿no?
-
Yo creo que con un correcto orden y flujo se puede utilizar el uart sin problemas.
saludos.
-
Pero con SPI tengo que utilizar un pin de enable en el master para cada esclavo, ¿no?
No necesariamente, eso depende de lo que quieras hacer y si te sobran dos pines podrias utilizarlos para habilitar el esclavo con quien desees intercambiar datos :mrgreen:
Como te dicen los compañeros SPI es una excelente opcion :mrgreen:
-
SPI e I2C ¿no están pensados para comunicaciones en una misma placa? Pienso, como comunicación entre un micro y un periférico dentro de un mismo producto.
-
también podrías controlar el bus de datos con un buffer tri-estado desde el pic master
-
SPI e I2C ¿no están pensados para comunicaciones en una misma placa? Pienso, como comunicación entre un micro y un periférico dentro de un mismo producto.
Asi es puedes emplear o I2C o SPI, dependiendo tambien de la velocidad a que quieres intercambiar informacion y el tipo de comunciacion que soporte el periferico, podrias enotnces utilizar una u otra :mrgreen:
-
Pero con SPI tengo que utilizar un pin de enable en el master para cada esclavo, ¿no?
Con SPI necesitas 4 hilos para cada esclavo, con I2C 2 hilos, longitud máxima 4-5 metros, siendo muy optimistas.
Si necesitas longitudes mayores, para trabajar en Red, puedes probar Ethernet.
RS485, podría ser una alternativa para largas distancias, en red, con hasta 32 dispositivos.
Otra alternativa podría ser CAN bus, en automoción se usa para gestionar en red multiples centralitas, pudiendo trabajar con varios master, tienes muchos PIC que incorporan CAN bus, solo tendrías que añadir el chip que gestione la capa física.
Sin son varias placas, que no distan más de 1 metro, entre ellas, yo usaría I2C si no necesitas mucha velocidad, y SPI para para comunicaciones más rápidas.
-
¿Y el 485 de CCS alguien lo ha utilizado y sabe como funciona? No soy capaz de hacer nada con el