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.
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?
pinMode(pin,INPUT_PULLUP)
para habilitarlo.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Ω.
mikeY
JYelton
dext0rb
JYelton
Rdo