El sensor de temperatura I2C y un escudo wifi Arduino no funcionan juntos

Estoy usando un arduino wifi shield y un TMP102 con un arduino uno rev2.

Con placas anteriores a rev3, debe agregar un puente de 3.3V al pin IOREF para el escudo wifi, consulte aquí: http://arduino.cc/en/Guide/ArduinoWiFiShield

Pero cuando hago eso, el sensor de temperatura solo leería -0.06 centígrados como si su dirección fuera diferente. (Está usando i2c, su ADD0 está conectado a tierra, como aquí: http://bildr.org/2011/01/tmp102-arduino/ )

Sin el puente, el sensor funciona bien, pero el wifi necesita el puente para iniciarse.

¿Qué debo hacer para que funcionen juntos?

Respuestas (3)

Vaya a TLDR a continuación para obtener una respuesta más corta:

La línea de 3.3v de Arduino Uno Rev2 se alimenta desde el usb FT232R al regulador interno 3v3 del chip serial. El consumo máximo de esto es inferior a 50 mA. Bastante patético en realidad, razón por la cual hubo un cambio a un regulador dedicado en Rev3.

La placa Wifi no se conecta al pin 3v3. Normalmente, funciona con 5v, tiene su propio regulador 3v3 y utiliza un chip de traducción de nivel TI TXB0108. Toma dos voltajes arbitrarios (con un cierto rango) y permite que la traducción de nivel se comunique entre los dos. El chip principal de la placa Wifi es un dispositivo 3v3. También lo son las tarjetas SD.

Así que aquí está el problema. Notación descuidada, idiota e inconsistente de Arduino.

El Arduino Rev3 no agrega el pin IORef que figura en el esquema oficial. Como se señaló en línea, al agregar el IORef, dijeron que es para una expansión futura. Las placas de 5v, como las predeterminadas basadas en Arduino UNO o AVR, ioref están vinculadas a 5v. Para los 32 bits más nuevos, Due funciona a 3.3v. Su IORef está vinculado a 3.3v.

La revisión 3 de la placa tiene las siguientes características nuevas: Pinout 1.0: pines SDA y SCL agregados que están cerca del pin AREF y otros dos pines nuevos colocados cerca del pin RESET, el IOREF que permite que los escudos se adapten al voltaje provisto del tablero En el futuro, los escudos serán compatibles tanto con la placa que utiliza el AVR, que funcionan con 5V, como con Arduino Due que funcionan con 3,3V.

El esquema de la placa Wifi muestra que el pin IORef va al pin 19 del TXB0108, VccB (el lado que se comunica con el Arduino. VccA es para el chip wifi). También muestra... que el puente está atado a 5v.

ingrese la descripción de la imagen aquí

Ahora, ¿por qué le dirían que salte ioref a 3.3v, o use el puente, cuando UNO rev2 y rev1 son dispositivos IO de 5v? ¿O cuando el puente vincula ioref a 5v y saben que eso causará problemas? Vaya figura. Realmente no debería haber una razón. Se supone que todo en esa placa debe estar alimentado y comunicado externamente a 5v, por lo que, a menos que tenga una placa modificada de 3.3v o Due o algo así, no debería hacerlo. Una placa REV2 con ioref vinculado a 3.3v alimentará la mitad del TXB0108 y una tapa, junto con su TMP102 y sus resistencias pull up

Pero todavía hay un problema. El Arduino, el TXB0108 y el TMP102, incluso con el consumo total de corriente, deberían estar a menos de 50 mA del FTD232R. El TXB0108 y el TMP102 están por debajo de 1 mA mientras están completamente activos. Algo está causando que la línea 3v3 baje. Podría ser que el esquema de las placas Wifi tampoco sea correcto, el ioref también podría estar vinculado a otra cosa. Tal vez una mala placa. O tienes un cortocircuito que hace que se caiga. Tal vez el capacitor en la placa rev2, cerca del cabezal de alimentación donde estaría ioref, se está cortocircuitando contra el pin ioref de las placas wifi. Dado que tiene un puente de 3.3v, esencialmente está cortando o contaminando la línea de 3.3v.

ingrese la descripción de la imagen aquí


TLDR; Primero, verifique la línea 3v3 cuando esté puenteada. No debe ser inferior a 3,3 v mientras todo está encendido. Asegúrese de no tener pantalones cortos ni nada más (excepto la placa wifi y la placa tmp102) conectados. (Cualquier cosa más requeriría un analizador lógico u osciloscopio, para ver si hay corrupción en las líneas de datos i2c). Además, asegúrese de que el pin ioref no esté solucionando el capacitor debajo de él.

Luego, debido a la información anterior, si (y en este punto es un gran IF, no confío en la documentación de Arduino) el ioref está en la placa de acuerdo con el esquema, simplemente conéctelo a 5v, ya sea a través del puente en la parte inferior , o usando un cable desde el 5v al encabezado ioref. Dado el chip de traducción de nivel, así es como se pretende que funcione, y debería funcionar.

@Passersby: esta es una respuesta excelente, muy bien investigada, pero el bit "simplemente conéctelo a 5v" me preocupa ... No "si todo lo demás falla, podría conectarlo a 5v aunque si los esquemas son correctos y no había razón para conectarlo a 3v3v en primer lugar"? Supongo que tendría más firmas "BAJO SU PROPIO RIESGO" para el OP...
@angelatlarge Digo eso, porque así es como se supone que funciona el pin ioref, y así es como funciona para el Uno rev3, que tiene ioref vinculado a 5v.

Es posible que el escudo WiFi esté consumiendo demasiada energía del regulador de 3.3V. Una vez que salta el pin IOREF, el escudo WiFi se enciende, el voltaje en el riel de 3.3 V cae y el sensor de temperatura entra en un estado de apagón o apagado. Intente medir el voltaje en el riel de 3.3V con el pin IOREF saltado. Si está por debajo de 3.3V, este podría ser su problema. Otra posibilidad es alimentar el sensor de temperatura con una fuente de alimentación separada y ver si eso lo resuelve

Estaba pensando eso, pero según sus documentos, los 3.3V se usan como voltaje de referencia. Esto implicaría que la impedancia de entrada del escudo WiFi en esa línea de 3.3 V debería ser alta, sin causar ninguna caída de voltaje, ¿verdad?
@angelatlarge hay problemas con la documentación sobre los esquemas de ardiuno. Y probablemente un cortocircuito. Mira mi respuesta.

Tuve el mismo problema con el protector wifi y un sensor UV ML8511 (lecturas inconsistentes) y noté que donde se suponía que era 3.3VI obtenía 4.85V después de conectar el IoRef al pin de 3.3V.

Después de leer esta publicación, me di cuenta de que la solución era puentear los 5V con el IoREF y no los 3.3V.

Lo hice y ahora el sistema funciona bien, las lecturas que obtengo están de acuerdo con lo que miden otros dispositivos y el problema está resuelto.

Así que supongo que la documentación de Arduino estaba equivocada cuando decía saltar el cable 3.3 a IoREF.