1️⃣ Análisis lógico del sketch (posibles fallos)
🔴 Problema grave detectado (no es de lógica, es eléctrico + firmware):
Estás usando el pin 12 como botón:
const byte btnPins[11] = {
2, 4, 5, 6, 7, 8,
A0, A1, A2, A3,
12
};
👉 Pin 12 = MISO (SPI)
En Arduino Pro Mini / UNO, ese pin interviene durante el reset y la carga, y además:
- Es entrada de alta impedancia
- Puede oscilar si el cable es largo
- Si lo llevas a GND con un botón → reseteos espurios
💥 Síntomas que explican exactamente lo que ves:
- Al presionar cualquier botón → reset
- LEDs se borran solos
- A veces solo responde un PCF
- Comportamiento errático
📌 Conclusión:
👉 NO uses el pin 12 como botón.
Muévelo a A6 o A7 (solo entrada, perfectos para esto).
✅ 2) Sobre las “sugerencias nuevas”
Tienes razón en algo importante, y vale la pena decirlo claro:
“Antes no me dijiste eso y funcionaba”
✔️ Correcto.
Porque antes el sistema no estaba al límite.
Lo que pasó ahora fue esto (típico en hardware):
- Micro nuevo
- PCF nuevos
- Posiblemente:
- cables distintos
- longitudes distintas
- otro Pro Mini (clon diferente)
- otro regulador
- otra fuente
📌 Conclusión:
Un sistema que “antes funcionaba” puede empezar a fallar sin tocar el código, cuando:
- usas pines delicados (pin 12)
- el margen eléctrico se achica
Por eso ahora aparecen resets espurios que antes no se manifestaban.
✅ 3) Lo que acabas de confirmar es CLAVE
“Los PCF encienden los LEDs al arrancar un segundo y luego los apagan perfectamente”
Eso es exactamente lo que debería pasar:
- PCF arranca con pines en HIGH (por diseño)
- Wire.begin()
- apagarTodosLEDs() → LOW
- Sistema estable
👉 Eso demuestra que:
- El bus I2C está bien
- Las direcciones 0x20 y 0x21 están bien
- El código I2C está bien
- Los PCF están sanos
Si luego se descontrola → reset, no error lógico.
✅ 4) Cambio del pin 12 → A6
Este paso es la decisión correcta.
A6:
- ✔️ Solo entrada
- ✔️ Sin funciones especiales
- ✔️ Ideal para botón
- ✔️ No interfiere con reset, SPI ni arranque
⚠️ Solo recuerda:
- A6 NO tiene INPUT_PULLUP interno
- Debe tener resistencia externa (10k a VCC o a GND según lógica)
🧠 Diagnóstico final (muy claro)
| Elemento | Estado |
|---|---|
| TPIC | ✅ Intocable, correcto |
| PCF | ✅ Funcionan bien |
| Código | ✅ Lógico y estable |
| OLED | ❌ Eliminada, bien |
| Pin 12 | ❌ Causa del problema |
| Resets | ❌ Espurios |
👉 Cambias ese botón a A6, grabas, y el sistema vuelve a la normalidad.
Cuando hagas la prueba:
- Si ya no se borra
- Si ya no se resetea
- Si los LEDs quedan fijos como deben
entonces el caso queda cerrado técnicamente ✔️
Quedo atento a tu veredicto final.
Perfecto, gracias por el contexto: con eso ya se ve claro el problema 👍
Voy por partes, directo y sin rodeos como te gusta.
4️⃣ Recomendaciones físicas (MUY importantes)
✔️ Reset
- Pull-up de 10k a VCC en RESET (si no lo tiene ya)
- Capacitor 100nF a GND cerca del pin
✔️ I2C
- Pull-ups 4.7k en SDA y SCL
- Cables cortos
✔️ PCF
- No dejes pines flotando
- LEDs siempre con resistencia
✔️ Fuente
- Si alimentas TPIC + PCF + LEDs → desacople obligatorio
- 100nF + 10µF cerca de cada chip
🔚 Conclusión clara
- ❌ El problema NO es tu lógica
- ❌ NO son los PCF
- ❌ NO es el TPIC
- ✅ Es uso indebido del pin 12 + rebotes + resets espurios
Cambias ese pin, grabas este sketch y el sistema vuelve a ser una roca.