deshabilitando pullups internos en D0 && D1 en AT90USB1286

0

¿Alguien puede simplemente verificar rápidamente para mí que esto:

cbi(PORTD, 0);
cbi(PORTD, 1);

deshabilitará las funciones internas en el AT90USB1286? Estoy tratando de evitar dañar algunos componentes de 3.3V que estoy comunicando w / over i2c. Gracias de antemano.

    
pregunta Joshua Noble

1 respuesta

0

En primer lugar, las macros cbi / sbi (PORT, PIN) están en desuso. Yo aconsejo usar

PORT &= ~(1<<PIN);   //Clear
PORT |= (1<<PIN);    //Set

La hoja de datos AT90USB128 indica que:

  

Si PORTxn está escrito como lógico cuando el pin está configurado como un pin de entrada, la resistencia pull-up es   activado. Para apagar el resistor pull-up, se debe escribir PORTxn con lógica cero o el pin debe   Se configurará como un pin de salida. Los pines del puerto están en triple estado cuando la condición de reinicio se activa.   incluso si no hay relojes en ejecución.

Por lo tanto, si los pines están configurados como entradas, su comando deshabilitará los pull-ups internos.

Habiendo dicho eso, su configuración probablemente no funcionará a menos que sus dispositivos de 3.3V sean tolerantes a 5V. Recomendaría usar un simple cambio de nivel bidireccional, que se explica en la popular nota de NXP / Philips encontrada aquí . Solo requiere un FET N-ch y dos resistencias de pull-up por línea de bus.

Alternativamente, si tiene acceso a la fuente de alimentación de 3.3V, puede usar esto para alimentar la MCU cortando la conexión entre VBUS y UVCC / AVCC / VCC (hoja de datos Fig. 21-5).

    
respondido por el Johan Sundqvist

Lea otras preguntas en las etiquetas