TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: hqv en 15 de Noviembre de 2005, 15:50:00

Título: utilizar pic como master y slave a la vez
Publicado por: hqv en 15 de Noviembre de 2005, 15:50:00
hola amigos::

mi pregunta es tengo dos pic funcionando juntos y necesitan trasferirse info del uno al otro ,voy a ocupar i2c por lo que necesito que ambos sean master y slave en un momento y en otro sean sleve -master.

para eso necesito colocar :
#use i2c(master, sda=pin_c4,sdc=pin_c3,address=0xa)
#use i2c(salve, sda=pin_c4,sdc=pin_c3,address=0xa)

o hay que colocarles direcciones diferentes? u otra instrucción..?
gracias

hqv
Título: RE: utilizar pic como master y slave a la vez
Publicado por: J1M en 15 de Noviembre de 2005, 16:27:00
hola hqv,

tienes que configurar los pics de tal forma que solo haya un master (será el que genere la señal reloj para enviar/recibir datos) y varios slaves (uno en tu caso)

En el CCS hay un ejemplo llamado EX_Slave.C que te puede ayudar a entender como enviar/recibir datos.

saludos!
Título: RE: utilizar pic como master y slave a la vez
Publicado por: Sebascl en 15 de Noviembre de 2005, 18:27:00
hola hqv, a que te refieres con maester y salave a la vez?, quieres que el esclavo pueda transmitir datos al maestro sin que el maestro los leea del esclavo?



saludos...
Título: RE: utilizar pic como master y slave a la vez
Publicado por: hqv en 16 de Noviembre de 2005, 16:06:00
lo que me refiero es lo siguiente:

tengo dos pic que estan tomando información de varios sensores, y tienen que comunicarse entre ellos,es decir en un momento uno de ellos es el master que trasfiere info al slave y en otro momento es al reves (el que antes era el slave) ahora es master y el otro pasa a ser slave.

 gracias
hqv
Título: RE: utilizar pic como master y slave a la vez
Publicado por: jfh900 en 16 de Noviembre de 2005, 17:43:00
Simultaneamente no pueden ser master y slave, tal vez se pueda conmutar de un modo a otro, aunque tal vez seria mejor establecer otrro canal de comunicacion mas adecuado como un rs232 o utilizar un puerto de cada pic para transferir la información.
Título: RE: utilizar pic como master y slave a la vez
Publicado por: J1M en 16 de Noviembre de 2005, 18:08:00
pero lo q no entiendo es pq el slave quieres q pase a ser master loco, el slave puede transmitir y no por ello ha de ser master...
Título: RE: utilizar pic como master y slave a la vez
Publicado por: hqv en 16 de Noviembre de 2005, 18:58:00
J1M gracias pero es que = no cacho mucho del i2c por eso estoy preguntando...

la interrupción que esta relacionada con el i2c funciona = que la del usart, que al llegar datos uno entra en la interrupción??

el slave puede en cualquier momento transmitir información al master..?

cualquier otra info sobre el uso del i2c es de gran ayuda..
gracias nuevamente J1M espero tu respuesta

hqv
Título: RE: utilizar pic como master y slave a la vez
Publicado por: jfh900 en 17 de Noviembre de 2005, 03:12:00
No, el esclavo solo contesta cuando le pregunta el maestro, el siguiente código pediria un maestro a un esclavo el valor de un registro:

// Cliclo de escritura (escribimos en el esclavo el registro a leer)
i2c_start();
i2c_write(address); // Nos diriguimos al dispositivo esclavo y este se pone a la  espera de un comando devolviendo un ACK
i2c_write(n_registro) // Le indicamos cual es el registro a leer
// Ciclo de lectura (leemos el registro del esclavo)
i2c_start();
i2c_write(address+1); // Nos diriguimos al dispositivo esclavo y este se pone en modo escritura
i2c_read(); // Leemos el registro
i2c_stop(); // Final de la secuencia

Por consiguiente un esclavo escribe cuando se lo solicita el maestro. Y si no esta claro que iria contra la filosofia de la arquitectura Master-Slave

Título: RE: utilizar pic como master y slave a la vez
Publicado por: J1M en 17 de Noviembre de 2005, 06:06:00
no puedes transmitir cuando el quiera, no tal y como está pensada la arquitectura I2C, lo q puedes hacer es sacar otra linea desde el Slave hacia el Master a la pata de interrupción externa de este y cuando el slave necesite que el master se comunique con el se active la interrupcion y pida los datos al Slave, claro q esto es algo "raro". Otra opcion es emular otro I2C por software, un I2C es master y el otro esclavo, para el otro pic el primero I2C seria el sclavo, y el segundo el master. De esta forma utilizarías 4 líneas, como te he comentado anteriormente solo tres. Lo que tú comentabas al principio creo q no es posible ya q no puede "reconfigurarse", pero si q el esclavo avisar al master de cuando tenga un dato disponible para ser transmitido.

saludos
Título: RE: utilizar pic como master y slave a la vez
Publicado por: jfh900 en 17 de Noviembre de 2005, 10:43:00
Estamos mareando la perdiz, la arquitectura master-slave esta para lo que esta, un maestro manda o recaba información de los esclavos y no es una comunicación dual al mismo nivel. Si se quiere hacer otra cosa hay otros protocolos que estan para eso como por ejemplo RS232, RS485 o teniendo en cuenta que el módulo MSSP (MASTER SYNCHRONOUS SERIAL PORT) puede trabajar como SPI (Serial Peripheral Interface) que permite transmitir y recivir al mismo tiempo.
Título: RE: utilizar pic como master y slave a la vez
Publicado por: hqv en 17 de Noviembre de 2005, 16:49:00
alguien tiene el codigo relacionado con el slave utilizando la interrupcion int_ssp()

y lo que no me dijieron es si la interrupcion por i2c es = a la de usart, es decir al llegar un dato entra en el codigo relacionado con la interrupción rda.

gracias
hqv
Título: RE: utilizar pic como master y slave a la vez
Publicado por: jfh900 en 18 de Noviembre de 2005, 02:26:00
En el hilo:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=3939531

tienes como se maneja la irq de un esclavo I2C.