Paso 5: La interrupción de desbordamiento de contador de tiempo
Aquí hablamos sobre el desbordamiento del temporizador 1 y las interrupciones de dos botones.
Como se explicó anteriormente, la función ISR(TIM1_OVF_vect) se ejecuta cuando se produce el desbordamiento del temporizador 1.
Dentro de esta función tenemos dos partes:
- La primera parte se utiliza para actualizar la posición de la bola según el ballUpdatePositionCounter.
- La segunda parte se utiliza para conducir la matriz Charlieplexing según el matrixState:
Para cada fila y columna, primero comprobamos si el bit correspondiente de la matrixState es 1 o 0.
Después de cambiar el estado de los pines del microcontrolador a salida y alta o baja según el connectionMatrix.
Que esperar un poco microsegundos a permisos para iluminar los LEDs, y ahora nos apague estos LEDs poniendo los pines correspondientes a la entrada.
De lo contrario, si el bit de la matrixState es 0, ponemos los pasadores correspondientes de la connectionMatrix a la entrada.
Al principio y al final de esta función, en orden, desactivar y activar la interrupción global porque, puesto que el desbordamiento del temporizador es demasiado rápido, necesitamos hacer una pausa mientras que hace todo el código en la función.
Las otras dos funciones, ISR(PCINT0_vect) y ISR(INT0_vect), realmente no hacen nada. Simplemente se declara con la interrupción de los dos botones para el microcontrolador.
Si desea más información sobre la interrupción de desbordamiento del temporizador, pásate por mi post aquí.