Hay dos formas de tirar de los pines en Arduino – usando una resistencia interna y externa. Me pregunto cuándo debería usar una resistencia externa en lugar de INPUT_PULLUP.
Comentarios
- Según mi experiencia, la única diferencia es " pullup / pulldown externo es más fácil de reemplazar " y tal vez también " con solo mirar el circuito se puede ver el externo resistor para que sea ' más fácil de entender el diseño después de unos meses "
Respuesta
Puede usar la resistencia interna o externa en una aplicación normal.
Cada método tiene sus propias ventajas:
Resistencia interna
- Ventajas: flexible para cambiar cambiando el código
- Ventajas: Reducir el tamaño de la PCB
- Ventajas: Reducir el costo (muy pequeño)
- Contras: Puede hacer que MCU se caliente
Resistencia externa
- Pr os: reduce el calor para MCU
- Contras: no es fácil de reemplazar cuando está integrado en PCB
- Contras: aumenta el tamaño de PCB
Además , Las resistencias pull-up y pull-down no solo se utilizan para el puerto INPUT sino también para el puerto OUTPUT. En el caso del puerto OUTPUT. La resistencia externa tiene otra ventaja: flexibilidad para conectar dispositivos con diferentes voltajes de E / S. Por ejemplo, en hardware I2C vea I2C en el nivel de hardware .
NOTA: Hasta donde yo sé, en el momento de escribir este artículo, Arduino la biblioteca NO admite INPUT_PULLDOWN
Comentarios
- 1. El calor generado por el pullup interno es insignificante. 2. Algunas placas (no las basadas en AVR) tienen
INPUT_PULLDOWN
.
Respuesta
«Contras: Puede hacer que MCU se caliente»
No lo hará. P = V ^ 2 / R, entonces 5 * 5 / 20,000 = 1.25mW, eso no hará que el procesador se caliente. Incluso convertir los 80 en un Mega2560, y bajarlos todos, solo disipará 0.1W.
«NOTA: Hasta donde yo sé, en el momento de escribir este artículo, la biblioteca Arduino NO es compatible con INPUT_PULLDOWN» Eso es porque la familia de dispositivos Atmega328P, «1284», 2560, etc. no tiene resistencias pulldown internas. Solo pullup. Consulte la Sección 14 de sus hojas de datos, «Puertos de E / S».
Este pullup es generalmente insuficiente para el pullup I2C, el borde ascendente creado por el pullup interno de 20K a 50K es muy lento. Se necesitan 4.7K externos hasta alrededor de 2.2K (depende de cuántos dispositivos I2C estén conectados). Y la especificación del bus I2C dice que deberían estar al final del bus, no en el origen del bus (que generalmente es el procesador).
Si tiene un cable largo proveniente de un botón o interruptor, eso es generalmente un buen momento para usar un pullup externo para asegurar buenos niveles de cambio entre alto y bajo.
Respuesta
El «Arduino Language «(es decir, la función pinMode()
) solo conoce INPUT_PULLUP.
Por lo tanto, necesita resistencias externas para las resistencias PULLDOWN.
Las señales de SALIDA no son flotantes, por lo que el término resistencia PULLUP / PULLDOWN realmente no se aplica allí.
Además, el valor de una resistencia pullup interna no es ajustable. Si ese valor (20 .. 50k) no es apropiado (I²C necesita algo menos de 10k) se requiere una resistencia externa.
Comentarios
- Como escribí en un comentario a la respuesta anterior, algunos núcleos Arduino no admite
INPUT_PULLDOWN
.