¿Cómo puedo devolver un pin digital Arduino al estado flotante?

Estoy tratando de configurar una función de reinicio programado para un módulo BlueTooth de 3,3 V que se reinicia cuando su pin de reinicio se pulsa BAJO durante un período corto de tiempo. Hay una resistencia pull-up de 47K en el módulo BT que mantiene su pin de reinicio en 3.3V hasta que el pin de reinicio se conecta a tierra o se envía BAJO. Por lo tanto, no hay problema con el ruido aleatorio debido a la resistencia pull-up de BT. ¿Puedo definir el pin Arduino como entrada y dejarlo flotando, luego escribir digitalmente en BAJO para reiniciar, luego devolver el pin a flotante para que el módulo BT pueda continuar después del reinicio? No puedo escribir digitalmente ALTO porque los 5V del Arduino destruirán el módulo BT de 3.3V.

Esto se puede hacer configurando el pin entre una salida y una entrada sin pullup, lo que se hace configurando/borrando el bit de registro de dirección mientras se deja el bit de registro de datos de salida bajo. Pero debe aceptar que cualquier error o carga de un programa que use el pin de manera diferente potencialmente, en sus palabras, "destruirá el módulo BT de 3.3V". Usar una salida positiva para conducir la puerta de un NFET que conectaría a tierra la señal podría eliminar eso riesgo.
¿Está insinuando que se requiere manipulación de bits, o los comandos pinMode y digitalWrite lo harán por mí? Por ejemplo: ¿Funcionaría esto? - pinMode INPUT // por defecto será flotante - pinMode OUTPUT // permite una escritura digital BAJA a tierra pin de reinicio de BT - digitalWrite BAJA // reinicia el módulo BT - retarda 10 ms // déjalo bajo por un corto período de tiempo - pinMode INPUT // espero que esto lo devuelva al estado flotante, pero no pude confirmarlo en ninguna parte...
Es muy posible que algo así funcione, pero es difícil saberlo: si desea saber exactamente qué sucede, deberá auditar el código de las funciones de Arduino o escribir directamente en los registros AVR PORTx y DDRx.
¡Creo que conectaré el circuito en una placa de prueba y mediré los voltajes en cada instrucción! Si cargo el pin con una resistencia de 1K, debería poder confirmar su comportamiento. Parece el camino de menor resistencia. ¡Me temo que sus sugerencias están muy por encima de mi cabeza! También intentaré descifrar su uso sugerido de un NFET, ya que soy consciente de que un error de programación o un mal uso del pin Arduino dañaría el módulo BT. ¡Gracias por tu ayuda Cris! Si encuentro la respuesta a través del tablero, ¡actualizaré esta publicación!
Resulta que alguien ya respondió esta pregunta: deje el pin como entrada, excepto cuando tire del pin hacia abajo. por ejemplo pinMode(X, ENTRADA); // Esto deja el pin en un estado flotante.... digitalWrite(X, LOW); // El pin ahora está definido como BAJO pero sigue flotando en modo INPUT pinMode(X, OUTPUT); // Cambia el pin a baja resistencia LOW delay(100); pinMode(X, ENTRADA); // Regrese el pin al estado flotante O como sugirió, use un NFET para cambiarlo. ¡Lo haré!

Respuestas (2)

¿Ha considerado usar un circuito convertidor de nivel lógico bidireccional de 5V/3V3 (generalmente solo un MOSFET de canal N elegido apropiadamente con un par de resistencias pull-up)? Por ejemplo, busque "cambiador de nivel lógico" en SparkFun.com (p. ej., SKU# BOB-12009). El diseño básico se muestra a continuación en la Figura 1.

esquemático

simular este circuito : esquema creado con CircuitLab

Figura 1.

Advertencia: el voltaje BAJO de salida de la lógica de 5 V se alimenta a través del MOSFET sin modificar y se aplica directamente al pin de entrada lógica de 3,3 V. Tenga en cuenta que V O L para la lógica CMOS de 5 V es de 0,9 V, mientras que V I L para la lógica 3V3 es 0.8V. Sin embargo, en muchos casos, el voltaje de salida lógico BAJO del lado lógico de 5 V está muy por debajo de 0,8 V, por lo que este circuito convertidor de nivel lógico funciona bien en esos casos.

Definitivamente puede hacer eso, pero debería considerar usar un diodo, es el cambiador de nivel económico para esta situación, además lo libera de las preocupaciones por errores de código.

¿Cómo sugieres conectar un diodo?
agrega un diodo del pull-up externo para la lógica 3v3 a un pin digital en la lógica de 5v, por lo que solo puede drenar la corriente de 3v3 a gnd, nunca suministrarle 5v.
Lo siento, pero tendrás que ser más específico porque no puedo visualizar lo que has descrito. ¡Gracias!