Últimos Tutoriales
Chat
Licencia
| Recursos del PIC -Uso del TMR0 como contador |
| Escrito por biblioman |
|
Vamos a ver en este ejemplo como utilizar el TIMER 0 con una frecuencia de reloj externa al microcontrolador, la señal externa la aplicaremos, como no, a la patilla RA4/TOCKI del PIC, dicha señal la utilizaremos para generar una interrupción a través del TIMER0 cada segundo, en la función de interrupción implementaremos el código necesario para hacer parpadear un Led en la patilla RB7 del PIC. La frecuencia de la señal de reloj externa que utilizaremos será de 400 Hz y el Timer 0 lo configuraremos para qué empiece a contar en el flanco de subida de la señal de reloj, el circuito que tenemos que implementar será el siguiente:
![]()
Bien, primeramente vamos a ver como se tiene que configurar el registro OPTION para que el TMR0 trabaje de esta forma:
Primeramente el bit TOCS tenemos que ponerlo a 1, recordar que:
Luego vamos hacer nuestros cálculos, teniendo en cuenta que queremos tener una interrupción cada segundo, si os fijáis en la formula de abajo es parecida a la que vimos en el ejemplo anterior, a excepción de que la frecuencia de reloj externa no está multiplicada por 4. Al igual que antes elegimos un Prescaler, en este ejemplo 4 (podíamos a ver elegido otro cualquiera que estuviera en la tabla) y calculamos el valor con el que tenemos que inicializar el TMR0 para que se produzca su desbordamiento cada segundo.
![]()
Si despejamos el valor que tenemos que cargar en el TMR0 nos sale un valor de 156 que en hexadecimal es de 0x9C.
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4);
![]()
Como vemos en los registros del PIC, el bit 5 del registro OPTION está a 1 (reloj externo) y los bits PS2:PS0 tienen el valor 001 que corresponde a un preescaler de 1:4 que es el que habíamos elegido. La señal de reloj externa la podemos simular por medio de Proteus, si seleccionamos Generator Mode -> DCLOCK nos saldrá una ventana que configuraremos según se muestra en la figura de abajo:
![]()
Si analizamos la tensión en el ánodo del Led mediante una gráfica, observamos que la señal cuadrada generada a partir de la interrupción en el pic tiene entre el flanco de subida y el flanco de bajada una diferencia en el tiempo de 1 s que es el valor que queríamos.
![]()
Si utilizáis el asistente para generar el esqueleto de la aplicación, tal como hicimos en el ejemplo anterior el timer hay que configurarlo de la siguiente forma:
Veis que sale un Overflow de 2.5 s, esto es lo que saldría en la formula si dejamos al TMR0 que empiece a contar desde 0.
|
| Última actualización el Martes, 12 de Mayo de 2009 21:27 |





