En primer lugar, las conexiones que en principio hay que hacer entre el Mindstorm y Arduino son muy sencillas:
- Pines 2 y 3 del NXT (Rojo y negro) (tierra) --> Arduino GND
- Pin 4 del NXT (alimentacion) (verde) --> Arduino 5V
- Pin 5 del NXT (Amarillo) (SCL) --> Arduino SCL
- Pin 4 del NXT (Azul) (SDA) --> Arduino SDA
Y tanto la señal SDA como SCL están conectas a la línea de alimentación a través de unas resistencias de Pull-up de 82 K, así dichas líneas tendrán la tensión adecuada para que las detecte Arduino. Hasta aquí todo bien, salvo por un detalle... no funciona.
Tras pasar varios días repasando el código (que ya pondré en otra entrada del blog), las conexiones, las resistencias, etc. descubrí el motivo por el que no funcionaba: la placa que estoy usando tiene ya integradas unas resistencias de 10 K conectadas a las señales SDA y SCL. Estas resistencias hacen imposible poder conseguir el valor que necesito de resistencias de Pull-up.
Si la placa fuera una Arduino Mega (el modelo anterior) la solución es "sencilla", y consiste en eliminar las resistencias. Aquí tenéis una explicación de ello: Enlace
¿Por qué en nuestro caso no es posible? Como veis en la imagen inferior, las resistencias que tiene nuestra placa están dentro de un encapsulado (el que pone 103) que, de acuerdo con el esquemático, engloba 4 resistencias. Una de ellas está conectada al pulsador de reset, lo que quiere decir que si eliminamos este encapsulado, nuestra placa no llegaría a encenderse (ya que el reset estaría siempre estaría a nivel bajo, y por tanto funcionando).
De momento no he logrado encontrar solución a esto, así que cualquier sugerencia es bienvenida, pero me parece que poco se puede hacer salvo probar con otra modelo de Arduino.
Una alternativa que se ha barajado, ha sido la de usar SoftI2C, opción que ya comenté en alguna ocasión. Básicamente consiste en usar cualquier entrada analógica de Arduino para emular el protocolo I2C, y hacer toda la gestión por software. Pero esto tiene 2 problemas: las entradas analógicas también están conectadas a una resistencia interna, aunque algo más grande (20 K), y las librerías de softI2C sólo están creadas para que Arduino funcione como maestro en la comunicación, y nosotros lo necesitamos como esclavo del robot.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.