Beruflich Dokumente
Kultur Dokumente
Feb2320
Cualquier elemento que se encienda y apague con una frecuencia mayor a 25Hz
es imperceptible para el ojo humano, ste lo ver encendido en todo momento.
Nota: los segmentos de cada display van unidos entre s, es decir a con a, b con b, hasta el
g con g, por cada display adicional se necesita un transistor y slo una lnea ms del
microcontrolador.
En este diagrama se asume que las unidades estn en el display de la derecha y las
decenas en el display de la izquierda.
Ejemplo 1
Realizar un temporizador de 0 a 99 que incremente cada segundo.
La interrupcin RTCC se produce cada vez que el contador TIMER0 pasa de 255 para 0.
Ya hemos trabajado anteriormente nuestros proyectos con cristales de cuarzo. Recordemos
lo siguiente:
Todo microcontrolador requiere un circuito externo que le indique la velocidad a la que debe
trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple pero de vital
importancia para el buen funcionamiento del sistema. El PIC16F887 puede utilizar cuatro
tipos de oscilador diferentes. Estos tipos son:
RC. Oscilador con resistencia y condensador.
XT. Cristal.
HS. Cristal de alta velocidad.
LP. Cristal para baja frecuencia y bajo consumo de potencia.
Si se trabaja el Microcontrolador con un cristal de 4 Mhz, esta frecuencia se
divide internamente por 4, es decir realmente trabaja a 1Mhz, o sea que cada ciclo de
reloj dura aproximadamente 1 microsegundo.
Qu frmula usar para determinar con que valor se debe cargar inicialmente el Timer 0 y
que valor de preescaler o divisin se debe utilizar?
La frmula para aplicar es la siguiente recordando que primero debemos pasar el tiempo de
temporizacin a microsegundos es:
Sin embargo se debe tener en cuenta que la interrupcin solo se genera cuando el timer
pasa de 255 a 0, esto quiere decir que debemos restarle al valor total del timer (256) el
valor de carga inicial que tenga el Timer 0:
256 Valor inicial del Timer 0
Ya habiamos dicho que el valor del Timer 0 puede ser dividido (preescaler) por un valor
aplicando alguna de las instrucciones citadas al comienzo del post. Cuando nosotros
seleccionemos dicho preescaler o divisin, se debemos tratar de obtener un valor
entero al dividir el tiempo del retardo sobre el preescaler. Este valor no puede ser mayor
a 256. En caso de ser mayor, significa que antes de cumplir el retardo el Microcontrolador
habr generado ms de una interrupcin.
En este caso se combina entonces la programacin del Timer 0 y cada vez que el Timer 0
genere una interrupcin se decrementa un contador tantas veces como sea necesario hasta
completar el tiempo de temporizacin.
Finalmente el procedimiento que se debe seguir para calcular el valor inicial del timer y el
valor del contador a decrementar es el siguiente, suponiendo que escogemos un preescaler
de 8
1 RTCC_DIV_8
Vemos entonces que se gener un valor mayor a 255, por lo tanto es necesario calcular
cuantas veces debe generarse una interrupcin (a travs de un contador) antes de
completar el retardo de 20 milisegundos.
Vemos que tenemos dos incoginitas, esas dos incognitas pueden ser valores aleatorios
inferiores a 256. Por ejemplo: 10 y 250. Aqui puedo escoger cualquiera de los dos valores
para que sea el Valor Inicial del Timer (10)
Posterior a esta multiplicacin, se hace:
256-10=246
Con esto tengo que mi timer o RTCC es 246 y que mi contador debe contar hasta 250.
Ejemplo Timer de 1 segundo.
Para un retardo de un segundo, con preescaler de 256, se procede de la siguiente manera:
CargaT=1000000/RTCC_DIV_X
X = Este valor puede ser cualquiera de los indicados al principio, el que se elija ser con el
que se seguir trabajando en la programacin. En este caso el RTCC escogido es 256.
El valor anterior, es decir 3906 debe ser igual a la multiplicacin entre el valor inicial del timer
0
y el valor del contador a decrementar.
3906= valor inicial del timer * valor del contador a decrementar
Observacin: estos dos valores son aleatorios y deben ser menores a 256.
3906 = 18 * 217
Cualquiera de estos dos valores pueden ser el valor inicial del timer 0. En este caso, se
elige 18 como valor inicial del timer 0. Al obtener el valor inicial del timer 0 se debe restar el
RTCC utilizado, en este caso 256 para obtener el nmero donde el temporizador debe iniciar
para que en el momento que incremente las 18 veces llegue al valor del RTCC utilizando
(256) y produzca la interrupcin salto. Es decir:
Ya con estos valores, tenemos el valor que debemos cargar en el Timer y el valor que
debemos cargar en el contador. Quedara de la siguiente manera:
RTCC=238
Contador=217
As tendriamos el temporizador para 1 segundo, porque el RTCC se carga con 238, cada
ciclo de reloj, va incrementando y cuando llega a 256 (Pasados 18 ciclos de reloj),
decrementa el contador en 1 unidad, y vuelve y carga el RTCC con 238. As nuevamente el
RTCC va incrementando y cuando llega a 256 vuelve y decrementa en 1 unidad el contador.
Cuando el contador por fin llegue a Cero (0), quiere decir que ya paso 1 segundo (1000000
micro segundos).
EJEMPLO 1
Realizar un temporizador de 0 a 60 segundos