USART, SPI, I2C ¿cual usar?

Saludos!

Estoy diseñando un dispositivo en el que van a interactuar varios uC (PIC), y se van a comunicar entre ellos. He visto que existen varios protocolos de comunicación, como USART y MSSP (con sus modos SPI y I2C), necesito entonces saber cual me conviene tomando en cuenta:

* Velocidad de comunicación, entre más alta mejor
* Interrupción al recivir dato
* Que trabaje en modo "background"
* Pines destinados para ello
* Modos de asegurar que la info se ha transmitido correctamente

Entonces, que me aconsejan?

Gracias por la atención!
 
El mas rápido SPI, eso si, ocupa mas pines: 4 en cada esclavo y 3 + número de esclavos en el master
Uart es full-duplex pero no es multipunto, al menos en principio, neesitarías tantas uarts como esclavos en el master, también podrías pensar en rs485 que si que es multipunto pero half-duplex
I2C es multipunto pero es half-duplex, solo coupa 2 pines en cada circuito
La interrupción estará si eliges un micro que tenga SPI en hardware
Que trabaje en 2º plano pues lo mismo, aunque normalmente no tienen un buffer grande, solo almacenen un dato, así que atiendes a la interrupción y lo guardas donde sea
Seguridad, pues usas paridad, check-sum u otros códigos redundantes, a mas seguridad, menos velocidad
 
Si la distancia entre los pic es grande es mejor usar rs485, en el que utilizas la usart de los pic y uno o dos integrados del tipo MAX485 por cada pic, dependiendo si quieres FULL o HALL-DUPLEX.

Aunque a veces he pensado hacer algo similar a RS485 con la pura USART, se me ocurre que quizas convirtiendo en entrada el pin de TX mientras no se transmite dejando libre el bus. Claro que de ser posible esto, la longitud del bus estaria limitada
 
Me cayo como anillo al dedo este tema....

resulta que estoy conectando un reloj ds1307 i2c y me funciona pero a veces, uso el mismo codigo no le cambio absolutamente nada y a veces se queda pasmado el reloj si manda la informacion pero no corre los segundos no avanzan, tengo como 15cm de cable de red para conectarlo... mi pregunta puede ser ese el error???

ya he revizado como 5000 veces las conexiones y todo esta bien puse un capacitor de 100nF de filtro, etc, etc...
el cristal de 32. no se que hertz o sea el que especifica la datashit...
han tenido una experiencia similar???

Agrego ya puse 3 integrados diferentes y con los tres es lo mismo....
 
Última edición:
Revisa el código, igual tiene algún bug que solo se manifiesta a veces; no cierras los valores después de leer o algo así.
 
Revisa el código, igual tiene algún bug que solo se manifiesta a veces; no cierras los valores después de leer o algo así.

Gracias por responder scooter....


ya supe que es... estos gringos son unos soberanos p*nd*jos...
algun dia tendre que ir a enseñarlos, para que dejen de hacer estupideces y agarrar sus integrados y meterselos por el c*lo!!! :enfadado:

después de haberme desahogado :) :) aaaaaaaaaaahhhhhhhhh!!!!

ok ...
curiosamente con los tres integrados 1307 es el mismo proceso...

1.-se graba el micro y se tiene que programar para que establesca una fecha... solo una vez al principio
2.-hasta que aparezca el reloj se conecta la bateria de 3v...

eso tambien sucede en la simulacion exactamente igual que en la realidad...

jejej... quien no le entendió a mi explicación estoy a sus ordenes para cualquier acalarion...
 
Hey! muchas gracias por los aportes.......... parece ser que el que pinta mejor es el SPI :)

Me dicen que importa mucho la distancia, pero como puedo saber que una distancia es corta o larga?.... en las hojas de notas de microchip no encontré ningún dato sobre ello..... además supongo tengo que contemplar cosas como la velocidad de transferencia a la que trabaje y el tipo de cableado que tenga.

Saludos!
 
Mi opinión personal es que cuando hay microcontroladores por medio, ir tirando de RS-485, a ser posible, con ModBus. El hecho de poder depurar y monitorizar la comunicación con el PC es un punto a tener en cuenta en este tipo de cosas.

Ojo, que sólo es una triste opinión personal.
 
Atrás
Arriba