GPIO: General Purpose Input Output, Entradas y Salidas de Propósito General, estos son los pines del uC que se usan para detectar o generar cambios lógicos.
Algo que se encuentra presente en muchos circuitos son elementos electrónicos de características mecánicas, un un claro ejemplo son los pulsadores, la desventaja de estos elementos mecánicos es su falta de precisión a la hora de realizar su trabajo y más aún cuando se tiene que combinar con elementos digitales de alta precisión.
Debido a que los pulsadores son comúnmente usados en los circuitos hay que estudiar uno de los principales defectos de estos “El efecto rebote” que consiste en que cada vez que se presiona un pulsador ocurren varios cambios de nivel alto a bajo (como en la imagen) o de bajo a alto durante milésimas de segundo, esto no lo percibimos nosotros pero puede ser percibido por el uC.
El uC al tener alta velocidad de lectura de datos puede entender esto como si se hubiera presionado el pulsador repetidas ocasiones y realice la operación programada múltiples veces, por eso que durante este tiempo de inestabilidad es necesario programar al uC para que no realice ninguna operación. Por lo general este solo dura aproximadamente 300 ms y se puede evitar realizando un retardo.
El ATmega16 cuenta con 4 puertos de entrada/salida (A,B,C,D), estos puertos se controlan mediante los siguientes registros:
DDRx: En este registro es el encargado de configurar al puerto como entrada (colocando un 0) o como salida (colocando un 1).
PORTx: Si el puerto fue configurado como salida es en este registro donde se colocan los valores a enviar.
PINx: Si el puerto fue configurado como entrada es por este registro que se lee el valor del puerto.
Ejemplo: