Laboratorio de sistemas embebidos: registros, pines, PWM e interrupciones en un chip simulado

Este laboratorio da a cada alumno un JupyterLab propio con un pequeño chip de 8 bits inventado, escrito en Python sencillo para que se pueda leer cada línea. El chip tiene siete registros, un reloj que avanza por pulsos, un temporizador que controla un pin PWM y un botón que provoca una interrupción. La carpeta de trabajo contiene el chip, mcu.py, un cuaderno de partida y scripts cortos, una idea cada uno.

Es un simulador de un chip que no existe, no una placa real, y los chips reales son distintos: tienen más registros, otros nombres y muchas más reglas, así que para uno real hay que leer su hoja de datos. Tampoco es un laboratorio de ataque. Cada copia no tiene salida a internet ni a ningún otro alumno.

Qué aprende el alumnado

Que un registro es un byte cuyos bits significan cosas distintas, mostrado en binario, hexadecimal y números normales. Después, activar, desactivar e invertir bits sueltos con una máscara, convertir un pin en salida con el registro de dirección de datos, activarlo y volver a leerlo, y un patrón de parpadeo durante ocho pulsos. Luego un temporizador y un valor de comparación que producen una señal PWM: valores de 4, 8 y 12 en un periodo de 16 pulsos dan 25, 50 y 75 por ciento. Por último, un botón que rebota: un bucle de sondeo cuenta una pulsación como dos, y una interrupción llama a su manejador por los mismos dos flancos hasta que el manejador espera a que pase el rebote. Encaja en introducciones a los sistemas embebidos, la arquitectura de computadores y la electrónica.

Ejecútalo en tu navegador

El laboratorio inicia un solo servicio, jupyter, que escribe el chip, el cuaderno y los scripts cortos en su carpeta de trabajo y está listo en unos segundos, dentro de los 512 MB que puede tener un servicio. JupyterLab no pide token, porque la puerta de la plataforma ya sabe quién lo abre. El terminal junto al laboratorio no tiene Python propio, así que llega al del laboratorio con docker exec jupyter, seguido de la orden que se ejecuta dentro. Cada script imprime lo mismo cada vez.

  1. Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
  2. Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca JupyterLab: sistemas embebidos con un chip simulado.
  3. Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
  4. Ábrelo. En la página del laboratorio, la barra del laboratorio tiene un enlace llamado JupyterLab: púlsalo para abrir JupyterLab en tu navegador y haz doble clic en start.ipynb. Después pulsa Abrir terminal y escribe docker exec jupyter python3 steps/registers.py para ver los siete registros, todos a 0b00000000 tras un reinicio.

Qué pedir que entreguen

Un script o cuaderno corto propio que importe mcu.py, como un patrón de parpadeo propio durante ocho pulsos o una señal PWM con un ciclo de trabajo que hayan elegido y calculado, descargado desde JupyterLab con File, Download. Después una o dos frases, con sus propias palabras, sobre lo que mostraron los registros. Nada se califica automáticamente: la frase muestra si se entendió. Para un trabajo más sólido, pide un manejador de botón que cuente una pulsación una sola vez y que el alumno explique en qué se diferencia el simulador de un chip real.

Una lección básica en este laboratorio

Embedded Systems Basics es una lección pequeña que se practica en este laboratorio. En ella el alumno lista la carpeta de trabajo, imprime los registros, activa, desactiva e invierte bits, controla un pin y lo hace parpadear, genera una señal PWM con tres ciclos de trabajo y compara el sondeo con una interrupción en un botón que rebota, y después abre el mismo trabajo en el cuaderno de partida.

Es deliberadamente pequeña: enseña a un profesor qué es una lección practicada en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para modificarla.

El código en GitHub

El archivo compose no tiene Dockerfile: ejecuta una sola imagen pública estándar, scipy-notebook de los Jupyter Docker Stacks, fijada a una etiqueta con fecha, con su propia cuenta sin privilegios y 512 MB de memoria. La imagen tiene licencia BSD-3-Clause y no la distribuimos nosotros. El archivo escribe el chip y los scripts al iniciar, así que cada copia imprime lo mismo y no se descarga nada. Los límites son honestos: es un solo chip inventado, no hay tiempos reales ni electrónica, no se puede instalar nada desde internet y una placa real tiene mucho más que aprender. Nada se conserva al detener el laboratorio, así que el alumno descarga antes su trabajo.

Asignarlo como trabajo

Indica en la tarea qué hay que entregar.

  1. Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-embedded-sim con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para darle otro registro al chip.
  2. Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
  3. Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
  4. Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿Por qué no hay token ni contraseña que escribir?
A la página web de un laboratorio solo se llega por la puerta de la plataforma, que ya sabe quién eres y solo deja pasar a ti y al profesorado de tu módulo. Por eso JupyterLab se inicia sin token. No lo ejecutes así en una máquina a la que pueda llegar cualquiera.
¿Por qué el terminal usa docker exec jupyter?
El terminal del laboratorio lleva curl, psql y algunos clientes más, pero no Python. docker exec jupyter ejecuta una orden dentro del contenedor del laboratorio, que sí tiene Python. JupyterLab también tiene su propio terminal, en File, New, Terminal.
¿Es un chip real?
No. Es un chip pequeño e inventado, escrito en Python para que se puedan leer y ejecutar las ideas que comparten los chips reales: registros, bits, pines, temporizadores e interrupciones. Un chip real tiene otros nombres de registros y otras posiciones de bits, un comportamiento eléctrico real y tiempos reales, y nada de eso se simula aquí.
¿Pueden los alumnos cambiar el chip?
Sí. mcu.py está en la carpeta de trabajo, corto y comentado, así que un alumno puede añadir un registro o cambiar el periodo del temporizador y volver a ejecutar los scripts. Los cambios duran solo hasta que se detiene el laboratorio. Para otro chip para toda la clase, haz un fork del repositorio, cambia el archivo que escribe el archivo compose y asigna el fork como laboratorio.