Los pines de puerto de los microcontroladores de la serie AVR no tienen un modo de drenaje abierto como tal, como ocurre con muchos otros fabricantes (PIC, Freescale, etc.). Solo tienen un DDxn (registro de dirección de datos, entrada o salida), puerto en el registro (PINxn) y salida de puerto (PORTxn).
Para estos otros micros, puede configurar un pin de salida para que tenga un drenaje abierto y luego cambiarlo a cero o alta impedancia simplemente escribiendo un 0 o 1 en el registro PORT.
Puede simular este comportamiento para los AVR, haciendo lo siguiente:
Para reducir la corriente, configure el pin de dirección de datos DDxn en 1 (salida). Luego, establezca el bit en el registro de salida PORTxn a 0.
Para cambiar esto a un drenaje abierto de alta impedancia, configure el pin de dirección de datos DDxn a 0 (entrada), mientras deja el bit 0 de PORTxn.
Entonces, en lugar de alternar el pin PORT, está alternando el pin de dirección de los datos.
Aquí hay una tabla de hoja de datos para el ATmega328 :
Tenga en cuenta que en esta configuración (DDxn = 0, PORTxn = 0), no hay una resistencia de pull-up interna. Si desea uno, entonces puede establecer el bit PORTxn en 1 en lugar de 0, asumiendo que las activaciones están habilitadas para el puerto en el registro PUD.