Página 1 de 10
Caso Diseño
Uso de temporizadores
Planteamiento del problema
Se requiere el diseño de un generador de señales cuadradas (0-5V) con frecuencia ajustable, que funcione en
tres escalas (Hz, kHz, MHz). La salida debe ser el pin RC0, y los pines RD0, RD1, RD2 se utilizarían como
indicadores de escala respectivamente. Utilice para ello el MCU PICmicro 18F4550 y la circuitería periférica
necesaria para su operación adecuada.
Requerimientos y restricciones:
Escoja el Timer 0 para la implementación.
¿Cuál es la resolución de operación del temporizador que conviene utilizar y porque?
Frecuencia de operación del MCU es 8 MHz, con oscilador interno.
El ajuste de la frecuencia de funcionamiento del generador debe hacerse utilizando un potenciómetro
conectado a AN0 del MCU y las señales INT0, INT1, INT2 se usan para seleccionar la escala.
Utilice el ADC con alineación izquierda para variar la frecuencia de salida del sistema.
¿Cuál es el % de error teórico en la señal generada?
Implemente el Hardware requerido para la operación deseada.
o Diagrama de primer nivel
o Diagrama de segundo nivel
o Diagrama de tercer nivel (Esquemático)
Implemente el software para la operación adecuada del sistema.
o Diagrama de flujo general
o Diagrama de flujo específico
Página 2 de 10
Para recordar:
El microcontrolador PIC18F4550 dispone de un conjunto de temporizadores para manejar eficientemente
todas las operaciones que involucran al tiempo y al conteo de eventos. El TMR0 se puede utilizar como
temporizador o contador ascendente con un tamaño de 8 o 16 bits. Los registros TMR0H:TMR0L guardan el
valor inicial del conteo. Este valor evoluciona desde 0000h hasta FFFFh, instante en el que se activa la
bandera TMR0IF y se regresa al valor de 0000h. Se puede provocar una petición de interrupción si se desea.
El diagrama muestra como se puede realizar el conteo a partir del reloj de Fosc/4 directamente o una señal
predividida. También se puede utilizar como contador de pulsos desde la patilla T0CKI, ya sea en flanco
negativo o positivo, según la patilla T0SE.
Figura 1. Diagrama del TMR0 tomado de la hoja de datos del PIC18F4550
Recuerde que para la operación en 16 bits, a la hora de ingresar la precarga en los registros de cuenta
TMR0H:TMR0L se debe ingresar primero el valor del registro TMR0H y sucesivamente el del TMR0L.
Para calcular el valor de esta precarga se utiliza la ecuación (1).
Página 3 de 10
2. Diagramas de bloques
Los diagramas de bloques de la propuesta se detallan a continuación.
Figura 2. Diagrama de bloques de primer nivel
Figura 3. Diagrama de bloques de segundo nivel
Página 4 de 10
Figura 4. Diagrama esquemático del circuito del caso
Página 5 de 10
2.Análisis de la solución
Se pide utilizar el TMR0, el cual tiene la principal ventaja de poder ingresar un preescalamiento de frecuencia
de hasta 1:256, lo cual es conveniente para manejar un amplio rango de tiempos.
Para responder a la pregunta ¿Cuál es la resolución de operación del temporizador que conviene utilizar y
porque?, se debe de analizar concretamente cada modo de operación (Hz, kHz, MHz) y definir qué rango será
utilizado en cada caso.
En primera instancia se debe reconocer que la máxima frecuencia disponible es de Fosc/4, es decir, 2MHz, lo
cual es una limitante para el rango de MHz.
Para realizar el generador, se supondrá que se quiere obtener una señal de salida cuadrada con un 50% de
ciclo de trabajo. Sin embargo, es necesario tomar en cuenta que el desbordamiento del TMR0 indicará un
cambio por cada medio ciclo. Observe la siguiente figura:
V
t/ms
0.5ms
1ms
Figura 5. Señal de 1000Hz
En este caso para obtener una señal de 1kHz (periodo de 1ms), es necesario que el TMR0 funcione al doble
de la frecuencia (periodo de 0.5ms) para que indique el cambio del bit, y poder en cuestión de dos conteos del
TMR0 obtener un periodo completo de la señal cuadrada deseada.
Esta consideración permite llegar a la conclusión de que la máxima frecuencia que se puede generar en la
salida es de 1MHz!!!
2.1. Escala Hz
Se supondrá que en este rango se podrá variar la frecuencia desde 1Hz hasta 1000Hz. Debido a las
consideraciones anteriores, esto significa que se debe de configurar el TMR0 desde los rangos de 2Hz hasta
2000Hz. Se utilizará el preescalador de 1:256 para este caso que permite sin problema alcanzar frecuencias
de 2Hz sin problema. Con la ecuación (1) se calculan los valores de las precargas de los límites, ya sea
cuando el ADC está en 0, o por el otro lado en el máximo 255.
Tabla 1. Valores límite para precarga en Hz
Frecuencia x ADRESH
2 Hz 61629 0
2000 Hz 65532 255
Con estos valores se puede trazar una curva de modo que al obtener la ecuación de la recta se encuentre una
función aproximada para realizar el ajuste de la medición del potenciómetro convertida a un valor de
frecuencia dentro del rango.
Página 6 de 10
Figura 6. Curva de ajuste para escala de Hz
Como sólo se trabajarán números enteros, la ecuación aproximada para el ajuste es:
2.2. Escala kHz
La selección de la ecuación de ajuste en este caso se hará considerando que:
- La máxima frecuencia será de 1Mhz, obtenida con 2MHz del TMR0 sin preescalador y con la precarga en su
máximo valor 65535.
- Se busca una pendiente de un valor entero para no sobrepasar el valor máximo.
Tabla 2. Valores límite para precarga en kHz
Frecuencia x ADRESH
1,960kHz 64515 0
2000 kHz 65535 255
La selección de la frecuencia menor se realizó por conveniencia para obtener directamente una pendiente de
valor exacto.
y = 15,302x + 61629
60000
61000
62000
63000
64000
65000
66000
0 255
Página 7 de 10
Figura 7. Curva de ajuste para escala de kHz
La ecuación del ajuste es:
2.3. Escala MHz
En este caso se utilizará siempre el TMR0 generando desbordamientos cada 2MHz, para obtener una única
salida a 1MHz.
3. Diagramas de flujo
A continuación los diagramas de flujo: principal, interrupciones y subrutina del ADC.
y = 4x + 64515
60000
61000
62000
63000
64000
65000
66000
0 255
Página 8 de 10
Rutina principal
Configuración de los bits
Mainprogram
Deshabilitar interrupciones
Inicialización
Habilitar interrupciones
Subrutina LeeADC
Borrar bandera TMR0IF
Bit toggle RC0 (BTG)
Puertos E/S
ADC
TMR0
Interrupciones
TMR0IF=1?
Escala MHz?
NO
SINO
Página 9 de 10
Rutina INT0 (Hz)
Rutina INT1 (kHz)
Rutina INT2 (MHz)
Borrar bandera INT0IF
INT0
m=15
b=61629
Retorno
Borrar bandera INT2IF
INT2
Config TMR0 sin preescala
TMR0H:TMR0L=0xFFFF
Retorno
Config TMR0 preescala 1:256
Borrar bandera INT1IF
INT1
m=4
b=64515
Retorno
Config TMR0 sin preescala
Página 10 de 10
Subrutina LeeADC
NO
SI
Set GO/DONE!
LeeADC
Retorno
GO/DONE!=0 ?

Caso timers

  • 1.
    Página 1 de10 Caso Diseño Uso de temporizadores Planteamiento del problema Se requiere el diseño de un generador de señales cuadradas (0-5V) con frecuencia ajustable, que funcione en tres escalas (Hz, kHz, MHz). La salida debe ser el pin RC0, y los pines RD0, RD1, RD2 se utilizarían como indicadores de escala respectivamente. Utilice para ello el MCU PICmicro 18F4550 y la circuitería periférica necesaria para su operación adecuada. Requerimientos y restricciones: Escoja el Timer 0 para la implementación. ¿Cuál es la resolución de operación del temporizador que conviene utilizar y porque? Frecuencia de operación del MCU es 8 MHz, con oscilador interno. El ajuste de la frecuencia de funcionamiento del generador debe hacerse utilizando un potenciómetro conectado a AN0 del MCU y las señales INT0, INT1, INT2 se usan para seleccionar la escala. Utilice el ADC con alineación izquierda para variar la frecuencia de salida del sistema. ¿Cuál es el % de error teórico en la señal generada? Implemente el Hardware requerido para la operación deseada. o Diagrama de primer nivel o Diagrama de segundo nivel o Diagrama de tercer nivel (Esquemático) Implemente el software para la operación adecuada del sistema. o Diagrama de flujo general o Diagrama de flujo específico
  • 2.
    Página 2 de10 Para recordar: El microcontrolador PIC18F4550 dispone de un conjunto de temporizadores para manejar eficientemente todas las operaciones que involucran al tiempo y al conteo de eventos. El TMR0 se puede utilizar como temporizador o contador ascendente con un tamaño de 8 o 16 bits. Los registros TMR0H:TMR0L guardan el valor inicial del conteo. Este valor evoluciona desde 0000h hasta FFFFh, instante en el que se activa la bandera TMR0IF y se regresa al valor de 0000h. Se puede provocar una petición de interrupción si se desea. El diagrama muestra como se puede realizar el conteo a partir del reloj de Fosc/4 directamente o una señal predividida. También se puede utilizar como contador de pulsos desde la patilla T0CKI, ya sea en flanco negativo o positivo, según la patilla T0SE. Figura 1. Diagrama del TMR0 tomado de la hoja de datos del PIC18F4550 Recuerde que para la operación en 16 bits, a la hora de ingresar la precarga en los registros de cuenta TMR0H:TMR0L se debe ingresar primero el valor del registro TMR0H y sucesivamente el del TMR0L. Para calcular el valor de esta precarga se utiliza la ecuación (1).
  • 3.
    Página 3 de10 2. Diagramas de bloques Los diagramas de bloques de la propuesta se detallan a continuación. Figura 2. Diagrama de bloques de primer nivel Figura 3. Diagrama de bloques de segundo nivel
  • 4.
    Página 4 de10 Figura 4. Diagrama esquemático del circuito del caso
  • 5.
    Página 5 de10 2.Análisis de la solución Se pide utilizar el TMR0, el cual tiene la principal ventaja de poder ingresar un preescalamiento de frecuencia de hasta 1:256, lo cual es conveniente para manejar un amplio rango de tiempos. Para responder a la pregunta ¿Cuál es la resolución de operación del temporizador que conviene utilizar y porque?, se debe de analizar concretamente cada modo de operación (Hz, kHz, MHz) y definir qué rango será utilizado en cada caso. En primera instancia se debe reconocer que la máxima frecuencia disponible es de Fosc/4, es decir, 2MHz, lo cual es una limitante para el rango de MHz. Para realizar el generador, se supondrá que se quiere obtener una señal de salida cuadrada con un 50% de ciclo de trabajo. Sin embargo, es necesario tomar en cuenta que el desbordamiento del TMR0 indicará un cambio por cada medio ciclo. Observe la siguiente figura: V t/ms 0.5ms 1ms Figura 5. Señal de 1000Hz En este caso para obtener una señal de 1kHz (periodo de 1ms), es necesario que el TMR0 funcione al doble de la frecuencia (periodo de 0.5ms) para que indique el cambio del bit, y poder en cuestión de dos conteos del TMR0 obtener un periodo completo de la señal cuadrada deseada. Esta consideración permite llegar a la conclusión de que la máxima frecuencia que se puede generar en la salida es de 1MHz!!! 2.1. Escala Hz Se supondrá que en este rango se podrá variar la frecuencia desde 1Hz hasta 1000Hz. Debido a las consideraciones anteriores, esto significa que se debe de configurar el TMR0 desde los rangos de 2Hz hasta 2000Hz. Se utilizará el preescalador de 1:256 para este caso que permite sin problema alcanzar frecuencias de 2Hz sin problema. Con la ecuación (1) se calculan los valores de las precargas de los límites, ya sea cuando el ADC está en 0, o por el otro lado en el máximo 255. Tabla 1. Valores límite para precarga en Hz Frecuencia x ADRESH 2 Hz 61629 0 2000 Hz 65532 255 Con estos valores se puede trazar una curva de modo que al obtener la ecuación de la recta se encuentre una función aproximada para realizar el ajuste de la medición del potenciómetro convertida a un valor de frecuencia dentro del rango.
  • 6.
    Página 6 de10 Figura 6. Curva de ajuste para escala de Hz Como sólo se trabajarán números enteros, la ecuación aproximada para el ajuste es: 2.2. Escala kHz La selección de la ecuación de ajuste en este caso se hará considerando que: - La máxima frecuencia será de 1Mhz, obtenida con 2MHz del TMR0 sin preescalador y con la precarga en su máximo valor 65535. - Se busca una pendiente de un valor entero para no sobrepasar el valor máximo. Tabla 2. Valores límite para precarga en kHz Frecuencia x ADRESH 1,960kHz 64515 0 2000 kHz 65535 255 La selección de la frecuencia menor se realizó por conveniencia para obtener directamente una pendiente de valor exacto. y = 15,302x + 61629 60000 61000 62000 63000 64000 65000 66000 0 255
  • 7.
    Página 7 de10 Figura 7. Curva de ajuste para escala de kHz La ecuación del ajuste es: 2.3. Escala MHz En este caso se utilizará siempre el TMR0 generando desbordamientos cada 2MHz, para obtener una única salida a 1MHz. 3. Diagramas de flujo A continuación los diagramas de flujo: principal, interrupciones y subrutina del ADC. y = 4x + 64515 60000 61000 62000 63000 64000 65000 66000 0 255
  • 8.
    Página 8 de10 Rutina principal Configuración de los bits Mainprogram Deshabilitar interrupciones Inicialización Habilitar interrupciones Subrutina LeeADC Borrar bandera TMR0IF Bit toggle RC0 (BTG) Puertos E/S ADC TMR0 Interrupciones TMR0IF=1? Escala MHz? NO SINO
  • 9.
    Página 9 de10 Rutina INT0 (Hz) Rutina INT1 (kHz) Rutina INT2 (MHz) Borrar bandera INT0IF INT0 m=15 b=61629 Retorno Borrar bandera INT2IF INT2 Config TMR0 sin preescala TMR0H:TMR0L=0xFFFF Retorno Config TMR0 preescala 1:256 Borrar bandera INT1IF INT1 m=4 b=64515 Retorno Config TMR0 sin preescala
  • 10.
    Página 10 de10 Subrutina LeeADC NO SI Set GO/DONE! LeeADC Retorno GO/DONE!=0 ?