Timer 0, 1, 2

Nombre: John Andrés Trujillo Fecha: 9 de mayo de 2015 NRC: 2219 Consulta sobre temporizadores y el códifo ASCII La mayo

Views 192 Downloads 22 File size 867KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Nombre: John Andrés Trujillo Fecha: 9 de mayo de 2015 NRC: 2219

Consulta sobre temporizadores y el códifo ASCII La mayoría de los microcontroladores tienen uno o varios timers. Serán muy útiles para medir el tiempo que ha pasado entre dos eventos, establecer tareas para ejecutarse a intervalos regulares, etc. Dependiendo del modelo los PICs cuentan con un número variable de timers. Un timer no es más que un contador cuya entrada está conectada al reloj del sistema. La mayoría de los timers pueden reconfigurarse como contadores. En ese caso, en lugar de contar pulsos de reloj cuentan los pulsos que llegan a un determinado pin. A continuación una serie de descripciones tomadas de (El temporizador timer 0 en los microcontroladores PIC, n.d.), (El temporizador timer 1 en los microcontroladores PIC, n.d.), (El temporizador timer 2 en los microcontroladores PIC, n.d.) y (Código ascii, n.d.)

Temporizador Timer 0 El Timer 0 es un modulo temporizador/contador de 8 bits que cuenta con un preescalador programable también de 8 bits. Puede funcionar como temporizador o como contador. En modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instrucción (o cada X ciclos dependiendo del preescalador). En modo contador el valor del registro TMR0 se incrementa en cada flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al desbordarse (pasar de 0xFF a 0x0) el registro TMR0 la bandera de interrupción del timer 0 (bit T0IF del registro INTCON) se pone a 1.

El modo temporizador se selecciona poniendo a cero el bit T0CS del registro OPTION. Poniendo a uno ese bit el modulo trabaja en modo contador, en este modo de operación además se debe seleccionar si el incremento se producirá en cada filo ascendente o descendente, al poner a cero el bit T0SE del registro OPTION se selecciona el filo ascendente. El preescalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un módulo o a otro mediante el bit PSA del registro OPTION. Poniendo el bit a 1 el preescalador se asigna al Watchdog y poniendolo a 0 el preescalador se asigna al Timer 0. El valor del preescalador se selecciona con los bits PS2:PS0 de la siguiente manera: P S2 :P 20 0 00 0 01 0 10 0 11

1 00

T M R 0 1 : 2 1 : 4 1 : 8 1 : 1 6 1 : 3 2

W D T 1: 1 1: 2 1: 4 1: 8

1: 16

1 01

1 10

1 11

1 : 6 4 1 : 1 2 8 1 : 2 5 6

1: 32

1: 64

1: 12 8

Carga y temporización En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de instrucción. Este modo sirve para generar temporizaciones y bases de tiempo de la misma forma que los retardos por software, sin embargo las temporizaciones con el Timer 0 pueden ser más exactas y además se cuenta con la ventaja de que el módulo puede trabajar mediante interrupciones así que el programa puede ejecutar otras isntrucciones mientras se realiza la temporización. La temporización que se puede obtener con este módulo se obtiene de la siguiente relación:

Temporización=[(256− precarga)∗PS+2]∗Tinstruccion Donde:   

precarga = Valor que se le asigna al registro TMR0 al comenzar la temporización PS = Preescalador. Si esta asignado al watchdog tomará el valor de 1 Tinstrucción = 4/frecuencia de oscilación

La temporización está dada en segundos hallando la máxima utilizando el oscilador interno del pic 16f628 es: Temp.max. = [(256 - 0)*256+2]*1uS = 65528uS De modo que la temporizacion máxima que se puede tener con el es solamente de 65.538mS. Si se desea obtener una temporizacion distinta solo se debe escribir en el registro TMR0 el valor de la precarga necesaria.

precarga=−[([Temporizacion /(4 /fosc)]−2)/PS]+ 256 Donde, de nuevo, la temporización está dada en segundos.

Temporizador Timer 1

El Timer 1 es un módulo temporizador/contador de 16 bits, que consiste en dos registros de 8 bits (TMR1H y TMR1L) que son de lectura y escritura. Este módulo incrementa su cuenta desde 0x000 hasta 0xFFFF y al desbordarse vuelve a 0x0000. Al presentarse el desborde la bandera de interrupción TMR1IF se pone a 1 y, si está habilitada, la interrupción se presenta. Este módulo al igual que el Timer 0 puede funcionar en modo temporizador y en modo contador. En modo temporizador el par de registros TMR1 se incrementa en cada ciclo de instrucción, este modo se selecciona poniendo a 0 el bit TMR1CS del registro T1CON.En modo contador el par de registros TMR1 se incrementa en cada flanco ascendente de una señal de reloj externa, este modo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON. El preescalador del Timer 1 tiene un valor máximo de 8 y se selecciona con los bitsT1CKPS1:T1CKPS0 de la siguiente manera: 00 = 1:1 01 = 1:2 10 = 1:4 11 = 1:8 A diferencia del Timer 0, el Timer 1 tiene la posibilidad de activar o detener la cuenta mediante el bit TMR1ON del registro T1CON. Carga y Temporización En modo temporizador el Timer 1 incrementa su cuenta en cada ciclo de instrucción. Latemporización que se puede obtener con este módulo se obtiene de la siguiente relación:

TempTMR 1=[ ( 65536− precarga )∗PS ]∗Tinstr Donde:    

precarga = Valor que se le asigna al par de registros TMR1 al comenzar la temporización. PS = Valor del preescalador. Tinstr = 4/frecuencia de oscilación TempTMR1 = Temporización dada en segundos.

La temporización máxima utilizando el oscilador interno del pic 16f628 y el valor más grande de preescalador es:

TempTMR 1. Max=[( 65536−0)∗8]∗1uS=524288 uS De modo que la temporización máxima que se puede tener con este temporizador, utilizando el oscilador interno de 4Mhz, es de 524.288mS. Con la misma frecuencia de oscilación el Timer 0 solamente podía lograr una temporización de 65.538mS así que con el Timer 1 se logran temporizaciones de mayor duración. Si se desea obtener una temporización distinta solo se debe escribir en el par de registros TMR1 el valor de la precarga necesaria para la temporización deseada.

precarga=−[([Temporizacion /(4 /fosc)])/ PS]+65536

Temporizador Timer 2 El Timer 2 es un temporizador de 8 bits que tiene la particularidad de tener un preescalador y un post-escalador. Además este módulo cuenta con un registro de periodo PR2 que marca el valor máximo que puede alcanzar la cuenta del registro TMR2. A diferencia de los otros temporizadores, el temporizador Timer 2 no incrementa su cuenta hasta llegar a 0xFF y después al desborde sino que incrementa su cuenta desde 0x00 con cada ciclo de instrucción hasta que el valor del registro TMR2 coincide con el del registro PR2 y después, en el siguiente ciclo reinicia la cuenta desde 0x00. Este módulo cuenta con un preescalador y un post-escalador. El preescalador tiene la misma función que en los otros dos timers y sirve como divisor de frecuencia antes de cada incremento. El post-escalador funciona como un divisor de frecuencia después de

cada coincidencia entre los registros TMR2 y PR2. Si el post-escalador es 1:1 la bandera de interrupción TMR2IF se habilitará en cada coincidencia entre TMR2 y PR2, en cambio si por ejemplo el post-escalador es 1:16, la interrupción se presentará cada 16 coincidencias. Este temporizador, al igual que el Timer 1, puede habilitarse y deshabilitarse mediante el bit TMR2ON. El preescalador se selecciona con los bits T2CKPS1:T2CKPS0 y el post-escalador con los bits T0UTPS3:TOUTPS0 de la siguiente manera: Preescalador

Post-escalador

00 = 1:1

0000 = 1:1

01 = 1:4

0001 = 1:2

1x = 1:16

0010 = 1:3

. . . 1111 = 1:16

Carga y Temporización La temporización del Timer 2 está dada por la siguiente expresión: TempTMR 2=[Preescaler∗(PR 2+1)∗Postscaler ]∗Tinstr

Donde  Preescaler = Valor del preescalador  PR2 = Valor cargado al registro PR2  Postscaler = Valor del post-escalador  Tinstr = 4/frecuencia de oscilación  TempTMR2 = Temporización dada en segundos La temporización máxima que puede alcanzar el Timer 2 es la misma que alcanza el Timer 0. Utilizando el oscilador interno del pic 16f628 la temporización máxima sería de65536uS. Si se desea otra temporización se puede lograr cargando el valor necesario al registro PR2. PR2=[([TempTMR 2/(4/ fosc)])/( Preescaler∗Postscaler )]−1



Tabla de caracteres ASCII El código ASCII (acrónimo inglés de American Standard Code for Information Interchange — Código Estándar Estadounidense para el Intercambio de Información) es un código de caracteres basado en el alfabeto latino, tal como se usa en inglés moderno. Fue creado en 1963 por el Comité Estadounidense de Estándares (ASA). El código ASCII utiliza 7 bits para representar los caracteres, aunque inicialmente empleaba un bit adicional (bit de paridad) que se usaba para detectar errores en la transmisión. A menudo se llama incorrectamente ASCII a otros códigos de caracteres de 8 bits, como el estándar ISO8859-1, que es una extensión que utiliza 8 bits para proporcionar caracteres adicionales usados en idiomas distintos al inglés, como el español. A continuación la tabla con las equivalencias en decimal, hexadecimal y su respectivo símbolo.

Referencias Código ascii. (s.f.). Obtenido de El Código ascii Sitio Web: http://www.elcodigoascii.com.ar/

El temporizador timer 0 en los microcontroladores PIC. (s.f.). Obtenido de Circuitos Electrónicos Sitio Web: http://www.circuitoselectronicos.org/2011/04/el-temporizadortimer-0-en-los.html El temporizador timer 1 en los microcontroladores PIC. (s.f.). Obtenido de Circuitos Electrónicos Sitio Web: http://www.circuitoselectronicos.org/2011/04/temporizadortimer-1-en-los.html El temporizador timer 2 en los microcontroladores PIC. (s.f.). Obtenido de Circuitos Electrónicos Sitio Web: http://www.circuitoselectronicos.org/2011/04/temporizadortimer-2-en-los.html