Saltar a contenido

Práctica 1.1.a: Relación software-hardware con Tinkercad

P1.1.a - Relación software-hardware con Tinkercad

En esta práctica montarás y simularás un circuito con Arduino, un botón y un LED. Al pulsar el botón, el LED alternará entre apagado y encendido. Después relacionarás lo que observas con las instrucciones del programa, el procesador, la memoria y los periféricos. Esta actividad se centra en Tinkercad.

1. Objetivos

  • Identificar el botón como entrada y el LED como salida de un sistema programable.
  • Interpretar cómo el programa lee el botón, detecta una pulsación y cambia el estado del LED.
  • Relacionar el programa con el procesador, la memoria y los periféricos, distinguiendo lo observable en la simulación de lo que solo puede inferirse.

2. Relación con RA y criterios de evaluación

Código Descripción
RA 1 Reconoce los elementos y herramientas que intervienen en el desarrollo de un programa informático, analizando sus características y las fases en las que actúan hasta llegar a su puesta en funcionamiento.
CE 1.a Se ha reconocido la relación de los programas con los componentes del sistema informático: memoria, procesador, periféricos, entre otros.

El criterio principal es CE 1.a: la actividad permite observar la relación entre el programa, el microcontrolador y los dispositivos de entrada y salida.

3. Requisitos y recursos

  • Un navegador actualizado, conexión a Internet y acceso a Tinkercad Circuits. Si el circuito compartido no permite editarse, crea una copia o un circuito nuevo.
  • Una placa Arduino Uno y un pulsador. Si utilizas un LED externo, necesitarás también un LED y una resistencia de 220 Ω. Para que la entrada no quede flotante, utiliza una resistencia de 10 kΩ como pull-down para el pulsador. Esta parte ya se proporciona en el circuito compartido.
  • La simulación compartida del circuito en Tinkercad y el vídeo de explicación de Arduino.
  • La teoría 1.1. Relación entre software y hardware.
  • Conocimientos previos básicos: distinguir una entrada de una salida y reconocer que un programa contiene instrucciones que ejecuta un procesador.

4. Pasos a seguir

4.1. Preparar el circuito y ejecutar el programa

  1. Abre la simulación compartida. Si no puedes editarla, crea un circuito nuevo y añade una placa Arduino Uno, un pulsador y un LED. Puedes usar el LED integrado de la placa (pin 13) o un LED externo.

  2. Conecta el pulsador para que el pin digital 7 tenga un nivel definido: conecta un terminal del pulsador a 5 V y el otro al pin 7; conecta una resistencia de 10 kΩ entre el pin 7 y GND. Así, el pin lee LOW (0) cuando no pulsas y HIGH (1) al pulsar. En los pulsadores de cuatro patas, utiliza terminales de lados opuestos del interruptor.

    Para el LED externo, conecta el pin 13 a la resistencia de 220 Ω, la resistencia al ánodo (pata larga) del LED y el cátodo (pata corta) a GND. La resistencia limita la corriente. No conectes el LED directamente al pin sin resistencia.

  3. Abre el editor de código de Arduino y pega el siguiente programa. Comprueba que las conexiones corresponden a los pines definidos (LED en 13 y BOTON en 7).

    // Alterna el LED entre encendido y apagado con cada pulsación
    const int LED = 13;
    const int BOTON = 7;
    
    int estadoBoton = 0;          // Lectura actual del botón
    int estadoLED = 0;             // 0: apagado; 1: encendido
    int estadoAnteriorBoton = 0;   // Lectura del botón en la vuelta anterior
    
    void setup() {
        pinMode(LED, OUTPUT);
        pinMode(BOTON, INPUT);
    }
    
    void loop() {
        estadoBoton = digitalRead(BOTON);
    
        // Actúa solo al detectar el paso de LOW a HIGH
        if ((estadoBoton == HIGH) && (estadoAnteriorBoton == LOW)) {
            estadoLED = 1 - estadoLED;
            delay(10);
        }
    
        estadoAnteriorBoton = estadoBoton;
    
        if (estadoLED == 1) {
            digitalWrite(LED, HIGH);
        } else {
            digitalWrite(LED, LOW);
        }
    }
    

    La pausa de 10 ms del ejemplo es breve y no constituye una solución completa para eliminar el rebote de todos los pulsadores físicos. En esta actividad se mantiene el programa proporcionado para analizar su comportamiento.

  4. Inicia la simulación. Pulsa y suelta el botón varias veces. Comprueba que cada pulsación completa alterna el LED entre apagado y encendido, y que mantener el botón pulsado no lo hace alternar continuamente.

  5. Si el LED no responde, detén la simulación y revisa, en este orden, que la resistencia pull-down une el pin 7 con GND, que el pulsador también conecta el pin 7 con 5 V al pulsarlo, que el LED tiene la polaridad correcta y que el programa usa los mismos pines que el circuito. Reanuda la simulación cuando hayas corregido el problema.

4.2. Relacionar la simulación con el programa y el hardware

  1. Sigue las instrucciones relevantes del programa: digitalRead(BOTON) consulta la entrada; la condición compara la lectura actual con la anterior; estadoLED = 1 - estadoLED alterna el estado; y digitalWrite(LED, ...) aplica el valor a la salida.

  2. Completa un registro de al menos tres pulsaciones. Anota el valor lógico del botón en reposo y al pulsarlo, el valor de estadoLED tras cada pulsación y lo que observas en el LED.

    Acción Lectura del botón estadoLED después de la acción LED observado
    Inicio, sin pulsar
    Primera pulsación
    Segunda pulsación
    Tercera pulsación
  3. Explica el recorrido de la información: el pulsador cambia la señal del pin 7; el microcontrolador ejecuta repetidamente loop(), lee el pin y actualiza la salida del pin 13. En este programa la entrada se consulta mediante sondeo en el bucle; no se utiliza una interrupción.

  4. Distingue los elementos que la simulación muestra directamente —el circuito, la ejecución y el estado del LED— de los que debes explicar a partir del modelo. En una placa real, el programa compilado se conserva en memoria flash y las variables globales, como estadoLED y estadoAnteriorBoton, ocupan memoria SRAM mientras se ejecuta el programa. Tinkercad no muestra necesariamente esos detalles internos como valores de memoria.

5. Comprobaciones de finalización

  • El circuito tiene una conexión de entrada estable: el pin 7 lee LOW en reposo y HIGH al pulsar el botón.
  • La simulación se ejecuta y cada pulsación completa cambia una vez el estado del LED.
  • El registro refleja al menos tres pulsaciones y concuerda con el comportamiento observado.
  • Puedes identificar la instrucción que lee el botón, la condición que detecta la pulsación y la instrucción que controla el LED.
  • Puedes explicar el papel del microcontrolador, la memoria y los periféricos sin afirmar que Tinkercad muestra todos los detalles internos de una placa real.

6. Ejercicios y entregables

  1. Responde con tus palabras a estas siete preguntas. Basa las respuestas en el circuito, el código y el registro de pulsaciones; distingue lo que observas directamente en Tinkercad de lo que explicas a partir del modelo del microcontrolador:
    • 1.a. Ejecución en el procesador: ¿Qué hace el procesador para ejecutar un programa?
      • 1.a.1. Explica las fases de búsqueda de una instrucción, decodificación y ejecución.
      • 1.a.2. Relaciona esas fases con las acciones de este programa: leer el botón, evaluar la condición, actualizar el estado y escribir en la salida.
      • 1.a.3. ¿Puedes ver cada fase interna en Tinkercad?
    • 1.b. Memoria y estado de los componentes: ¿Qué información debe conservar el programa mientras funciona?
      • 1.b.1. Explica qué recuerdan estadoBoton, estadoAnteriorBoton y estadoLED.
      • 1.b.2. En un Arduino Uno, ¿dónde se almacena el programa?
      • 1.b.3. ¿Dónde se mantienen normalmente esas variables?
      • 1.b.4. Aclara si el botón escribe directamente en la RAM o si el microcontrolador lee primero la señal del pin.
    • 1.c. Comunicación con los periféricos: ¿Cómo llega al microcontrolador la señal del botón?
      • 1.c.1. ¿Cómo llega al LED la orden de encendido o apagado?
      • 1.c.2. Identifica los pines 7 y 13 y las funciones del programa que leen y escriben en ellos.
      • 1.c.3. ¿El código utiliza interrupciones o consulta repetidamente el botón desde loop()?
    • 1.d. Interacción entre procesador, memoria y periféricos: Describe, en orden, qué ocurre desde que pulsas el botón hasta que cambia el LED.
      • 1.d.1. En tu explicación, señala qué parte corresponde al hardware y qué decisiones están definidas por el software.
    • 1.e. Cambios en los datos durante la ejecución: ¿Qué valores cambian al pulsar y soltar el botón?
      • 1.e.1. Explica cómo se actualizan las variables de estado.
      • 1.e.2. ¿Qué ocurre con esos datos al reiniciar o apagar la placa?
      • 1.e.3. ¿Qué información interna no muestra directamente la simulación?
    • 1.f. Función de las instrucciones del software: ¿Qué sentencias o funciones permiten leer la entrada, detectar una pulsación nueva, decidir el estado del LED y controlar la salida?
      • 1.f.1. ¿Qué sentencias o funciones permiten leer la entrada?
      • 1.f.2. ¿Qué parte del programa detecta una pulsación nueva?
      • 1.f.3. ¿Qué sentencia decide el siguiente estado lógico del LED?
      • 1.f.4. ¿Qué sentencia controla la salida conectada al LED?
      • 1.f.5. Explica cómo el compilador transforma el programa para que el procesador pueda ejecutar esas operaciones y relacionarse con el hardware.
    • 1.g. Simulación y ordenador real: ¿Qué relación entre procesador, memoria, programa y entrada/salida representa esta actividad?
      • 1.g.1. ¿Qué aspectos son comunes a un ordenador real y cuáles son diferentes o están simplificados en Arduino y Tinkercad?
  2. Completa el registro de pulsaciones de los pasos y adjunta una captura donde se vea el circuito en funcionamiento. Si no has podido acceder al circuito compartido, indica la incidencia y adjunta una captura de tu propio montaje.
  3. Entrega un documento identificado con tu nombre, módulo, unidad y práctica. Incluye las respuestas a las siete preguntas, el registro de tres pulsaciones y la captura de la simulación. Cierra con una reflexión breve que resuma cómo colaboran el software, el procesador, la memoria y los periféricos.

7. Solución orientativa

  1. El código Arduino se compila; el procesador no ejecuta literalmente el texto fuente, sino las instrucciones de máquina generadas. Las ejecuta mediante el ciclo de búsqueda, decodificación y ejecución. En este ejemplo, ese modelo se relaciona con la lectura del pin, la evaluación de la condición y la actualización de la salida. Tinkercad permite observar el comportamiento del circuito y del LED, pero no muestra necesariamente cada fase interna del procesador.

  2. En un Arduino Uno, el programa compilado se conserva en memoria Flash. Los datos cambiantes del programa, como las variables globales estadoBoton, estadoAnteriorBoton y estadoLED, se mantienen normalmente en SRAM durante la ejecución; el procesador también utiliza registros para operar. El botón no escribe directamente en la RAM: cambia el nivel eléctrico del pin 7 y el microcontrolador lee ese nivel a través de la entrada digital.

  3. El pulsador es la entrada y el LED es la salida. La resistencia pull-down mantiene el pin 7 en LOW cuando no se pulsa; al pulsarlo, el pin pasa a HIGH. digitalRead(BOTON) consulta ese pin y digitalWrite(LED, ...) establece la salida del pin 13. El programa lee el botón repetidamente desde loop(); no configura una interrupción.

  4. Al pulsar, cambia la señal de entrada del pin 7. El microcontrolador la lee, el programa compara la lectura actual con la anterior y, al detectar el paso de LOW a HIGH, invierte estadoLED. Después, digitalWrite aplica el nivel correspondiente al pin 13 y el LED cambia de estado. El circuito y los pines son hardware; la condición y la decisión de alternar están definidas por el software.

  5. estadoBoton refleja la lectura actual, estadoAnteriorBoton permite compararla con la vuelta anterior y estadoLED conserva el estado lógico que debe mostrarse. La SRAM es volátil: al apagar o reiniciar la placa, los valores se pierden o se inicializan de nuevo. Tinkercad muestra el comportamiento externo, pero no necesariamente los valores internos de memoria.

  6. digitalRead(BOTON) obtiene la lectura de entrada; la condición con estadoAnteriorBoton detecta una pulsación nueva; estadoLED = 1 - estadoLED decide el siguiente estado; y digitalWrite(LED, HIGH/LOW) controla la salida. Son funciones y sentencias del programa fuente que, tras la compilación, se traducen en operaciones ejecutadas por el procesador. El software proporciona la secuencia y la lógica para relacionarse con los periféricos.

  7. La simulación representa la ejecución de instrucciones, el uso de datos temporales y la comunicación con entradas y salidas. Esos conceptos también aparecen en ordenadores reales, pero Arduino Uno es un microcontrolador y no un ordenador de sobremesa: sus componentes, memoria y periféricos son distintos, y Tinkercad simplifica tanto el funcionamiento interno como algunos detalles eléctricos. Si el LED empieza apagado, tres pulsaciones completas lo dejan encendido, apagado y encendido, respectivamente.

Fuentes y referencias