Electrónica Digital · Tema 2

Señales digitales y timing

El bit en el tiempo: frecuencia, duty y flancos. Todo lo digital baila al compás de un reloj.

01 · Punto de partida

Un bit solo no dice cuándo

El Tema 1 decidió el valor; falta el cuándo: ¿cada cuánto se lee? ¿cuánto dura el 1? Un PWM de 490 Hz con 50 % está 1,02 ms arriba y 1,02 ms abajo. Sin timing, los bits son ruido ordenado.

  • ¿Qué miden frecuencia, período y duty?
  • ¿Qué es un flanco y por qué importa?
  • ¿Cuánto dura un byte a 9600 baudios?
  • ¿Qué timing ves con cada instrumento?

02 · Parámetros

Cuatro números por señal

Timing de señales reales.
SeñalfTNota
Parpadeo LED1 Hz1 sVisible a ojo
PWM Arduino490 Hz2,04 msMotor/LED sin parpadeo
UART 96009600 baud104 µs/bitByte ≈ 1,04 ms
Clock 16 MHz16 MHz62,5 nsSolo osciloscopio

03 · Flancos

El momento exacto

Flanco de subida (0→1) y de bajada (1→0): la lógica secuencial (curso 6) cuenta flancos, no niveles. En la realidad el flanco tarda (rise/fall time, ns) y puede rebotar (ringing): por eso existen el Schmitt digital y el buen desacople.

nivel → flanco →cuenta/decide →siguiente estado

04 · Ver el timing

Cada instrumento, su liga

Ojo humano
Hasta ~50 Hz: más rápido se ve fijo (persistencia). Un LED a 490 Hz parece siempre prendido a medio brillo.
Multímetro
Promedia: 50 % de 5 V lee ≈ 2,5 V. Útil para estimar duty, inútil para flancos.
Osciloscopio/lógico
Ven flancos, duty y jitter: a partir de kHz son obligatorios. El analizador lógico es el multímetro digital.
Baud ≠ datos útiles
9600 baud con 8N1 dan ~960 bytes/s (10 bits por byte): start + 8 + stop. El protocolo come bits.

05 · Timing en código

Calcular antes de medir

Parámetros de cualquier señal periódica más el caso UART completo.

Python en tu navegador. Pasale tu frecuencia y mirá los tiempos.

def timing(f_hz, duty=0.5):
    t = 1 / f_hz
    mult, unit = (1, 's') if t >= 1 else (1000, 'ms') if t >= 1e-3 else (1e6, 'us') if t >= 1e-6 else (1e9, 'ns')
    print(f"f={f_hz}Hz T={t*mult:.2f}{unit} ton={t*duty*mult:.2f}{unit} toff={t*(1-duty)*mult:.2f}{unit}")
    return t


timing(490)
timing(16e6)
timing(1, duty=0.1)

490 Hz: T 2,04 ms. 16 MHz: T 0,0000625 ms (62,5 ns). ¿Qué duty conviene para un calefactor lento?

Byte a 9600 baudios

def uart(baud=9600, bits_trama=10):
    t_bit = 1 / baud
    t_byte = t_bit * bits_trama
    print(f"bit={t_bit*1e6:.1f}us byte={t_byte*1e3:.2f}ms -> {1/t_byte:.0f} bytes/s")
    return t_byte


uart()
uart(baud=115200)

06 · Analogía programador

Metrónomo y protocolo

  1. 1
    Clock = metrónomo.

    Todos tocan al mismo tempo: sin clock compartido cada uno va por su lado (asíncrono = UART).

  2. 2
    Duty = porcentaje de CPU.

    Fracción del tiempo activa: como un load average de la señal.

  3. 3
    Flanco = evento.

    Nivel es estado, flanco es evento: la interrupción vive de flancos, no de niveles.

07 · Exploración

Laboratorio: diseccionar una señal

Elegí frecuencia y duty: el laboratorio calcula T, ton, toff y te dice con qué verla.

LABORATORIO 2

Diseccionador

490 Hz · 50 %

Período T2,04 ms
ton / toff1,02 / 1,02 ms
Flancos/s980
Se ve conOsciloscopio

490 Hz 50 %: T 2,04 ms.

Preguntas para explorar

  1. Con 1 Hz y 10 %: ¿ton? ¿Qué instrumento sobra?
  2. Con 16 MHz: ¿T en ns? ¿Flancos por segundo?
  3. UART 9600 con duty 50 %: ¿por qué el duty no importa en datos?
Ver respuestas sugeridas
  1. 100 ms encendido: el ojo sobra (hasta cronómetro). Multímetro leería ≈ 0,5 V.
  2. 62,5 ns; 32 millones de flancos/s. Solo osciloscopio rápido o lógico.
  3. Porque importan los bits a su tiempo, no el promedio: datos ≠ PWM. El duty manda en potencia, no en información.

08 · Comprensión

Confusiones frecuentes

«Más Hz = más datos»

Baud es símbolos/s; los datos útiles descuentan protocolo (9600 → 960 B/s). Y un clock rápido sin datos no informa nada.

«El flanco es instantáneo»

Tarda ns y rebota: a MHz el flanco es todo el diseño (terminaciones, desacople). Ideal solo en el simulador.

«Duty solo para motores»

Duty = información de potencia en LED, audio (clase D), calefactores: donde hay promedio hay duty.

«Con multímetro alcanza»

El tester promedia y esconde flancos, jitter y rebotes: a partir de este curso, el osciloscopio es el instrumento.

09 · Práctica guiada

Ejercicios de timing

Ejercicio 1: LED sin parpadeo

¿Desde qué frecuencia un LED deja de parpadear a ojo? Verificá con PWM de 100 Hz vs 1 kHz al 50 %.

Ver solución razonada

≈ 100 Hz: a 100 Hz algunos ojos notan; a 1 kHz nadie. Por eso Arduino usa 490/976 Hz: sin parpadeo y sin pérdidas de conmutación.

Ejercicio 2: byte lento

Sensor que manda 100 bytes/s por UART 8N1. ¿Baud mínimo? Verificá con uart().

Ver solución

1000 baud (100×10 bits): 1200 es el estándar siguiente ✓. 9600 sobra 8×.

Ejercicio 3: medir duty

PWM 490 Hz al 25 %: ¿qué lee el multímetro en dc? Medilo y compará con timing(490, 0.25).

Ver solución

≈ 1,25 V (25 % de 5 V): el tester promedia. Confirmar con osciloscopio: ton 0,51 ms.

10 · Síntesis

Ideas para recordar

  • T = 1/f; ton = duty×T; flancos/s = 2×f.
  • Nivel = estado; flanco = evento.
  • 9600 baud 8N1 ≈ 960 bytes/s.
  • Ojo < 50 Hz; tester promedia; scope ve todo.
  • Duty manda en potencia, bits mandan en datos.

Tiempo dominado. Ahora los valores exactos: en el próximo tema, niveles lógicos TTL y CMOS.