60 min en Wokwi + 10 min de entregable. Parejas, rotación driver/navigator cada 10 min.

Paso 0 · Preparación (5 min)

Duplicar el proyecto saboteado a la cuenta propia. Abrir PulseView.

Paso 1 · Caza de bugs (20 min)

Síntoma: las lecturas de los canales multiplexados se parecen demasiado entre sí y cambian cuando mueves otro canal.

Bug raíz (uno solo): no se respeta el tiempo de establecimiento al cambiar de canal — el ADC muestrea inmediatamente después de conmutar.

Procedimiento:

  1. Mover un solo canal al extremo y dejar los otros quietos. Anotar qué pasa en los demás. Si se mueven, hay contagio, no ruido.
  2. Localizar en el código el punto donde se selecciona el canal y dónde se hace la lectura. Medir cuántas instrucciones hay entre uno y otro.
  3. Hipótesis por escrito antes de tocar el código.
  4. Introducir la espera. Barrer el valor: 0 µs, 10 µs, 50 µs, 200 µs. Anotar en qué punto desaparece el contagio.
  5. Registrar: síntoma → hipótesis → evidencia → causa raíz → arreglo, con el valor mínimo que funciona.

💡 El entregable pide el valor mínimo medido, no "le puse 1 ms y ya jaló". Sobrar tiempo también es un error de diseño: cuesta frecuencia.

Paso 2 · Analizador lógico: el ACK del esclavo (20 min)

  1. Poner el Logic Analyzer sobre SDA y SCL. Correr ~3 s y detener para obtener el .vcd.
  2. Abrir en PulseView → decodificador I²C.
  3. Localizar en la señal real: START, el byte de dirección + bit R/W, y el ACK (SDA lo tira el esclavo en el noveno pulso de reloj). Capturar.
  4. Desconectar el sensor en el diagrama de Wokwi, volver a correr y capturar el NACK — SDA se queda alta porque nadie contesta.
  5. Escribir dos líneas: qué diferencia hay entre "el sensor no está" y "el sensor está pero devuelve basura", vista desde el bus.

Paso 3 · Arquitectura de expansión (15 min)