PDF de programación - Capítulo 4/9 - Timer / PWM - TPM - Curso sobre Microcontroladores

Imágen de pdf Capítulo 4/9 - Timer / PWM - TPM - Curso sobre Microcontroladores

Capítulo 4/9 - Timer / PWM - TPM - Curso sobre Microcontroladoresgráfica de visualizaciones

Publicado el 31 de Mayo del 2018
361 visualizaciones desde el 31 de Mayo del 2018
489,1 KB
5 paginas
Creado hace 9a (21/08/2011)
Curso sobre Microcontroladores
Familia HC9S08 de Freescale

Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar
e-mail: info@edudevices.com.ar
Responsable Area Educación – ELKO / ARROW – www.elkonet.com
e-mail: ddilella@elkonet.com

Capítulo 4.
Entrega Nº 9
Timer / PWM – TPM.
En las entregas anteriores, se han visto en detalle los aspectos teóricos en el módulo
TPM de los HC9S08 en las funciones Timer Overflow, Output Compare, Input Capture
y PWM.

En la presente entrega se verá una aplicación práctica basada en el MCU
MC9S08AW60 contenido en el sistema didáctico “EDUKIT08” cuando se utiliza con
su placa de personalización “PLUGIN_AW”.

Programa “Timer 01”
Introducción

Llega el momento de tratar el módulo timer 1. Desde el comienzo emplearemos
interrupciones con este módulo y lo aplicaremos al destello del LED 1. Dado que es la
primera práctica que realizamos con este periférico, trataremos su configuración con el
Processor Expert.

El módulo timer 1

El microcontrolador MC9S08AW60 dispone de 2 poderosos timers llamados TPM1 y
TPM2. En el EDUKIT08 disponemos del timer 1 para uso interno del programa, en
tanto que el timer 2 está vinculado con los pines de PWM. Como consecuencia de lo
anterior emplearemos el timer 1 en esta aplicación. Para configurarlo desde el
Processor Expert debemos hacer cliq en el recuadro correspondiente:

Siempre y cuando nuestro programa se esté valiendo del Processor Expert para
inicializar los periféricos. Siendo este el caso surgirá la siguiente ventana que nos
permite configurar al timer 1:

El módulo dispone de varias categorías dentro de las cuales podemos citar:

• Settings: Nos permite elegir entre varias fuentes de reloj para el timer, así como fijar
el prescaler y el período en el cual vence la cuenta del timer.

• Pins: En caso que el timer interactúe con hardware externo, como en la función
PWM, puede elegirse el pin con el que se vincula este módulo.

• Interrupts: Aquí podemos desenmascarar las interrupciones.

Lo que buscamos en este ejemplo es producir una interrupción por timer cada
1 segundo. Por lo tanto lo adecuado es buscar una fuente de reloj interna al
microcontrolador y nada mejor que el reloj del bus, como señalamos en la figura
anterior, bajo el nombre de Clock Source Select.
Respecto al prescaler es conveniente que su división sea la mayor posible, pues 1
segundo es un tiempo muy grande para un microcontrolador.

También debemos fijar Modulo counter, o sea cuantos pulsos de reloj contará antes de
producir una interrupción. Tal vez sea el valor más importante, pues determina el
tiempo contado por el microcontrolador. En este programa adoptamos el valor de
39062, que nos arroja un tiempo muy cercano a 1 segundo (en realidad 1,000012 seg.).

Por fortuna no debemos enredarnos en cálculos para conocer el tiempo que determina el
modulo counter. O la situación inversa, de conocer que modulo counter debe elegirse
para arribar a cierto tiempo entre interrupciones. El Processor Expert nos determina
ese tiempo en la misma ventana bajo el nombre de Period. Así podemos ir ingresando
valores arbitrarios de Modulo counter, y por prueba y error retocando este número
hasta obtener el tiempo mas parecido a lo buscado.

Respecto a las interrupciones no hay mucho por configurar. Solo podemos decidir si
están o no enmascaradas, inclinándonos por lo último para este ejemplo. El Processor
Expert nos indica el nombre de la ISR para este periférico, que es isrVtpm1ovf. Es
decir interrupción por Timer Overflow.

Con ello se completa la configuración, pero permítasenos hacer una aclaración.
Observaremos en la ventana de configuración que no es posible deshabilitar al módulo.
No existe un bit de TSTOP como si había en la familia HC908. Pero contamos con una
forma indirecta de hacerlo. Dejando al timer sin fuente de reloj. Este último puede
configurarse desde Clock Source Select.

Si abrimos el proyecto “Timer01” (que es parte de las númerosas prácticas contenidas
en el kit didáctico “EDUKIT08”) encontraremos todas estas opciones ya configuradas.

Descripción del programa

Al observar el programa principal, lo encontraremos demasiado simple:

_Startup:
LDHX #RAMEnd+1
TXS
JSR MCU_init
Ciclo:

BRA ciclo

Empezamos cargando el puntero de pila SP y llamamos a la subrutina MCU_init que
configura todos los periféricos en particular al timer 1, como ya indicamos.

Tras ello el programa queda encerrado en la línea ciclo, o sea colgado.

Pareciera como si el programa no cumpliera función alguna. Pero no debemos olvidar
que la subrutina MCU_init configuró el timer 1 para que funcione con interrupciones,
y salvo que el usuario modifique algo, la subrutina MCU_init siempre desenmascara las
interrupciones con la instrucción CLI.

En estas condiciones el programa debe ser interrumpido cada 1 segundo y desviar su
ejecución a la línea:

is tpm1ovf:

LDA TPM1SC

BCLR TPM1SC_TOF,TPM1SC

LDA LED1_PORT

EOR #LED1_MASK

STA LED1_PORT

RTI

Lo primero que debe hacer esta subrutina es atender la interrupción de timer, de otro
modo saltaría indefinidamente. No ya cada 1 segundo, sino cada vez que salimos de
ella. Este comportamiento no es el buscado y se debería a un mal uso del periférico.

Para atender la interrupción de Timer el fabricante nos exige cumplir 2 pasos:

• Leer el registro TPM1SC.
• Poner a “0” el bit TOF del registro TPM1SC.

De igual forma al procedimiento para atender las interrupciones de timer en la familia
HCS08.
Luego de esto cambiamos el estado del LED 1 mediante una operación XOR. Requiere
esto definir una máscara para aplicar una operación XOR sobre el pin PTA4.

LED1_PORT

EQU PTAD

LED1_MASK

EQU $10

Por último retornaremos de la interrupción y al próximo segundo, esta rutina volverá a
ejecurarse.

Modo de correr el programa.

Lo aconsejable en este programa es colocar un Breakpoint al comienzo de la ISR .

is tpm1ovf:

LDA TPM1SC

Ejecutamos el programa y alcanzaremos a la línea anterior. Seguimos ejecutando el
programa instrucción por instrucción hasta que veamos que el LED 1 cambia de estado.
Llegados a esta situación volvemos a correr el programa y repetir todo el procedimiento.

Continuará.......

Nota de Redacción: El lector puede descargar este capítulo y capítulos anteriores del
curso desde la sección “Artículos” (Curso_HC9S08) en el sitio web de EduDevices
(www.edudevices.com.ar )
  • Links de descarga
http://lwp-l.com/pdf11468

Comentarios de: Capítulo 4/9 - Timer / PWM - TPM - Curso sobre Microcontroladores (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad