Esto se debe a la caída de voltaje. A medida que tira más corriente, el voltaje en el pin del ATMega cae. Dado que los LED tienen una correlación entre el voltaje y la corriente, esto causa una especie de acto de auto equilibrio. (La primera imagen es un gráfico LED v vs i, la segunda es el gráfico Pin driver v vs i de la hoja de datos de ATMega328)
El led y el controlador de pin finalmente llegan a un equilibrio. A medida que caen los voltajes de fuente, el led quiere tirar menos corriente. El problema es que esto podría estar en una corriente que puede dañar el controlador de PIN, Y dañar el led. Puede que no sea inmediato, pero puede acortar drásticamente la vida útil del controlador y del LED, y dañar la precisión del controlador también.
Los pines Arduino / ATMEGA individuales solo deben tener una fuente de 40 mA, y eso es con una caída de 0,6 V, el puerto solo debe tener una fuente de 100 mA y todo el microcontrolador debe tener una fuente de hasta 200 mA. Estos son los límites de uso seguro / recomendado / probado según lo establecido por el fabricante. Más de lo que hace hincapié en el microcontrolador, podría estar bien, podría no, pero es una apuesta.
NO hay una limitación actual en el controlador de pines. Si se corta un enlace lógico de alta a tierra, solo dibujó algunos amperios y mató al controlador. Si desea obtener 100 mA de un pin máximo recomendado de 40 mA, puede ! Depende de usted, el diseñador, restringir el sorteo actual. El 40mA es una recomendación, como un límite de velocidad. Usted puede conducir más rápido que el límite, no debería hacerlo por razones obvias.
Los leds se pueden conducir por encima de 20 mA. Esa es la calificación típica para x cantidad de horas. Puedes darle más, será más brillante, pero morirá antes. Y es realmente debido a problemas de calor. Cuanto más actual, más caliente se vuelve la unión led, más corriente quiere dejar pasar y, finalmente, cae en un embalamiento térmico.
En resumen, puede conectar directamente el led y, a través de una combinación no intencional de factores, no explotará (inmediatamente). Si conecta un led rojo (1.8 ~ 2.0v) directamente a un pin de 5v sin resistencia, es probable que muera, pero un azul, verde o blanco podría no hacerlo.
Lo último, puede usar los controles internos en el ATMega para encender de manera segura un LED. El levantamiento interno de 20k permitirá suficiente corriente para encender un led, débilmente.
pinMode (pin, INPUT); // configurar el pin para ingresar
digitalWrite (pin, HIGH); // encender resistencias pullup