¿Puedo enlazar dos pines GPIO en un Arduino/ATmega328?

Estoy jugando con algunos sensores codificadores de rueda y un Arduino. El sensor necesita un poco de rebote, por lo que me hizo preguntarme cómo el núcleo del microcontrolador está viendo la entrada. Es decir, ¿cómo se ve la señal de entrada después de pasar por el disparador Schmitt y el sincronizador en la ruta de entrada GPIO?

¿Hay alguna forma de enlazar dos pines GPIO directamente, uno como entrada y el otro como salida para poder ver cómo se ve la señal en el otro extremo del sincronizador?

Tal como lo veo, si pruebo una lectura/escritura en el software, perderé información si el programa tiene más de una instrucción. ¿Verdadero?

El sincronizador está en la ruta de entrada. ¿Qué estaría haciendo la salida?
Quiero conectar la salida del pad GPIO que configuré como entrada a otro GPIO configurado como salida :) ¡Quiero ver qué hace la ruta de entrada con mi señal desordenada!
Cuando dice "cablear", ¿quiere decir realizar un loopback interno?
Creo que eso es lo que quiere decir. Y @op, eso no es posible si no es a través del software, perdiendo algunos ciclos de reloj. Si desea saber cómo se ve su señal dentro del micro, debe encontrar todo lo que necesita en la hoja de datos.
Sí, un loopback interno es lo que estoy buscando. Vladimir, si vuelves a escribir tu comentario como respuesta, lo aceptaré... Gracias a ambos.
No, no puedes hacer eso. Pero el rebote se puede lograr fácilmente simplemente ignorando una entrada durante un breve período de tiempo después de ver una transición de interés. La eliminación de rebotes es distinta del filtrado de ruido, ya que los rebotes siempre siguen una transición real; si realmente tiene ruido/fallas en las que necesita ignorar pulsos excesivamente cortos (incluso el primero), ese es un problema diferente.
Aunque anteriormente usé el antirrebote de software solo en un codificador, recomendaría un poco de antirrebote de hardware (filtro RC) además porque las agujas de voltaje en el rango de nanosegundos pueden ocurrir en señales de rebote que pueden confundir cualquier circuito IO común en un uC.
¿Has echado un vistazo al código de ejemplo de rebote de Arduino? Podría ser un lugar útil para comenzar. arduino.cc/en/Tutorial/Antirrebote

Respuestas (2)

La idea de eliminar el rebote no es buena si necesita usar un codificador de cuadratura. Incluso el máximo. la frecuencia teórica (contada desde las RPM máximas) es baja, puede ver un parpadeo de alta frecuencia en un canal que es más uno, menos uno, etc. Cuando pierde algún borde (por ejemplo, manejado por una interrupción externa), ve un cambio. Si necesita contar pulsos hacia arriba o hacia abajo, puede reutilizar un reloj externo para dos contadores AVR. MCU admite algunos rebotes simples y el ancho de banda es lo suficientemente alto. También carga MCU. Descubrí que evaluar las señales AB en cuadratura en el código es inútil, es decir, no es lo suficientemente confiable para sistemas de alta precisión y, en cambio, usa contadores de cuadratura LSI externos.

Algunos problemas relacionados con la conexión de dos puertos están en el subproceso de protección contra sobrecorriente del pin AVR ATMega I/O .

Al eliminar el rebote, generalmente tiene dos opciones: una corrección de hardware o una corrección de software. Dependiendo de la aplicación, cualquiera podría ser preferible.

Cuantas menos entradas deban eliminarse, más preferible será una solución de software, especialmente en microcontroladores de baja potencia. Una solución de software sería usar interrupciones que se ejecutan cada vez que cambia el estado de entrada y luego hacer que algún tipo de variable realice un seguimiento de cuándo ocurrió el último cambio de estado o 'rebote'. Si está en el milisegundo de un solo dígito, entonces probablemente sea un rebote y querrá rechazar ese valor. Mucho será prueba y error para ver cuál es un tiempo aceptable entre pulsaciones, pero 100 ms es un buen punto de partida porque es muy poco probable que un humano pueda pulsar un botón más rápido que 10 veces por segundo y es aún menos probable que ese fuera su intención, y es casi imposible que un botón rebote pueda ocurrir en más de 100 ms a menos que no funcione.

En cuanto a una corrección de hardware, esto puede aumentar la cantidad de elementos de circuito que su placa tendrá que usar, por lo que existe ese inconveniente. Pero si está limitado por la potencia del microcontrolador que está utilizando y necesita muchos interruptores antirrebote, podría ser la única opción factible. Pero si puede sintonizar y soldar el circuito RC correcto a su entrada, puede tener un circuito 'suavizado' que rechazará cambios rápidos en su señal de entrada antes de que se envíe a la entrada del microcontrolador.Circuito antirrebote RC simple