Tutorial — Práctica 3: Frecuencímetro
Aprende programando: sigue cada paso, escribe tu propio codigo y valida con las preguntas y el examen del laboratorio. Adapta pines y rutinas a tu placa cuando haga falta.
Lo que vas a construir
Medir frecuencia con Timer0 como contador, ventana de 1 s con Timer1 e ISR, y multiplexar tres displays.
-
1 Configura PORTD y PORTE para el display
RD0–RD3 envían el BCD al 74LS48. RE0–RE3 seleccionan el dígito (transistores). Configura ambos puertos como salida. `ADCON1 = 0x0F` deja RA4/T0CKI digital para la entrada de frecuencia.MOVLW 0x0F MOVWF ADCON1 CLRF TRISD CLRF TRISE -
2 Timer0 como contador de pulsos
Configura T0CON: `T0CS = 1` (contador externo), modo 16 bits, incremento en flanco ascendente en RA4/T0CKI. Antes de cada medición limpia TMR0H:TMR0L.MOVLW B'00111000' MOVWF T0CON CLRF TMR0H CLRF TMR0L -
3 Define la ventana de 1 segundo
Durante exactamente 1 s, Timer0 cuenta pulsos externos. Opciones: Timer1 cada 50 ms (20 ticks = 1 s) en ISR, o retardo calibrado `ventana_1s` que debes ajustar en Proteus. Al cerrar la ventana, copia TMR0H:TMR0L a variables `snap` — ese es tu conteo de frecuencia en Hz.Consejo: Pseudocódigo oficial en el reto de diseño de esta práctica.
-
4 Convierte el conteo a centenas, decenas y unidades
Tras la medición, separa el valor en tres dígitos BCD (máx. 999; si overflow, satura en 999). Guarda en variables `centenas`, `decenas`, `unidades` para el multiplexado. -
5 Multiplexa los tres dígitos sin parpadeo
En el bucle principal (o ISR corta): activa un solo dígito en RE, pon el nibble BCD en RD, espera ~2–5 ms, apaga todos, pasa al siguiente. Repite a >50 Hz por dígito. El ojo ve tres dígitos estables.mostrar_digito: ; digito_act = 0..2 ; seleccionar RE, LATD = centenas/decenas/unidades CALL retardo_corto CLRF LATE ; apagar todos RETURN -
6 Calibra con una señal conocida
En Proteus conecta un generador (ej. 100 Hz, 1 kHz). Compara lectura vs valor real. Ajusta `ventana_1s` o recarga de Timer1 hasta que el error sea aceptable. Documenta el rango útil (contador 16 bits → ~65 kHz máx. en 1 s).
Antes de programar — pre-laboratorio
Pre-laboratorio — investigación de referencia
Base de investigación para la Práctica 3 (Frecuencímetro con displays multiplexados, UNEXPO).
P 1 ¿Cómo mide un frecuencímetro la frecuencia de una señal?
Un frecuencímetro cuenta pulsos de la señal desconocida durante un intervalo de tiempo conocido (ventana de medición):
`frecuencia = conteo_de_pulsos / tiempo_ventana`
Ejemplo: si en 1 segundo entran 1000 flancos ascendentes, la frecuencia es 1000 Hz. El PIC usa un timer en modo contador para los pulsos externos y otro recurso (timer o retardo) para definir la ventana.
P 2 Display 7 segmentos multiplexado
Un display multiplexado comparte el bus de segmentos (a–g, dp) entre varios dígitos y activa un dígito a la vez mediante transistores o líneas de selección.
- Ventaja: menos pines (un 74LS48 + 3–4 líneas de dígito en lugar de 7×N segmentos).
- Requisito: refresco rápido (~50 Hz por dígito o más) para persistencia visual sin parpadeo visible.
- En la práctica: decodificador 74LS48, transistores para habilitar cada dígito, Timer para alternar dígito activo.
P 3 Timers como contador de eventos externos
Timer0 o Timer1 pueden incrementarse con pulsos externos en el pin T0CKI / T1CKI (según montaje del PDF):
- Configurar prescaler si hace falta ampliar rango.
- Leer registro de 16 bits (TMR0H:TMR0L o TMR1H:TMR1L) al cerrar la ventana.
- Vaciar contador al iniciar nueva medición.
La ventana de 1 s puede lograrse con otro timer en modo temporizador o con bucle calibrado + interrupciones.
Relaciona Timer0/Timer1 del curso con ventana de medición y refresco del display.
Disena tu solucion
Diseño antes del código
La guía oficial pide pseudocódigo y diagrama de flujo antes del .ASM. Escribe los tuyos primero; después desbloqueas la guía de referencia.
- 1. Pseudocódigo
- 2. Diagrama de flujo
- 3. Guía de referencia
Escribe tu pseudocódigo
Incluye: Timer0 como contador, Timer1 como base de 50 ms, contador CNT_50MS (20×50 ms = 1 s), multiplexado y la ISR (guardar/restaurar contexto).
0 caracteres (mínimo 80)
Describe tu diagrama de flujo
En papel o aquí: lista cada símbolo en orden. Tu informe necesita óvalos, rectángulos, rombos y el bucle principal.
0 caracteres (mínimo 60)
Mi borrador de pseudocódigo
Mi borrador de diagrama de flujo
Pseudocódigo de referencia
INICIO
Configurar el PIC18F4550.
Configurar los pines analógicos como digitales.
Configurar RA4/T0CKI como entrada de frecuencia.
Configurar el puerto D como salida para el 74LS48 y los transistores de selección.
Inicializar las variables:
FLAG_1S ← 0
CNT_50MS ← 20
CENTENAS ← 0
DECENAS ← 0
UNIDADES ← 0
Configurar Timer0:
Modo contador externo.
Entrada por RA4/T0CKI.
Modo de 16 bits.
Sin prescaler.
Conteo por flanco ascendente.
Limpiar TMR0H y TMR0L.
Encender Timer0.
Configurar Timer1:
Modo temporizador interno.
Prescaler 1:8.
Carga inicial para interrupciones cada 50 ms.
Habilitar interrupción de Timer1.
Habilitar interrupciones periféricas y globales.
Encender Timer1.
REPETIR SIEMPRE
Multiplexar los displays:
Mostrar centenas.
Esperar retardo corto.
Apagar displays.
Mostrar decenas.
Esperar retardo corto.
Apagar displays.
Mostrar unidades.
Esperar retardo corto.
Apagar displays.
SI FLAG_1S = 1 ENTONCES
FLAG_1S ← 0
Convertir el conteo capturado del Timer0 a BCD.
SI el conteo es mayor que 999 ENTONCES
CENTENAS ← 9
DECENAS ← 9
UNIDADES ← 9
SINO
Separar el conteo en centenas, decenas y unidades.
FIN SI
FIN SI
FIN REPETIR
INTERRUPCIÓN TIMER1
Guardar contexto del programa.
SI la interrupción fue causada por Timer1 ENTONCES
Limpiar bandera de interrupción de Timer1.
Recargar Timer1 para generar nuevamente 50 ms.
CNT_50MS ← CNT_50MS - 1
SI CNT_50MS = 0 ENTONCES
CNT_50MS ← 20
Detener Timer0.
Leer TMR0L y TMR0H.
Guardar el conteo de pulsos medido.
Limpiar TMR0H y TMR0L.
Encender nuevamente Timer0.
FLAG_1S ← 1
FIN SI
FIN SI
Restaurar contexto del programa.
Retornar de la interrupción. Diagrama de flujo de referencia
Construye y adapta el codigo
Practica · UNEXPO
Práctica 3 de Laboratorio
Frecuencímetro con displays 7 segmentos multiplexados. Usa timers para ventana de medición y refresco del display.
Conceptos clave
Sección titulada «Conceptos clave»- Timer como contador de pulsos externos
- Multiplexación de displays para reducir pines
- Persistencia visual con refresco rápido (~50 Hz por dígito)
- Cálculo: frecuencia = conteo / tiempo de ventana
Relación con el curso
Sección titulada «Relación con el curso»Combina Timer0/Timer1 en modo contador, GPIO y posiblemente interrupciones para el refresco.
Código fuente de referencia
Sección titulada «Código fuente de referencia»Despues de programar — post-laboratorio
Post-laboratorio — investigación de referencia
Preguntas de análisis tras implementar el frecuencímetro.
P 1 ¿Qué error introduce un refresco lento del display multiplexado?
Si el refresco es demasiado lento (< ~30 Hz por dígito), el ojo percibe parpadeo y los dígitos parecen encenderse de forma independiente. Si el refresco pausa la medición demasiado tiempo, puede distorsionar la ventana de conteo. La solución es usar interrupciones periódicas cortas para el multiplexado sin bloquear el conteo de pulsos.
P 2 Límites de medición con contador de 16 bits
Un contador de 16 bits cuenta hasta 65535. Con ventana de 1 s, la frecuencia máxima medible sin desbordar es ~65 kHz (teórico). Por encima hay que usar prescaler o ventana más corta. En el informe indica el rango útil de tu diseño.
Compara frecuencia medida en Proteus con el generador de señales configurado.
Comprueba lo aprendido
Exámenes por nivel de dificultad
Abre cada nivel cuando estés listo. El básico es público; intermedio y UNEXPO requieren cuenta CALETAS para calificar respuestas.
Básico Nivel básico — Concepto y montaje 3 preguntas
Medición de frecuencia y displays multiplexados.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASIntermedio Nivel intermedio — Timers y cálculo 3 preguntas
Ventana de medición, contador y refresco.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETASUNEXPO Nivel UNEXPO — Diseño completo 3 preguntas
Oral sobre multiplexado, rango y errores de medición.
0 de 0 respondidas
Inicia sesion en CALETAS para sincronizar este resultado entre dispositivos.
Iniciar sesion en CALETAS