Soy parte de un grupo de investigación que está desarrollando un concepto para una PCB para un equipo externo. Este equipo puede ser controlado con un microcontrolador. Se comunica con mi microcontrolador a través de I2C, utilizando pines SDA y SCL. Sin embargo, utiliza otro pin; lo llaman un "pin de interrupción" y les permite a los esclavos enviar comandos al maestro. La pieza externa del equipo indica en su descripción de interfaz que este pin de interrupción debe controlarse mediante un pin de drenaje abierto en un microcontrolador. Lo suficientemente justo.
Nuestro microcontrolador es un ATMega328p con el cargador de arranque Arduino. En el prototipado he abusado del modo Pin de Arduino para emular el drenaje abierto:
void setup ()
{
digitalWrite (pin, LOW) ;
}
void loop ()
{
...
pinMode (pin, OUTPUT) ; // drive pin low
...
pinMode (pin, INPUT) ; // hi-Z state
}
Pero como probablemente sepa, esto produce formas de onda impares cuando las señales se verifican con un osciloscopio . En el hilo vinculado, el tipo que se encontró con el mismo problema agregó un pullup externo de 10k al pin y resolvió sus formas de onda. Parecía funcionar correctamente.
Como ninguno de nosotros tiene mucho conocimiento sobre este tema específico; ¿Estamos en lo cierto al suponer que si una pieza de equipo externo requiere el control mediante un pin de drenaje abierto en "algún microcontrolador", esto se puede lograr al cambiar INPUT / OUTPUT en un ATMega328p junto con una resistencia pullup de 10k agregada al pin?