Cómo hace un chip parpadear una luz
Una patilla de uso general, en inglés GPIO (general purpose input output), puede ser una entrada o una salida. Una entrada lee un botón y una salida enciende un diodo LED. El chip decide el nivel de una salida escribiendo un bit.
Si sabes cambiar ese bit según un horario, puedes hacer parpadear una luz o regular su brillo.
Al final de esta lección
Nota
Puedo calcular el ciclo de trabajo de una señal PWM a partir de su valor de comparación.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Salida | una patilla que el chip pone en alto o en bajo |
| Tic | un paso del reloj del chip |
| Temporizador | un contador que sube un número en cada tic |
| PWM | modulación por ancho de pulso: una patilla que cambia muy deprisa |
| Ciclo de trabajo | el porcentaje del periodo que la patilla está en alto |
| Periodo | los tics que tarda el temporizador en dar una vuelta |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Recuerda: es un simulador
Importante
El chip del laboratorio es un simulador de un chip inventado, no una placa real. Los scripts imprimen palabras en inglés, como on, off y duty.
DDR decide qué patillas son salidas
El registro DDR dice qué patillas son salidas: un 1 en el bit n hace que la patilla n lo sea. El registro PORT guarda el nivel que el chip pone en ellas.
El registro PIN no guarda nada: muestra el nivel de cada patilla ahora mismo. En una salida, PIN enseña lo que el chip está poniendo.
Haz parpadear la patilla 0
docker exec jupyter python3 steps/pins.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Parpadear es invertir un bit cada tic
El script pone un 1 en DDR, bit 0, y otro en PORT. Después PIN se lee de vuelta como 0b00000001.
Luego invierte el bit una vez por tic durante ocho tics. Escribe #.#.#.#.: la almohadilla es la luz encendida y el punto, apagada.
PWM regula con el tiempo en alto
Un diodo LED o un motor no entienden de medias tintas: solo reciben alto o bajo. Con PWM la patilla se enciende y se apaga muy deprisa, y lo que cambia es la parte del tiempo que está en alto.
El temporizador cuenta de 0 a 15 y vuelve a empezar: ese es el periodo, 16 tics. Mientras la cuenta TCNT sea menor que OCR, la patilla 5 está en alto.
Ejemplo resuelto: tres valores de OCR
| OCR | Tics en alto | Tics en bajo | Ciclo de trabajo |
|---|---|---|---|
| 4 | 4 | 12 | 4 de 16, un 25 % |
| 8 | 8 | 8 | 8 de 16, un 50 % |
| 12 | 12 | 4 | 12 de 16, un 75 % |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Dibuja un periodo con tres valores de OCR
docker exec jupyter python3 steps/pwm.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué imprime el script de PWM
Escribe tres líneas, una por valor de OCR. Cada una empieza con compare, el valor, y sigue con 16 caracteres: una almohadilla por tic en alto y un punto por tic en bajo.
Después vienen on, los tics en alto, off, los tics en bajo, y duty, el ciclo de trabajo en porcentaje. Salen 25, 50 y 75, como en la tabla.
Un error frecuente
Advertencia
Mucha gente cree que PWM baja la tensión de la patilla. No la baja. La patilla solo está en alto o en bajo, y lo que cambia es cuánto tiempo pasa en alto. Como cambia tan deprisa, el ojo y el motor notan el promedio.
Calcula el ciclo de trabajo
periodo = 16
comparacion = 4 # cambia este valor
niveles = []
for tic in range(periodo):
if tic < comparacion:
niveles.append(1)
else:
niveles.append(0)
print(niveles)
print(sum(niveles) * 100 // periodo, "%")