TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nacho687 en 18 de Agosto de 2013, 20:19:07
-
Hola a todos. Soy nuevo en esto y tengo una duda con un proyecto. Quiero comunicar varios pic, 8 por ejemplo, con otro pic. Osea lo que quiero hacer es mandar el valor que tiene cada pic en un contador, a un solo pic "central" que recibe todos los valores y hace un calculo con ellos. ¿esto se podria hacer de alguna forma? ¿me podrian ayudar con alguna idea?
Muchas gracias
-
hola bienvenido al foro nacho687
lo primero es pensar en la dintancia entre pic maestro y los pics esclavos, despues mirar la velocidad de trasferencia.... y asi muchas cosas....
si no necesitas de mucha velocidad y los pic estan cercanos al maestro, por usart puedes al igual que por spi.... este segundo gana algo mas de velocidad aunque la distancia se reduce :(
si estan distanciados los pics esclavos dem maestro, lo mejor son modulos Xbee por bluetooh
que tipo de pics vas a usar? danos alguna pista mas
-
muchas gracias por responder ppyote.. En cuanto a las distancias serian de dos o 3 metros, y no necesitaria mucha velocidad. En cuanto a lo de usart lo habia pensado, pero esto se podria hacer entre dos pics, no entre varios como quiero hacer, o estoy equivocado? lo que por ahi se me habia ocurrido era usar algun tipo de multiplexor para ir comunicando de a 1 pic con el pic central.
Y en cuanto al los pics no los tengo definidos todavia porque no se como se podria hacer.
-
Hola! Podes usar RS485 mas algún protocolo que te permita distinguir entre distintos esclavos... Lo podes armar vos uno sencillo.
Saludos!
-
Pudieras comunicar los pic como te dicen, via RS232, si utilizas el CCS por ejemplo seria bastante sencillo. :mrgreen:
Pero que compilador piensas emplear?
Para que podamos darte alguna sugerencia de como hacerlo :mrgreen:
-
Muchas gracias de nuevo. Uso el CCs
-
Bueno si empleas el CCS podrias hacer algo como esto:
Utilizar el FLOAT_HIGH (con esta instruccion deberias utilizar una resistencia de pull up, como en el I2C, evitas cortos y detectas colisiones en el buff :mrgreen:), el RETURN y pudiera ser el MULTI_MASTER y asi podrias comunicarte por RS232 :mrgreen:
Esa es una forma pero no es la unica ;-)
Revisa la ayuda del CCS alli lo explica mejor y puedes ir haciendo pruebas :mrgreen:
Saludos
-
Por I2C También se podría hacer, pero todo depende del los pic a usar
-
Por I2C También se podría hacer, pero todo depende del los pic a usar
Como lo podria hacer y con que pic?
-
Lo primero que debes hacer es configurar la comunicación i2c al maestro, este se comunica por el mismo bus con todos los pic esclavos
cada pic esclavo tiene asignado un valor, el maestro va preguntando por el bus a cada valor de pic esclavo asignado
el esclavo sólo tiene que contestar, y una vez ha contestado, esperar un tiempo para evitar la colisión de datos... Y el maestro a volver a preguntar al siguiente valor de esclavo asignado... La comunicación i2c los dos cables llevan conectadas resistencias pullups...
En cuanto a lo de que pics usar, por software yo nunca he conseguido comunicar en modo esclavo y no se sí se podrá... O era spi? Ya no me acuerdo Jajaja
-
Para la distancia que se quiere utilizar evaluar la velocidad de I2C a usarse.
Saludos!
-
Yo iría con rs485
Saludos!
-
Por lo que has descrito hasta ahora, parece que la red más adecuada sería una red lin:
http://www.ni.com/white-paper/9733/es/
Utiliza un maestro y muchos esclavos, velocidad relativamente lenta y hardware sencillo (se puede implementar con la uart).
Saludos.
-
Si lo quieres hacer más fácil aún, puedes conectar todas las patillas Rx y Tx a un mismo hilo y conectar todas las masas entre sí (sólo te hace falta un bus de dos hilos)
Las patillas Tx deben estar todas inactivas (en alta impedancia o configuradas como entradas) y unidas al hilo mediante una resistencia (por si acaso, para que no haya cortocircuitos).
El maestro comienza la transmisión activando su patilla Tx y enviando un dato a un esclavo. Después el maestro desactiva Tx y espera al esclavo. En ese momento el esclavo activa su patilla Tx y envía el dato. Por último el esclavo desactiva su patilla Tx y el ciclo puede volver a comenzar.
Es simple pero efectivo.
Saludos.
-
Para evitar el ruido eléctrico puedes poner una capacidad entre la patilla Rx y masa de cada uno de los pic.
También hay que llevar a positivo la línea conectando una resistencia de 1kohm a Vdd para evitar que quede al aire al desactivar todas las salidas Tx.
Por ejemplo 10 pics unidos de esta forma, con una resistencia en Tx de 100 ohms y capacidades en Rx de 1nF podrían soportar con facilidad velocidades de 115kbauds.
Saludos.
-
Exacto picuino a eso me referia en mi post anterior :D
-
Muchas gracias a todos. Voy a evaluar todas las opciones y ver que sale
-
rs232
-
yo tambien te sugeriria por rs232 con una configuracion de este tipo (si el numero de pics es fijo):
PIC-MASTER Pin-TX ---- Pin-Rx PIC-SLAVE1 Pin-Tx ---- Pin-Rx PIC-SLAVE2 Pin-Tx ---- (etc) ---Pin-Rx PIC-SLAVEN Pin-Tx ---- (regresa a Rx de PIC-MASTER)
Cada PIC-slave envia la info de este tipo. byte0 (PIC-ID), byte1(VALOR-DATO),byte(OTRO-VALOR)
Todos los retransmiten el dato hasta que llegue al PIC
Si el PIC-MASTER solo recibe los datos entonces se puede omitir el primer lazo.
Me parece q seria lo mas sencillo de implementar si no deseas meterte con SPI o I2C o buses con colector abierto en general.
suerte.