¿Una lectura de 4.8v en un pin suelto 0?

Tengo una configuración que exige que use todas mis E/S en mi placa Arduino Uno R3, incluidos los pines seriales 0 y 1.

Entonces, inicialicé esos pines como entradas, pero cuando hago una lectura en el pin 0, se lee alto aunque no está conectado a nada. Mi multímetro me dice 4.8V constantemente en el pin todo el tiempo.

Todos mis otros pines no he inicializado ninguna comunicación en serie, y he intentado ejecutar la placa con una batería (por lo que no hay conexión a la computadora).

Tengo Waveshield de Adafruit conectado, pero en lo que a mí respecta, no debería interferir con el pin 0 de ninguna manera.

He hecho un dibujo sencillo que muestra el concepto de lo que estoy haciendo. Es todo lo que hay, solo el tamaño de 12 botones y 12 lámparas. Para obtener suficientes E/S, tuve que implementar un expansor de E/S (mcp23016) en el bus I2C, pero es el mismo principio que en el dibujo.

Entonces, cuando tengo todo conectado, todo parece estar bien, excepto el pin 0 en la placa Arduino. Todas las demás lecturas (tanto en Arduino como en el expansor) funcionan bien. Lo raro es que cuando mido voltaje en el pin 0 me da 4.8V; en el pin 1 me da 1V y en los otros pines me da 0V. Entonces, algo es obviamente diferente de los pines seriales.

¿Hay subidas o bajadas internas en ellos o podrían ser las muchas resistencias de 10k que uso? ¿Necesitan ser más pequeños o más grandes tal vez?

Tal vez sea solo una mala soldadura, pero he estado revisando durante horas y horas y realmente no puedo ver ningún problema en la parte del hardware.

esquema conceptual

Te van a gritar por ese dibujo. Un esquema adecuado recorrería un largo camino.
*grito* <- ese soy yo gritando sobre el dibujo.
J-"YELL"-ton, ¿amirita?
@dex Exactamente. :)
Dibujo épico (¡grito!).

Respuestas (2)

Si está configurado como un pin de entrada, entonces tratar de medir el voltaje en él es en gran medida improductivo a menos que, por supuesto, crea que todavía puede estar configurado como una salida; entonces necesitaría conectarle una carga para ver si el voltaje es la producción es "real" o simplemente una corriente de fuga de una entrada desconectada que hace que un voltímetro de alta impedancia muestre algo así como 4.8V.

Intente conectar una resistencia de 1k a tierra desde este pin: ¿todavía muestra la lógica 1 o tal vez ahora está en la lógica 0?

Algunos pines IO tendrán por defecto (en algunos MCU) un pull-up incorporado de alta resistencia del orden de 100k y esto también puede estar sucediendo. Esto (en algunas MCU) se puede programar para que (a) no esté allí en absoluto, (b) pull-up o (c) pull-down. Creo que algunas MCU pueden programar una resistencia más baja o una resistencia más alta. ¿Quizás esto también está pasando?

El arduino admite un pull-up interno en las entradas, pero no está habilitado de forma predeterminada. Úselo pinMode(pin,INPUT_PULLUP)para habilitarlo.
+1 para "en gran medida improductivo". Habría usado una terminología más fuerte :-)

Los pines seriales en el microcontrolador principal de Arduino (ATMega328p), están conectados al IC serial (un FTDI FT232 USB a IC serial, o en placas más nuevas, un ATMega16U ejecutando programación usb a serial) a través de dos resistencias. Estas resistencias se colocan entre el ATMega328p y el Serial IC, pero no entre el ATMega328p y el encabezado Pin 0 y Pin 1. Esto permite que un dispositivo en serie conectado a través del encabezado de Arduino (típicamente un escudo) anule el IC en serie.

En su caso, lo que esto significa es que, a menos que haya una señal que active el pin High o Low, el puerto serie del Serial IC controlará los pines en su lugar. Y si la señal tiene una resistencia más débil que 1kΩ, el Serial IC aún tendrá prioridad sobre esa señal.

Sugiero usar el Pin 0 como salida en su lugar.

Consulte el esquema Uno Rev 3, en la parte inferior, para RN4A y RN4B, red de resistencias de 1 kΩ.