Pages: [1] 2   Go Down
Author Topic: Arduino como maestro y esclavo usando I2C  (Read 4960 times)
0 Members and 1 Guest are viewing this topic.
M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Muy buenas a todos,

Aunque llevo tiempo leyendo temas de este foro, es la primera vez que voy a pedir ayuda. Estoy realizando un proyecto que consiste en usar Arduino como "interfaz" entre un robot Mindstorm de LEGO (que se comunica con sus sensores mediante el protocolo I2C) y los sensores del mismo. Es decir, el esquema sería: Robot <--> Arduino <--> Sensor. El primer paso sería conseguir que Arduino fuera transparente en esta comunicación, pero para ello me ha surgido esta duda:

- Con respecto al robot, Arduino debe ser el esclavo en la comunicación I2C (ya que el Mindstorm sería el maestro), y con respecto a los sensores Arduino debe ser el Maestro. ¿Es posible hacer esto? Se que en principio sólo están las entradas analógicas 4 y 5 como señales de I2C, así que no se muy bien cómo puedo hacerlo.

Si se os ocurre algo os lo agradecería, y sí quereis echarle un ojo al proyecto os paso el link del blog asociado al mismo: http://mindstormsyarduino.blogspot.com/

Muchas gracias!

P.D: Se me olvidó comentar que la placa que voy a usar es la Arduino Mega.
« Last Edit: January 12, 2011, 04:54:20 am by cstockmans » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un problema que veo, es que aún haciendo uso de multi-masters, que en Arduino con un poco de paciencia se podría conseguir, al Lego supongo que no le podrás reprogramar la interfaz I2C.

Una opción fácil y válida, sería conectar el Lego con el Arduino por un bus I2C y el Arduino con los sensores mediante SoftI2C:
http://www.misenso.com/prototyping/two-sht21-softi2c-arduino/76/

Un saludo
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Ante todo muchas gracias por responder tan rápido smiley Efectivamente la interfaz del lego no la puedo tocar. Lo de usar SoftI2C es una cosa que no se me había ocurrido, y me ha parecido buena idea  smiley-wink Voy a echarle un ojo y a ver si (ya que ve veo que es algo más lento) no me da problemas con los tiempos de repsuesta y tal (cosa que no creo).

Otra opción que había pensado es isar un esquema tal que así:

LEGO <--> DISPOSITIVO X
                            |
                            |
                  ARDUINO <--> SENSORES

De forma que el dispositivo X sea una especie de registro en el que Arduino va colocando periódicamente los valores que ha leído de los sensores. De la misma forma, el robot iría pidiendo estos datos al "dispositivo X" en lugar de directamente a Arduino. Así Arduino y el robot siempre serían maestros, pero no están directamente conectados. ¿piensas que es posible? ¿hay algún dispositivo que me pudiera hacer esa función de registro?

Voy a seguir explorando ambas vías smiley De neuvo, muchas gracias!
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ten en cuenta que el "Dispositivo X" debería tener 2 interfaces I2C, y si lo pones pues directamente programas el dispositivo x de ser programable y tampoco he encontrado ningún integrado simple que haga lo que comentas.

Yo probaría lo del SoftI2C, que es lo más barato y fácil de testear.
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sip, llevas razón, estaba justo buscando algún dispositivo que tenga 2 interfaces I2C y que me valiera, pero no lo encuentro. Así que probablemente pruebe con el softI2C y a ver qué tal smiley
Gracias de nuevo por la ayuda. A ver si consigo que esto eche a andar! Ya iré comentando los progresos.
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Y si te fabricas una plaquita con un ATMega(que venga con el bootloader Arduino) que haga SPI <--> I2C para tu dispositivo X??
Como hace el Dangerous prototypes por el puerto serie, pero por SPI...

Chiva, no habias hecho algo asi para Arduino Serie <--> I2C?? Como ves el tema de hacerse un bridge Arduino SPI <--> I2C?

[edit]
Podrias usar el oscilador interno para no tener que poner cristal y que sea un "chip dedicado" http://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/

[/edit]

« Last Edit: January 12, 2011, 08:22:12 am by igorreal » Logged


Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El principal problema del SPI es que no hay un estándar y cada sensor manda las cosas de manera distinta. Unos mandan el LSB y luego el MSB y otros al revés, unos mandan el dato con flanco ascendente y otros con flanco descendente...
Pero poder se podría, como bien dices sería basarse en el Arduino Serie <--> I2C para pasar a SPI <--> I2C, pero si no tengo tiempo ni para el primero, no quiero ni pensar como avanzaría el segundo (aunque me lo dejo en la recámara ;D). Además por el tema de las diferencias de cada sensor habría que meter algún tipo de archivo de configuración, ya sea en un header, la eeprom o una sd para así configurar la interfaz SPI.
http://arduino.cc/en/Reference/SPI

Un saludo
« Last Edit: January 12, 2011, 08:40:35 am by chiva » Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno, lo decia por que si lo hiciese cstockmans a su medida..... smiley-wink

Como una opcion mas para tener dos I2C en su sistema,ya que solo necesitas un micro usando el resonador interno  para hacerte la pasarela, y te ayudas de toda la libreria Wire de Arduino para hacerlo rapido. Ya que Arduino tambien esta preparado para 8 MHz y no hay que modificar nada.

Sin mas, otra idea diferente.....

 smiley-grin
« Last Edit: January 12, 2011, 08:52:38 am by igorreal » Logged


0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Por cierto,"Minimal circuit", esta explicado en el Tutorial de la propia pagina Arduino

http://arduino.cc/en/Tutorial/ArduinoToBreadboard


 smiley-wink
Logged


M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno, lo del SPI tampoco lo había considerado, así que le echaré un ojo mañana a ver qué tal. Aunque por lo que comentais, puede suponer un problema ya que la idea cuando el proyecto avance no es conectar un sólo tipo de sensor, sino distintos tipos, con lo cual puede complicar bastante la cosa si como decís, cada sensor actúa de una manera. Me parece que finalmente me voy a decantar por el softI2C, aunque como digo miraré todas las opciones antes de decidirme.

Quote
Por cierto,"Minimal circuit", esta explicado en el Tutorial de la propia pagina Arduino
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

Gracias por el enlace smiley Está muy bien explicado, y visto así, hasta parece fácil  ;D

De neuvo gracias a todos por las ideas, me estais siendo de gran ayuda  smiley
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno, he dixo SPI por el tema de que lo hagas rápido, ya que el SPI no te hace de "cuello de botella" porque va a Mhz. También lo puedes comunicar con tu Arduino principal por comunicación serie....

Es decir, hacerte en un micro una pasarela Serie <->I2C ó SPI <->I2C.

Asi a priori, marcandome un triple, no me parece complicado.
http://www.ermicro.com/blog/?p=1239  y http://www.ermicro.com/blog/?p=744



Sin más, ahora a investigar y probar..... smiley-wink

« Last Edit: January 12, 2011, 06:45:04 pm by igorreal » Logged


M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Bueno, he dixo SPI por el tema de que lo hagas rápido, ya que el SPI no te hace de "cuello de botella" porque va a Mhz

Sip, es una buena alternativa. Mañana con las especificaciones de los sensores en mano compararé velocidades y veré en qué rango me tengo que mover. Siempre es bueno tener varias opciones, y esta desde luego es buena smiley

Quote
Sin más, ahora a investigar y probar..... smiley-wink

Pues sí, a ello me pongo  smiley-wink Ya os iré contando los avances, y qué método ha sido finalmente el elegido  smiley-grin
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

He buscado por curiosidad, y como era de esperar, ya existen integrados "bridge" de SPI a I2C.

The SC18IS600/601 acts as a bridge between a SPI interface and an I2C-bus. It allows a SPI master device to communicate with I2C-bus slave devices.
http://ics.nxp.com/support/boards/sc18is600/

Parece que lo venden en DigiKey.

No he buscado más, era solo para quitarme la inquietud...  smiley-wink
Para que lo tengas en la recamara....  ;D
« Last Edit: January 12, 2011, 07:13:16 pm by igorreal » Logged


M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pues mira, eso simplifica un poquito más las cosas smiley Le echaré un ojo a ver qué tal, y como tengo que pedir cosillas a esa página, a ver si lo incluyo en el pedido  8-)
Logged

M
Offline Offline
Newbie
*
Karma: 0
Posts: 22
Discovering Arduino...
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

He encontrado en este mismo foro una referencia a una librería llamada softi2cmaster, que ha creado un usuario para un proyecto. ¿La conoceis? Parece sencilla y fácil de usar. Por si os interesa os dejo el link smiley

http://todbot.com/blog/2010/09/25/softi2cmaster-add-i2c-to-any-arduino-pins/

Ando mirando todas las alternativas, y creo que terminaré decantándome por usar softi2c. No requiere hardware adicional, y será más fácil (creo smiley-razz) de compatibilizar con un mayor número de sensores. A ver si uso alguna librería existente, sino tocará picar más código ;D
Logged

Pages: [1] 2   Go Up
Jump to: