¿Qué sucede realmente dentro de un Arduino Uno R3 cuando ejecuto el código para parpadear un LED?

La ejecución del código ocurre cuando el gestor de arranque ha descargado con éxito el código o ha dejado de intentarlo y simplemente ejecuta lo que encuentra ya descargado. El código no es sustancialmente diferente del código que comprende cualquier aplicación en cualquier otro dispositivo programable. Consiste en instrucciones discretas ejecutadas una tras otra. Para que el LED parpadee, se requiere un poco de hardware para aplicarle un voltaje. La CPU en el Arduino tiene pines que pueden controlarse mediante un conjunto de instrucciones para ese propósito. Una determinada instrucción convierte el pin en un pin de salida. Otra instrucción hace que el pin emita un nivel lógico ‘alto’ (LED encendido), y otra instrucción hace que el pin emita un nivel lógico ‘bajo’ (LED apagado). Otras instrucciones permiten que la CPU tome decisiones ramificándose a una de las múltiples secuencias de instrucciones al probar el estado de algún registro en la CPU. Algunas instrucciones pueden ejecutarse simplemente como una forma de ahorrar tiempo hasta que sea el momento de alternar el nivel lógico en el pin que controla el LED. Estas instrucciones pueden ejecutarse una y otra vez porque las secuencias de instrucciones son el objetivo de las instrucciones de ramificación. Esto se llama iteración y hace que el LED se encienda y se apague mientras se ejecuta el programa de parpadeo. Crear estas secuencias de instrucciones de CPU es lo que es la programación. Las instrucciones generalmente se generan compilando lenguajes de nivel superior como C en Arduino, pero el programador también puede hacerlo directamente. Al observar ciertos subproductos del compilador, puede asociar el código de idioma de alto nivel con las respectivas instrucciones de la CPU.

Supongo que el ánodo del LED está conectado al puerto y el cátodo está conectado a tierra. El parpadeo del LED en cualquier microcontrolador tendrá lugar de esta manera.

  1. Hace que el pin esté conectado al LED alto, es decir, la lógica 1.
  2. Luego llama a una subrutina para perder tiempo de CPU.
  3. Luego haces el pin a Bajo, es decir, lógica 0
  4. Ahora vuelve a llamar a la subrutina para perder tiempo de CPU.
  5. Ahora repita el proceso del 1 al 4 para obtener el efecto de parpadeo.

Perder el tiempo de la CPU aquí es importante. El reloj de la CPU se ejecuta en MHz mínimo. Eso significa que si sigue encendiendo y apagando el led, sus ojos nunca reconocerán el cambio. Para ajustar la persistencia de la visión, necesitamos mantener al menos 1/10 de segundo entre la transición de encendido y apagado. Para lograr esto, llamamos a la subrutina para perder algo de tiempo de CPU.

Arduino hace exactamente lo mismo escrito anteriormente.

Cuando ejecuta el programa de parpadeo de LED, utiliza uno de los dos métodos


    1. Gira el pin al que está conectado el led a la lógica 1, es decir, le proporciona un suministro de 5V (suponiendo que la tierra ya esté conectada)
    2. desperdicia algunos ciclos del procesador para tener en cuenta el intervalo de tiempo que ha dado entre el encendido y el apagado del escenario
    3. gira el pin a cero lógico, es decir, tierra, de modo que el led se apaga ya que tanto el ánodo como el cátodo tienen el mismo potencial
    4. Nuevamente desperdicia algunos ciclos de procesador para dar cuenta del retraso de tiempo
    5. y lo repite

    para el segundo método

    Utiliza el temporizador e interrumpe donde se inicializa el temporizador para el retraso de tiempo que desea dar entre el estado activado y desactivado. cuando finaliza el temporizador, genera una interrupción y se reinicia al mismo valor. cuando se genera la interrupción, se llama una rutina de servicio de interrupción donde se alterna la salida del pin led.

    De las respuestas anteriores, debe tener claro lo que sucede. Solo quiero dar una respuesta muy simple a los principiantes o muy principiantes aquí.

    El microcontrolador (ATMEGA328P) hace un puerto alto (5V) por un período de tiempo pequeño (retraso) y luego lo hace bajo (0V) por un período de tiempo pequeño. El LED conectado al puerto se iluminará cuando esté alto y no cuando esté bajo. Así es como parpadea el LED.

    El microcontrolador funciona a 16MHz y, por lo tanto, necesitamos un retraso mayor que nuestra persistencia de la visión para detectar el parpadeo (de lo contrario, parecerá que siempre está brillando, no parpadeando). El retraso se logra desperdiciando algunos ciclos de reloj dentro del código.

    Para más detalles, por favor comente. Editaré para agregar más puntos si es necesario 🙂

    More Interesting

    ¿Cuáles son las demandas industriales y el alcance de los sistemas integrados?

    Cuál es una mejor opción: el trabajo actual en el que estoy trabajando con un marco .Net que me paga bastante bien o un trabajo de programación integrado donde podría trabajar con C que me pagaría menos que mi trabajo actual.

    Si el lenguaje C es bien conocido, ¿es beneficioso tomar entrenamiento para C incrustado?

    ¿Cuál es la hoja de ruta para convertirse en un desarrollador de productos integrados? ¿Es AVR ATmega32 un buen comienzo y cuál es el siguiente paso?

    Cómo buscar un tema de tesis en el campo de la robótica y los sistemas integrados

    ¿Cuál es la diferencia entre una maestría en informática y una maestría en ingeniería de sistemas con sistemas integrados?

    Para un estudiante más nuevo que completó BTech en electrónica, ¿recomendaría una certificación en CCNA O un curso integrado, desde una perspectiva puramente laboral?

    ¿Por qué no tenemos más coprocesadores en computadoras personales como los sistemas integrados?

    ¿Cuáles son las ventajas de los PLC sobre otros microcontroladores como ARM, Arduino, PIC, etc.?

    ¿Existe una relación entre los sistemas integrados y el sistema de energía?

    ¿Un gusto por Arduino se traduce en una carrera en sistemas integrados?

    ¿Es útil conocer los sistemas integrados, que conciernen a los microcontroladores Arduino, PIC y ARM, para un ingeniero de automatización industrial que se ocupa de unidades PLC y HMI?

    ¿Cuáles son las habilidades / conocimientos básicos necesarios para la programación integrada / sistemas / firmware?

    ¿Cómo seleccionamos un IDE para el desarrollo de software integrado? ¿Debería basarse en RTOS planificado o procesador?

    ¿Cuál es el sistema integrado más barato?