Ir al contenido

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. 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. 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. 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. 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. 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. 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. 1. Pseudocódigo
  2. 2. Diagrama de flujo
  3. 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)

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.

  • 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

Combina Timer0/Timer1 en modo contador, GPIO y posiblemente interrupciones para el refresco.

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

Un frecuencímetro mide frecuencia como…
Display multiplexado significa…
El decodificador 74LS48 convierte…
Intermedio Nivel intermedio — Timers y cálculo 3 preguntas

Ventana de medición, contador y refresco.

0 de 0 respondidas

Si cuentas 2500 pulsos en 1 segundo, la frecuencia es…
Timer en modo contador incrementa con…
Refresco ~50 Hz por dígito evita…
UNEXPO Nivel UNEXPO — Diseño completo 3 preguntas

Oral sobre multiplexado, rango y errores de medición.

0 de 0 respondidas

Contador 16 bits sin prescaler, ventana 1 s: frecuencia máxima teórica ≈
Si el refresco del display bloquea mucho tiempo el conteo…
En oral: ¿por qué multiplexar en lugar de un display por pin?

Panel de tutoriales · Ejercicios