Interrupción externa en atmega328p

0

Quiero conectar 4 botones pulsadores usando interrupciones en todos ellos, con mi atmega328p, pero cuando leí la hoja de datos, encontré que el atmega328p tenía solo 2 interrupciones externas (INT0 e INT1), ¿hay alguna solución?

    
pregunta Yassine Kardid

2 respuestas

2

Lo obvio: conecte dos botones a una interrupción y use un pin y código diferentes para averiguar cuál de ellos se presionó realmente en el controlador de interrupciones.

Es un procedimiento bastante estándar en el diseño de hardware.

También, tenga en cuenta que los humanos son increíblemente lentos en comparación con los microcontroladores. Por lo general, es totalmente innecesario usar una línea de interrupción para algo como un botón, a menos que sea para despertarse de los modos de sueño extremadamente profundo (que el ATMega 328 no tiene, que yo sepa).

Por lo tanto, a menos que realmente necesite interrupciones de alta velocidad, generalmente no es conveniente usar pines de interrupción para los botones IO - botones anillo , y eso significa que presionar el botón una vez activará un todo Torrente de interrupciones, de las cuales solo quieres la primera.

En su lugar, simplemente haga un bucle con su código y, en ocasiones, verifique sus pines IO.

    
respondido por el Marcus Müller
1

Todos los pines pueden activar interrupciones cuando se cambia el estado (alto a bajo o bajo a alto). Solo se pueden configurar INT0 e INT1 para activar interrupciones cuando hay un nivel bajo en los pines (esto no es lo mismo que cambiar de estado), y se disparará continuamente hasta que la entrada ya no sea baja. INT0 e INT1 también se pueden configurar para que se activen en cualquier cambio, o solo con bordes ascendentes o descendentes.

Los pines se agrupan en tres vectores de interrupción de cambio de pin, por lo que una de esas interrupciones se activará si algún pin en ese vector cambia de estado y tiene las interrupciones habilitadas.

    
respondido por el uhours

Lea otras preguntas en las etiquetas