¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de sistemas embebidos

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de contenedores12 min de lectura7 comandos

¿Cómo lee un botón un chip diminuto?

Dentro de una lavadora, un termostato o un mando de videojuegos hay un chip pequeño sin pantalla ni teclado. Tiene que notar un botón, encender una luz y regular un motor, solo escribiendo y leyendo unos pocos números. Esta lección usa un chip inventado, simulado en Python, para que veas cambiar esos números.

Al terminar esta lección

Nota

Puedo leer un registro en binario y decir qué hace activar, desactivar o invertir un bit.

Palabras clave

  • Registro: una pequeña memoria numerada dentro del chip, aquí de 8 bits.
  • Bit: un 0 o un 1. El bit 0 es el de la derecha.
  • Máscara: un número que sirve para elegir o cambiar ciertos bits.
  • Pin: una pata metálica del chip, en nivel alto (1) o bajo (0).
  • PWM: modulación por ancho de pulso, un pin que se enciende y se apaga muy deprisa, y la parte del tiempo que está encendido marca la fuerza de su efecto.
  • Interrupción: una señal que hace que el chip se pare y ejecute un manejador.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿A qué número normal equivale el número binario 1010? 2. ¿Cuántos valores distintos caben en 8 bits? 3. ¿Para qué sirve print en Python? Respuestas: 10; 256, de 0 a 255; muestra un valor en pantalla.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de arriba de la lección y espera a que diga que está en marcha. Hay un solo contenedor, jupyter, y el terminal llega a su Python con docker exec jupyter, que ejecuta una orden dentro de él. El chip es un simulador de un chip inventado, no una placa real: los chips reales tienen otros registros, otros nombres y muchas más reglas. El enlace JupyterLab abre su página web, en el puerto 8888. Cada botón Ejecutar de abajo escribe su orden en el terminal de tu laboratorio, una detrás de otra en la misma sesión. Para verlas o escribir las tuyas, pulsa Abrir terminal (pestaña nueva) en la barra.

Un chip es un puñado de registros

ls lista la carpeta de trabajo: mcu.py es el chip, start.ipynb un cuaderno y steps los scripts. El primer script reinicia el chip e imprime cada registro en binario, hexadecimal y números normales. Hay siete: DDR (qué pines son salidas), PORT (lo que manejan las salidas), PIN (lo que leen los pines), TCCR (el control del temporizador), TCNT (la cuenta del temporizador), OCR (el valor de comparación) e IFR (la bandera de interrupción). Tras un reinicio, los siete valen 0b00000000.

Comando
docker exec jupyter ls

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
docker exec jupyter python3 steps/registers.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un bit se cambia con una máscara

El script empieza con PORT en 0b00001010. Un OR con una máscara activa un bit y da 0b00001011. Un AND con lo contrario de una máscara lo desactiva y da 0b00001001. Un XOR lo invierte y da 0b00000001, y la misma inversión otra vez devuelve 0b00001001. Cada vez solo cambia el bit elegido, que es justo para lo que sirve una máscara.

Comando
docker exec jupyter python3 steps/bits.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un pin es un bit que se ve desde fuera

Un 1 en DDR convierte un pin en salida. El script hace del pin 0 una salida, escribe un 1 en el bit 0 de PORT, y PIN lee 0b00000001. Después invierte el bit en cada pulso durante ocho pulsos e imprime #.#.#.#., una luz que parpadea: # es encendido y . apagado.

Comando
docker exec jupyter python3 steps/pins.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Qué registro decide si un pin es una salida, y qué mostraría PIN para un pin de salida que PORT ha puesto a 1? Respuesta: DDR, y un 1, porque un pin de salida muestra lo que maneja el chip.

PWM es un pin encendido una parte de cada periodo

El temporizador cuenta de 0 a 15 y vuelve a empezar, así que un periodo son 16 pulsos. Mientras TCNT es menor que OCR, el pin 5 está en nivel alto. El script prueba OCR con 4, 8 y 12 e imprime un periodo de cada uno: cuatro pulsos encendido y 12 apagado son un 25 por ciento, ocho y ocho son un 50 por ciento, y 12 encendido y cuatro apagado son un 75 por ciento. Esa parte es el ciclo de trabajo, y así puede un chip real atenuar una luz o frenar un motor solo con encendido y apagado.

Comando
docker exec jupyter python3 steps/pwm.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un botón rebota, así que importa cómo escuchas

Un botón real no pasa de 0 a 1 una sola vez: vacila. El primer script sondea el pin en cada pulso, y una sola pulsación le hace ver dos flancos de subida, en los pulsos 2 y 4, así que cuenta 2 pulsaciones. El segundo script deja que el chip levante la bandera de interrupción y llame a un manejador. Se le llama dos veces, en los pulsos 2 y 4, los mismos dos flancos. Después el manejador ignora una llamada que llegue a menos de tres pulsos de la última que guardó, y se cuenta una sola pulsación.

Comando
docker exec jupyter python3 steps/poll.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
docker exec jupyter python3 steps/interrupt.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente piensa que una interrupción cura el rebote. No es así: el manejador se ejecutó por cada flanco, dos veces para una sola pulsación. Una interrupción solo significa que el chip no necesita preguntar sin parar. El rebote sigue en la señal y tu código tiene que tratarlo. Recuerda también que esto es un simulador: en un chip real los nombres de los registros y las posiciones de los bits son otros, y la hoja de datos es la que manda.

El mismo trabajo en un cuaderno

Abre JupyterLab desde la barra y haz doble clic en start.ipynb. Construye el chip, escribe en los registros y genera una señal PWM, celda a celda. Haz clic en una celda y pulsa Mayús y Intro para ejecutarla. La última celda te pide cambiar el valor de comparación y decir cuál es ahora el ciclo de trabajo. mcu.py es corto y está comentado: ábrelo junto al cuaderno y léelo.

Comprobación final

Consejo

Responde sin mirar atrás. 1. ¿Qué operación activa un bit y cuál lo invierte? 2. Con un periodo de 16 pulsos y un valor de comparación de 8, ¿cuál es el ciclo de trabajo? 3. ¿Por qué se contó dos veces una sola pulsación? 4. ¿Es este un chip real? Respuestas: OR activa y XOR invierte; un 50 por ciento; el botón rebotó y se contó cada flanco de subida; no, es un simulador de un chip inventado.

Para el profesorado

Consejo

Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia propia de cada alumno. El laboratorio es un solo servicio, JupyterLab con un breve simulador en Python de un chip de 8 bits inventado, y nada de lo que hay aquí se corrige solo: el alumno entrega un script o cuaderno corto propio que usa mcu.py, descargado desde JupyterLab, y una frase sobre lo que mostraron los registros. Ideas clave: 1. Un registro es un número cuyos bits significan cosas distintas. 2. Una máscara activa, desactiva o invierte bits elegidos. 3. Un temporizador y un valor de comparación generan una señal PWM. 4. Un botón se puede sondear o tratar con una interrupción, y en ambos casos rebota. Error frecuente: creer que una interrupción elimina el rebote. Material: el laboratorio y un navegador. Consejo: pida al alumnado que prediga cada línea impresa antes de pulsar Ejecutar. Deje claro que es un simulador: los chips reales son distintos, y para uno real hay que leer su hoja de datos. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del constructor de lecciones.

Sobre este laboratorio y su código: Laboratorio de sistemas embebidos: registros, pines, PWM e interrupciones en un chip simulado

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.