0% encontró este documento útil (0 votos)
33 vistas8 páginas

Temporizador/Contador PIC18F45K50

Cargado por

domihuamani7
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
33 vistas8 páginas

Temporizador/Contador PIC18F45K50

Cargado por

domihuamani7
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ing.

Electrónica – Microcontroladores

TEMPORIZADOR/CONTADOR CON PIC18F45K50

Un temporizador contador PIC es un registro que aumenta su valor en una unidad con cada 4 ciclos de reloj
al cual se encuentre funcionando el microcontrolador PIC, si por ejemplo la frecuencia del oscilador es de
4MHz, entonces el ciclo de trabajo del microcontrolador PIC será de 1us, por lo que el temporizador contador
PIC aumentará su valor de uno en uno en cada microsegundo; por ejemplo, cuando el temporizador aumenta
su valor en 10 unidades habrán transcurrido 10us.

El temporizador contador PIC es utilizado para obtener medidas de tiempos muy precisas, de ahí que se
le da el nombre de temporizador, en este caso el temporizador contador PIC funciona con el reloj del
sistema; pero también puede ser utilizado para realizar conteos, por lo que también se le llama contador,
en este caso el temporizador contador PIC ya no aumenta su valor de uno en uno en cada ciclo de trabajo,
sino que lo hará mediante el flanco de subida o el flanco de bajada de alguna señal que llegue a un pin del
PIC, estos pines son identificados como TxCKI donde x es el número temporizador contador PIC que será
usado como contador.

El temporizador contador PIC puede producir interrupciones.

Los microcontroladores PIC suelen tener varios temporizadores, como ejemplo se utilizará el
PIC18f45k50, el cual tiene 3 temporizadores que son llamados timer0, timer1/3 y timer2, el tiempo que
tarda el temporizador contador PIC en aumentar su valor de unidad en unidad, se puede modificar por
programa mediante el uso de prescalers, siendo de esta manera mucho más provechosos;
dependiendo del modelo de microcontrolador utilizado, no todos los temporizadores pueden ser utilizados
como temporizador y también como contador.

El temporizador contador PIC puede aumentar sus valores de 0 a 255 si es de 8 bits como el timer0, o de
0 a 65535 si es de 16 bits como el timer0 y timer1, cada vez que estos registros alcanzan su máximo valor
se reinician, volviendo a contar desde su valor mínimo hasta su máximo, además pueden ser programados
para provocar interrupciones.

Para el uso del temporizador contador PIC se cuenta además con un grupo de registros mediante los
cuales se puede lo puede configurar de acuerdo con las necesidades que se tengan.

Ing. Luis Gutiérrez Magán


1
Ing. Electrónica – Microcontroladores

TIMER0

Veremos el uso del Timer0 como contador y temporizador, el procedimiento para otros microcontroladores
es similar al que se ve acá. Como TMR0 es un registro de 8 bits, puede tomar valores desde 0 hasta
255, aumentando de uno en uno con cada 4 ciclos de reloj, esto debido a que cada ciclo de instrucción
equivale a 4 ciclos de reloj, así, si el oscilador que tenemos es de 4MHz el Timer0 aumentará en una unidad
cada 1us. Si usamos el TMR0 como contador solo aumentará si ocurre un flanco de subida o de bajada
por el pin T0CKI (pin RA4 en el microcontrolador 18F45K50), según se haya configurado el bit 5 del registro
T0CON (TOSE). El registro TMR0 puede ser leído y escrito, puede ser prescalado, para que el tiempo en su
incremento de valor en una unidad sea mayor. Cuando alcanza su valor máximo se reinicia y cambia el
estado del bit 2 del registro INTCON (TMR0IF), lo pone en 1 indicando que se ha desbordado el registro
TMR0.

El módulo Temporizador/Contador presenta las siguientes características

• Registro Contador de 8bits o 16bits seleccionable por Software.


• Ambos registros de Lectura/Escritura.
• 8 bits dedicados al Prescaler programable por Software.
• Fuente de Reloj Interno o Externo (Seleccionable por Software).
• Flanco seleccionable del reloj Externo.
• Interrupción por desbordamiento.

Ing. Luis Gutiérrez Magán


2
Ing. Electrónica – Microcontroladores

Operación del Timer0


El Timer0 puede operar como contador o temporizador, este modo se selecciona a través del bit T0CS del
registro T0CON. En el modo temporizado, el conteo del registro TMR0 se incrementa de forma ascendente a cada
ciclo de reloj interno hasta su valor máximo de 255 (0xFF), en este preciso instante el registro se desborda y se
reinicia a 0. Sin embargo, en el modo contador el incremento se realiza a través de un flanco ascendente o
descendente del pin RA4/T0CKI, el flanco está determinado por el bit T0SE del registro T0CON. También, se
puede seleccionar un prescaler en cada modo del TIMER0 para poder realizar el incremento cada 1, 2, 3, 4,… ciclos
de reloj, todo esto depende del valor de los bits PSA y T0PS[2;0] del registro T0CON. Por último, se puede
habilitar un evento de interrupción para cada desbordamiento del TMR0 a través de los
bits TMR0IE y TMR0IF del registro INTCON.
Los pasos para configurar el temporizador o contador:

1. Deshabilitar la Interrupción GLOBAL (para evitar Interrupciones falsas).


2. Configurar la Fuente de reloj para el TIMER0 a través del bit
3. Configurar el Prescaler a través de los bits T0PS2:T0PS0.
4. Seleccionar el flanco de la fuente de Reloj (solo en modo Contador).
5. Poner en Marcha el TIMER0 escribiendo en el bit TMR0ON.
6. Escribir en los registros TMR0H:TMR0L para configurar el Tiempo de Interrupción.
7. Habilitar la Interrupción por Desbordamiento escribiendo el bit TMR0IE.
8. Habilitar la Interrupción GLOBAL (GIE y PEIE).

Para hacer el cálculo del período de interrupción por desbordamiento del Timer0, es necesario usar las siguientes
fórmulas:
MODO TEMPORIZADOR

Modo 8 bits 4
𝑇= ∗ [𝑃𝑅𝐸𝑆𝐶𝐴𝐿𝐸𝑅] ∗ [255 − 𝑇𝑀𝑅0]
𝐹𝑂𝑆𝐶
Modo 16 bits 4
𝑇= ∗ [𝑃𝑅𝐸𝑆𝐶𝐴𝐿𝐸𝑅] ∗ [65535 − 𝑇𝑀𝑅0]
𝐹𝑂𝑆𝐶

MODO CONTADOR

Modo 8 bits 4
𝑇= ∗ [𝑃𝑅𝐸𝑆𝐶𝐴𝐿𝐸𝑅] ∗ [255 − 𝑇𝑀𝑅0]
𝐹𝐸𝑋𝑇𝐸𝑅𝑁𝐴
Modo 16 bits 4
𝑇= ∗ [𝑃𝑅𝐸𝑆𝐶𝐴𝐿𝐸𝑅] ∗ [65535 − 𝑇𝑀𝑅0]
𝐹𝐸𝑋𝑇𝐸𝑅𝑁𝐴

Ing. Luis Gutiérrez Magán


3
Ing. Electrónica – Microcontroladores

TIMER0 COMO CONTADOR


Circuito del Timer0 como contador
El circuito utilizado para el ejemplo del uso del Timer0 como contador es el que se muestra en la
imagen, la señal de entrada llega al pin T0CKI la generamos con un pulsador, cada vez que se presiona
y se suelta se genera un flanco de subida, este flanco es leído por el T0CKI, esto hace que el registro
TMR0 incremente su valor, este valor es visualizado por el puerto D, en el que se visualizara el conteo
binario hasta 15, cuando cuenta el pulso 16 se resetea a cero y se repite el proceso.

Configuración del registro T0CON para el ejemplo

Numero de bit Descripción de la configuración


Bit 7 (TMR0ON) Esta en valor 1 por defecto
Bit 6 (T08BIT) Valor 1 para que sea de 8 bits

Bit 5 (TOCS) Se pondrá a 1 porque se utilizará el timer0 PIC como contador


Bit 4 (TOSE) Se pondrá a 1 porque el conteo será por flanco de bajada
Bit 3 (PSA) Esta en 1 para deshabilitar el prescaler
Bit 2-1-0 (PSx) No interesa el dato porque no se usa prescaler

También el bit GIE del registro INTCON se pone a cero para deshabilitar las interrupciones globales.

Ing. Luis Gutiérrez Magán


4
Ing. Electrónica – Microcontroladores

Timer0 como contador, código en ensamblador

Timer0 como temporizador, código en ensamblador

Ing. Luis Gutiérrez Magán


5
Ing. Electrónica – Microcontroladores

Timer0 como contador, código en lenguaje XC8

Ing. Luis Gutiérrez Magán


6
Ing. Electrónica – Microcontroladores

TIMER0 COMO TEMPORIZADOR


Se verá en este caso el uso del timer0 PIC como temporizador, normalmente el registro TMR0 del
timer0 PIC irá aumentando sus valores con cada ciclo de instrucción del microcontrolador PIC, y
para estos microcontroladores a cada ciclo de instrucción le toma 4 ciclos del oscilador que se esté
utilizando, si se usa por ejemplo un cristal de Fosc=4Mhz entonces cada ciclo del oscilador será de
0,25us, luego cada ciclo de instrucción tardará 4 veces este valor, es decir 4*(0,25us) lo que viene a ser
1us, a esto se conoce como 1Tick, entonces el registro TMR0 aumentará en una unidad cada
microsegundo cuando el oscilador es de 4Mhz.

Si se usa el registro TMR0 en modo de 8 bits este aumentará desde 0 o desde algún valor que se le ponga
como valor inicial hasta un máximo de 255, por ejemplo si va desde 0 hasta 255 habrán transcurrido 255us
luego volverá a 0 pero en esa vuelta a 0 transcurre 1us más, por lo que en ir de 0 a 255 y volver a 0
transcurren 256us; no siempre se utiliza una FOSC de 4Mhz esto puede variar, por lo que como
consecuencia variará el tiempo que trascurre para que el registro TMR0 aumente su valor en una unidad.

El temporizador contador pic TMR0 cuenta con lo que se conoce como prescaler esto hace que la
frecuencia de trabajo FOSC se divida por este prescaler, con lo que se logra que el temporizador
contador pic tarde un poco más en aumentar su valor en una unidad; el prescaler del Timer0 PIC para el
PIC18F45K50 puede tomar el valor de 1, 2, 4, 8, 16, 32, 64, 128 o 256; estos valores se eligen mediante
las combinaciones de los bits 0, 1 y 2 del registro T0CON, los bits son conocidos como TOPS<2:0>

Si el prescaler elegido es por ejemplo de 64 y la FOSC=4Mhz, entonces la frecuencia de trabajo del


temporizador Ftemp será de Ftemp=FOSC/(4*prescaler), el tiempo que tardará ahora el
temporizador en aumentar una unidad será la inversa de este valor, a lo que se le conoce como periodo
del temporizador Ttemp=(4*prescaler)/(FOSC), por lo que en este caso Ttemp=(4*64)/(4Mhz) de
donde Ttemp=64us, esto quiere decir que ahora el temporizador aumentará en una unidad cada 64us y en
este caso entonces el registro TMR0 para ir de 0 a 255 tardará 255*Ttemp=255*64us=16320us=16,32ms,
la misma idea es para los demás prescaler.

Al utilizar los prescaler se tiene la ventaja de temporizar tiempos más largos, pero muchas veces se
vuelven demasiado largos si el registro TMR0 se inicia a 0, por lo que para temporizar tiempos que se
quieren por ejemplo para temporizar 50ms con el uso del timer0 PIC se tendría que utilizar un prescaler
adecuado e iniciar el registro TMR0 a un valor también adecuado. Tiempo de desbordamiento o
Temporización es cada cuanto queremos que se desborde el conteo del Timer0. En base a ese dato podemos
hallar el valor con el que se debe cargar al registro TMR0 para que desde ahí se inicie el conteo.

𝑇𝑒𝑚𝑝𝑜𝑟𝑖𝑧𝑎𝑐𝑖ó𝑛 = ሺ256 − 𝐶𝑎𝑟𝑔𝑎𝑇𝑀𝑅0ሻ ∗ 1𝑇𝑖𝑐𝑘

1𝑇𝑖𝑐𝑘 = 𝑇𝑐𝑚 ∗ 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟


𝑇𝑒𝑚𝑝𝑜𝑟𝑖𝑧𝑐𝑖ó𝑛
𝐶𝑎𝑟𝑔𝑎𝑇𝑀𝑅0 = 256 −
1𝑇𝑖𝑐𝑘

Ing. Luis Gutiérrez Magán


7
Ing. Electrónica – Microcontroladores

Timer0 como temporizador, código en XC8


Nota:

En todos los ejemplos puestos en este documento no se incluye la palabra de


configuración del grabador

Ing. Luis Gutiérrez Magán


8

También podría gustarte