domingo, 16 de febrero de 2020

7) El código de programación y Sistema de desarrollo . Reloj Retro ZM1022

Análisis del temporizador TIMER1 del uC 16F628


         Como ya se analizó, es necesario generar la sincronización de 1 Segundo del Reloj para temporizar su cuenta de tiempo. Para esto usaré el temporizador TIMER1 disponible en el microcontrolador 16F628.


La Fig. 7.1 del manual del dispositivo, muestra el diagrama en bloques del timer TIMER1


Fig.7.1. Diagrama en bloques del TIMER1


Como se ve en el diagrama, el TIMER1 utiliza los bits de configuración mostrados, y para esta función simple de temporizador se simplifica de la siguiente manera:


 Fig. 7.2  Diagrama y configuración del TIMER1

Una vez inicializado el TIMER1 con la configuración de sus bits como se muestra en la Fig.7.2 , y apagado el Led LIS indicador de 1 Segundo, el microcontrolador quedará en un primer lazo de espera testeando la bandera TMR1IF (Timer1 Interrup Flag) de finalización del Timer.

Una vez que esta se activa (se pone a "1") habrá transcurrido medio segundo de tiempo. Entonces se reinicia el TIMER1, se enciende el Led LIS indicador de 1 Segundo, y el uC quedará en un segundor lazo de espera testeando la bandera TMR1IF (Timer1 Interrup Flag) nuevamente.
Una vez que esta se activa (se pone a "1") habrá transcurrido el siguiente medio segundo de tiempo. Completándose entonces un segundo de tiempo, se procede a la actualización del Reloj incrementándolo en 1 Seg.
Como ya se vio, el uC trabaja con un cristal de cuarzo de 4 MHz, entonces la frecuencia de entrada al Timer será de 1 MHZ

Dado que el divisor trabaja con valores discretos, siempre se cometerá un error en la temporización que en este caso será del orden del 0,6 por mil. Para mayor precisión deberá usarse una frecuencia de Cristal más alta o sincronizar el Reloj por otros métodos (WEB, GPS, etc.)




Sistema de desarrollo del Software del Controlador

La escritura y testeo del código de programación la desarrollaré en lenguaje de bajo nivel Ensamblador (Assembler o ASM) usando el ambiente de desarrollo integrado MPLAB X IDE de MicroChip, cuyas ventanas se distribuyen de la siguiente manera:

Fig. 7.3  Ambiente de desarrollo integrado MPLAB X IDE de MicroChip


Desarrollo del código de programación del controlador en lenguaje emsamblado


El código completo de programación del uC se encuentra disponible en este enlace:
código ASM reloj retro ZM1022

Y aqui algunas pantallas con parte de ese código:

Fig.7.4 Código de inicialización del uC

En la Fig.7.4 se muestra la definición del microcontrolador y se incluye el archivo de variables especificas de este. Luego se declara la variable de configuración _CONFIG con el oscilador a cristal y el Reset.
Luego aparecen las definiciones de las puertas RA y RB con la asignación de cada señal (pata) del uC como ya se explicó.


Fig.7.5. Código de proceso de dígitos

En la Fig.7.5. se procesan los registros asignados a SU, SD, MU, MD, HU y HD, incrementándolos y comparándolos con sus limites como explican los comentarios.



Fig.7.6. Código de inicialización del TIMER1

En la Fig.7.6. se muestra la rutina de inicialización y disparo del TIMER1 con los parámetros de configuración y carga de los divisores.



Fig.7.7. Ventana de programación del uC
En la Fig.7.7. se ve la ventana de programación del PICKit2/3 Programmer ya con el archivo .HEX cargado y listo para ser grabado en la memoria FLASH del 16F628. El archivo .HEX se obtiene compilando el código fuente .ASM, proceso que debe finalizar libre de errores.



Los programadores  PICKit2 y PICKit3 de MicroChip que se usan para flashear el uC se muestran a continuación:




Fig.7.9. Programador PICKIT2

Fig.7.10. Programador PICKIT3



Nos encontramos en la siguiente entrada. Un saludo...



 

No hay comentarios:

Publicar un comentario