Paso 11: ¿Cómo lo deshago del botón? Versión 3
Hay numerosas maneras que podríamos proceder. En primer lugar podríamos agregar hardware para deshacerse del botón. Por ejemplo podemos tratar de poner un transistor en el circuito en la línea de salida de la opresión de una tecla para que se tome un chorrito pequeño de la corriente de la salida y enviar un pulso de 5V al pin de interrupción PD2.
Sin embargo, probablemente sería demasiado ruido al menos y en el peor de los casos no permite suficiente tiempo para que una pulsación precisa lectura puesto que la tensión de salida del teclado no tiene tiempo para stabilze antes de la lectura de ADC es capturado.
Así que llegaríamos con una solución de software. Lo que nos gustaría hacer es añadir una interrupción sobre el pin PD2 y escribir un manejador de interrupción para él que se llama una lectura única del perno del teclado. En otras palabras, deshacerse de la autotrigger interrupción del ADC y añadir una interrupción externa que llama a la ADC en su interior. Así la señal para leer al ADC llega después de la señal PD2 ya ha ocurrido y esto podría dar cosas tiempo suficiente para estabilizar a un voltaje exacto antes el pin PC0 es leído y convertido. Todavía tenemos una terminación ADC interrumpir que salidas el resultado a la pantalla del analizador al final.
¿Tiene sentido? Bien vamos a hacerlo...
Echa un vistazo en el nuevo código adjuntado.
Ver los siguientes cambios:
- Hemos añadido un rjmp en dirección .org 0x0002 para manejar la interrupción externa INT0
- Hemos cambiado el registro EIMSK para indicar que quiere interrumpir en el pasador de INT0
- Hemos cambiado el ADATE pin en el registro ADCSRA para desactivar autotriggering
- Nos libramos de la configuración de ADCSRB ya que son irrelevantes cuando ADATE está apagado
- Ya no tenemos que restablecer la bandera de disparo externo ya que la rutina de interrupción INT0 hace automáticamente cuando termina, ya no tenemos una rutina de interrupción, sólo activa el ADC de una señal en ese pin, así que tuvimos que borrar esa bandera con la mano.
Ahora en el controlador de interrupción que simplemente llamamos una conversión individual de la ADC.
Ejercicio 5: ejecutar esta versión y ver qué pasa.