¿Puedo hacer un bucle de dos pines GPIO en un Arduino / ATmega328?

1

Estoy jugando con algunos sensores de codificador de rueda y un Arduino. El sensor necesita un poco de rebote, por lo que me pregunto 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 de Schmitt y el sincronizador en la ruta de entrada de GPIO?

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

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

    
pregunta Marty

2 respuestas

2

La idea de rebote no es buena si necesitas usar un codificador de cuadratura. Incluso el máximo. la frecuencia teórica (contada a partir de las RPM máximas) es baja, puede ver 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 cambio. Si necesita contar hacia arriba / abajo los pulsos, puede reutilizar un reloj externo para dos contadores AVR. MCU soporta algunos debouncing simples y el ancho de banda es suficientemente alto. Se carga MCU también. Descubrí que la evaluación de las señales de cuadratura A-B en el código es inútil, es decir, no es lo suficientemente confiable para sistemas de alta precisión y más bien para el uso de contadores de cuadratura externos LSI.

Algunos problemas relacionados con la conexión de dos puertos se encuentran en AVR ATMega I / O pin Protección contra sobrecorriente hilo.

    
respondido por el TMa
1

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

Cuantas menos entradas se deban anular, más preferible será una solución de software, especialmente en microcontroladores de baja potencia. Una solución de software sería utilizar 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 dígito, entonces es probable que sea un rebote, y usted querría rechazar ese valor. Mucho será una prueba y error para ver cuál es un tiempo aceptable entre prensas, pero 100 ms es un buen punto de partida porque es muy improbable que un humano pueda presionar un botón más de 10 veces por segundo y es incluso menos probable que ese sea su punto de partida. intención, y es casi imposible que un rebote de un botón pueda ocurrir en más de 100 ms a menos que sea disfuncional.

En cuanto a una solución de hardware, esto puede aumentar la cantidad de elementos del circuito que su placa tendrá que usar, por lo que hay un inconveniente. Pero si está limitado por el poder del microcontrolador que está usando y necesita muchos conmutadores con rebajas, podría ser la única opción viable. Pero si puede administrar y sintonizar el circuito RC correcto a su entrada, puede tener un circuito de "suavizado" que rechazará los cambios rápidos en su señal de entrada antes de enviarla a la entrada del microcontrolador.

    
respondido por el Mark Haus

Lea otras preguntas en las etiquetas