miércoles, 10 de octubre de 2007

Uso del Timer 0 del PIC 16F877A

El Timer 0 del PIC 16F877A, es un Temporizador/Contador de 8-bit. Para trabajar con este Timer hay varios parametros de configuracion como lo son (abajo):





- Fuente de conteo o tiempo, interna o externa
- Prescaler 1:2, 1:4, 1:8 hasta 1:256
- Uso de las interrupciones del timer cada desbordamiento
- Trancisiones, (0 a 1) o (1 a 0)

El prescaler es como un contador mas, es decir si no usaramos prescaler la interrupcion o desbordamiento del timer tiene lugar cada vez que el registro de conteo pase de FFh a 00h. Pero con el uso de prescaler a por ej. 1:256, estariamos hablando de una interrupcion cada vez que el timer se desborde 256 veces (FFh*FFh).

En el programa presentado hoy, se usan dos fuentes de interrupcion la del timer y la interrupcion externa por lo cual el programa debe identificar cual es la rutina adecuada para cada una de las interrupciones, eso se logra comparando las banderas de cada interrupcion. Adicionalmente las banderas deben ser borradas en Software para evitar falsos disparos de rutina.

En la etiqueta INICIO del programa, se observa que simplemente siempre esta poniendo en 1 y en 0 a dos pines del Puerto B, pero cada vez que hay interrupcion del timer, pondra en 0 al pin que estaba en 1 y en 1 al que estaba en 0, de esa manera se crea una forma de onda y es complementaria por ser simetrica una de la otra.

La funcion de la interrupcion externa es simplemente cambiar la velocidad del conteo, ¿como se logra? cambiando el prescaler del Timer 0.

En el video de arriba se puede observar el cambio de velocidad al presionar el SW de interrupcion.

Este es el Esquematico, el programa ASM lo encuentras aqui, y el HEX esta mas abajo.



Programa HEX

:020000040000FA
:040000003120412842
:080008008312031320202820BD
:080010008B0170308B00090028
:100040000B1D08008312031306138617880A08285D
:100050008B1C0800831603130111811083120313F4
:10006000080083120313F0308B0086018801831689
:1000700003130730810007308600880183120313C1
:08008000080006178613422850
:00000001FF



Lo interesante de este programa es el uso del Timer con Prescaler y la manipulacion de su velocidad mediante la interrupcion externa, lo cual puede ser cambiado a por ejemplo contador de eventos y una interrupcion para el reinicio del contador o cualquier otra combinacion de caracteristicas, se puede hacer modificaciones para que cada que se presione el SW, incremente la velocidad a cada cambio de Prescaler.


Saludos.

iess

4 comentarios:

Anónimo dijo...

Hola tienes programas de ejemplo para el Timer 1 y 2, si puedes publica tambien para el PWM, Gracias.

LRM

Ivan S. dijo...

Si los tengo, pronto los publicare, trato de publicar uno o dos programas por semana, asi la proxima los tendre, Gracias.

carloslfu dijo...

buenisimo q publicaras el codigo asm y no el hex :D

iioanalex dijo...

Q tal, Soy nuevo en esto de la programacion de pics, quisiera q publicaras el programa en ensamblador para ver como esta estructurado digo si se puede... y pues muy buen post...

Google