Skip to content

AngelBravoS/DIY_clock

 
 

Repository files navigation

DIY LED Clock Firmware — CAI-082-V4

Firmware para relojes LED DIY basados en microcontroladores STC15, adaptado para el modelo CAI-082-V4 con el chip IAP15W413AS.


Hardware

Microcontrolador

IAP15W413AS-35I-SKDIP28 (familia STC15W401AS, arquitectura 8051 1T)

  • Flash: 13 KB unificados (0x0000–0x33FF). Sin partición hardware CODE/IAP — todo el flash es flash de programa.
  • RAM: 512 B (256 B scratch-pad + 256 B auxiliar)
  • ADC: 10 bits, 8 canales
  • Frecuencia: 0–35 MHz (RC interno configurable)
  • Tensión: 2.4–5.5 V
  • Encapsulado: DIP-20

El prefijo «IAP» indica que la flash de programa puede escribirse en tiempo de ejecución. No hay EEPROM dedicada separada; el almacenamiento dinámico de configuración se realiza íntegramente en la BBSRAM del DS1302.

Componentes principales

Componente Función
IAP15W413AS MCU principal
DS1302 RTC + 31 bytes BBSRAM (alarmas, config)
Display 4×7 seg. Visualización, ánodo común, multiplexado por PCA
LDR Sensor de luz ambiental → brillo automático
Termistor NTC Sensor de temperatura
Buzzer piezoeléctrico Alarmas y cuenta regresiva
2 pulsadores MENU (izquierdo) y SELECT (derecho)

Botones

MENU (izquierdo):

  • Corto (<320 ms): siguiente pantalla / navegar opciones
  • Largo (320 ms–1.5 s): guardar / volver / entrar en edición de preset (cuenta regresiva)

SELECT (derecho):

  • Corto (<320 ms): toggle / incrementar valor / iniciar·pausar (crono y cuenta regresiva)
  • Largo (>320 ms): resetear crono o cuenta regresiva al preset
  • Mantenido (≥1.5 s): auto-incremento rápido

MENU largo + SELECT largo simultáneos: entrar en modo configuración desde la pantalla de inicio.


Pantallas de inicio

El reloj cicla manualmente con MENU·S entre estas pantallas:

Orden Pantalla Descripción
0 Hora (HH:MM) Pantalla principal. Colon parpadea. Punto AM/PM encendido si hay alarma activa hoy.
1 Cronómetro (MM:SS) Cuenta ascendente hasta 59:59. S·S inicia/pausa. S·L reinicia.
2 Cuenta regresiva (MM:SS) Cuenta descendente. Ver sección específica.
3 Temperatura Valor del termistor NTC con offset de calibración.
4 Día de la semana Lun / MAr / MiE / JuE / UiE / SAb / doN
5 Fecha DD.MM o MM.DD según configuración.

Sin autoscroll. Tras 1 segundo sin pulsar MENU en cualquier pantalla excepto crono y cuenta regresiva, el display vuelve a la hora.

SELECT·S desde cualquier pantalla salta directamente a Temperatura.


Cronómetro

Acción Efecto
S·S Iniciar / pausar
S·L Resetear a 00:00
M·S Siguiente pantalla (el crono sigue corriendo en segundo plano)

Cuenta hasta 59:59 y se detiene. Los dos puntos parpadean mientras corre.


Cuenta regresiva

Preset por defecto: 59:00. El preset es ajustable por el usuario y se mantiene entre usos.

Acción Efecto
S·S Iniciar / pausar
S·L Resetear al preset actual
M·L Entrar / salir del modo edición del preset
S·S o S·HELD (en edición) Incrementar preset en 1 minuto (01:00 → 59:00 → 01:00)
M·S (en edición) Salir de edición y avanzar pantalla

Al llegar a 00:00: bip 3 (triple pitido), pantalla centellea. Cualquier botón detiene y reinicia al preset.


Ajuste de hora y fecha

Acceso: MENU·L + SELECT·L desde inicio → pantalla SEtC → SELECT·S para entrar.

Campos: HH → MM → DD → Mes → Día semana

  • SELECT·S / HELD: incrementa el campo activo
  • MENU·S: siguiente campo
  • MENU·L: guardar y volver

Alarmas

5 alarmas independientes (A1–A5). Acceso: desde SEtC → MENU·S en SEtC → pantalla SEtA → SELECT·S.

Flujo de edición

Lista (A1 On/OF)
  ├─ S·S  → activar/desactivar alarma
  └─ S·L  → editar:
              HH → MM → dIAS → [Lun…doN → ALL] → bP

dIAS: cabecera del submenú de días de activación.

  • S·L desde dIAS: entrar en el ciclo Lun → MAr → MiE → JuE → UiE → SAb → doN → ALL
  • En cada día: S·S avanza al siguiente, S·L activa/desactiva ese día
  • ALL: S·L activa o desactiva todos los días a la vez

bP (patrón de pitido): S·S cicla 1→2→3→1 con preview sonoro.

M·L en cualquier subestado: guardar y salir a la lista de alarmas.

Patrones de pitido

A 30 Hz (1 tick ≈ 33 ms), ciclo de 96 ticks (~3.2 s):

Patrón Descripción Pitido Pausa entre pitidos
bP1 Un pitido ~400 ms
bP2 Doble pitido ~400 ms ~133 ms
bP3 Triple pitido (Casio) ~400 ms ~133 ms

Duración máxima: 5 minutos (ALARM_MAX_TIME = 9000 ticks). Cualquier botón la apaga.


Configuración

Acceso: MENU·L + SELECT·L → SEtC → MENU·S → SEtA → MENU·S → ConF → SELECT·S para entrar.

Opción Pantalla Valores
Brillo br Auto (0) / 1–10 manual
Calibración temperatura tCAL +0.00 … +1.40 °C
Formato hora 12 12h / 24h
Formato fecha nd DD.MM / MM.DD
Ceros a la izquierda L0 On / OF

MENU·S navega entre opciones. SELECT·S cambia el valor. MENU·S en ConF guarda y sale.


Reset de fábrica

Mantener ambos botones al encender. Resetea la BBSRAM del DS1302 (hora, fecha, alarmas, configuración) a los valores por defecto. Ocurre también automáticamente si la CRC de la BBSRAM es inválida (primera puesta en marcha, batería agotada).


Memoria flash

IAP15W413AS — 13 312 bytes flash unificada (0x0000–0x33FF)

Código ejecutable:          ~9 400 B
Tablas de datos (__code):
  LDR→PWM  [512×2B]            1 024 B  @ 0x2000
  Temp→BCD [1024×2B]           2 048 B  @ 0x2800
  Fuentes 7-seg               256 B  @ 0x3000
  Cadenas de menú             110 B  @ 0x3100
  Datos init DS1302            39 B  @ 0x3200
  Tablas de transición FSM     36 B  @ 0x3300
Total ocupado:             ~11 850 B
Libre:                      ~1 460 B

Interrupciones activas

ISR Frecuencia Función
ISR_PCA (alta prioridad) ~1 kHz Multiplexeo display, control de brillo y centelleo
ISR_T0 100 Hz (cada 10 ms) Timebase, debounce de botones, disparo ADC
ISR_ADC Bajo demanda Lectura LDR y termistor, ajuste de brillo (IIR α=1/64)
ISR_T2 30 Hz (solo alarma activa) Generación del tono del buzzer mediante tabla de patrones

Compilación

# Requisitos
sudo apt-get install sdcc make

# Compilar
make clean && make

# Verificar tamaño
./check_size.sh

check_size.sh verifica que el total compilado no supere los 13 312 bytes del IAP15W413AS.


Flasheo

Conexiones (fuera de socket)

Programador USB-UART     IAP15W413AS DIP-20
────────────────────     ───────────────────
TXD               →      RxD / P3.0  (pin 11)
RXD               →      TxD / P3.1  (pin 12)
GND               →      GND         (pin 10)
VCC (5V)          →      VCC         (pin  8)

Procedimiento (stcgal)

sudo chmod 666 /dev/ttyACM0
stcgal -P stc15 -p /dev/ttyACM0 -t 11059.2 Binary/DIY_Firmware_13k.ihx
# Cuando aparezca "Waiting for MCU..." → ciclar alimentación del reloj

Créditos

Fork de shenghaoyang/stc_led_clock_8k.

About

Firmware for LED clock kits based on the STC 8051 microcontroller family.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages