Soy bastante nuevo en la programación de AVR (avr-gcc).
Para reaccionar al pulsar el botón, estoy usando un ISR PCINT con la resistencia interna de pull-up habilitada así:
ISR(PCINT0_vect) {
if (bit_is_clear(PINB, PB0)) {
_delay_ms(40);
if (bit_is_clear(PINB, PB0)) {
// do something
}
}
}
Funciona bien, pero supongo que no es especialmente inteligente gastar 40 milisegundos en una ISR sólo para desbaratar un botón.
He leído el libro de Ganssle Contactos de rebote Parte 2 que es un poco demasiado avanzado para mi nivel de experiencia actual, y hay una afirmación de la que no estoy seguro:
El interruptor no rebotado debe conectarse a un pin de E/S programado, nunca a una interrupción.
Entonces, ¿mi planteamiento de conectar el botón a un PCINT ya es erróneo? Todavía no me he metido con los temporizadores, pero ¿debería usar algún tipo de interrupción temporizada para evaluar el estado del botón cada 1 ms o así en lugar de que el botón active una interrupción directamente?
Puedo vivir con que mi desbaratamiento no sea muy inteligente por ahora, pero al menos quiero conseguir lo básico para reaccionar al pulsar un botón.