Implementación de un reloj de tiempo real en el MSP430F149

Documentos relacionados
Figura 1. Diagrama de bloques del Timer_A

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores

SEMINARIO DE COMPUTADORES I DISE~NO CON MICROCONTROLADORES MSP430: Manejo de motor servo

Labs para el workshop de programación en C sobre MSP430 (SASE 2012)

Driver Medidor de Distancia Ultrasónico

MSP430 Quickstart. Para Kits del Taller ELO de la UTFSM

L. Silva B. / W. Freund G. / R. Aguilera R. Lab

La mayor parte de las implementaciones de transmisión de datos vía puerto serial utilizan las siguientes funciones:

Laboratorio 6: Teclado Matricial y Comunicación Serial Asincrónica

23/10/2012. MSP430 Teaching Materials. Parte 2B Modos de Operación y Dispositivos. Contenido

Laboratorio 6: Teclado Matricial y Comunicación Serial Asincrónica

Laboratorio 8. Uso de Conversor Análogo Digital Digital Análogo en microcontrolador MSP430.

Universidad Técnica Federico Santa María Departamento de Electrónica. Acceso Controlado vía WEB

Laboratorio 6: Teclado Matricial y Comunicación Serial Asincrónica

Aplicaciones de mc Lenguaje C- CC5x-Temporizadores

Microcontroladores. Sistemas embebidos para tiempo real

FACULTAD DE INGENIERÍA UNIVERSIDAD NACIONAL DE SAN JUAN

Microcontrolador PIC16F84: Arquitectura

Microcontroladores. Sistemas embebidos para tiempo real

Arquitectura de Computadoras

CLOCK SYSTEM. Bit Campo Tipo Reset Descripción

1.2 Arquitectura interna del microcontrolador

Instrucciones de alta velocidad y el tiempo de SCAN. Facultad de Ciencias

CUESTIÓN (2 puntos): SOLUCIÓN:

Periféricos: Timer. Cesáreo Fernández Martínez Álvaro Sánchez Miralles

Taller de Firmware. Introducción al PIC16F877. Facultad de Ingeniería Instituto de Com putación

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Universidad Técnica Federico Santa Maria Departamento de Electrónica Seminario de Microcontroladores I CONTROL REMOTO SEGURO

Buceando en el HC908...

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Assembler MSP430

Registros SFR vistos hasta ahora: Microcontroladores PIC

Elección de un microcontrolador

Diagrama del Conversor Análogo-Digital

Práctica No. 4 del Curso "Microcontroladores" Uso del Convertidor ADC

Diseño Basado en Microcontroladores.

INTRODUCCIÓN AL USO DE MIKRO C PRO FOR PIC

EJERCICIO 1 (2.0 puntos):

PIC 18F45XX. El módulo CCP de Comparación, Captura y PWM (Pulse Wide Modulation)

Laboratorio de Estructuras de Computadores. Lab /99 Se dispone del siguiente programa:

Contenido MICROCONTROLADORES PIC16F877A Y PIC16F887 / SALVATIERRA. Alfaomega. 3.4 Soporte Muestras... 25

Desarrollo de Herramientas de Programación de Alto Nivel y Aplicaciones de Conectividad y Almacenamiento para el Microcontrolador MSP430

Capítulo 1. Práctica: Comunicación SPI Enunciado Especificaciones

Microprocesadores, Tema 8:

Anexo II: Lógica programada y lógica cableada. Ventajas e inconvenientes. MSP430G2553.

LENGUAJE C PARA SISTEMAS DEDICADOS

Mapa de E/S en una PC. Autor: Alejandro Furfaro 12

MICROCONTROLADORES. 1. El PIC 16F84A es un microcontrolador de: a) 16 bits b) 8 bits c) 4 bits d) 32 bits e) 64 bits

a) if (i==5){ j=2*k; k=k+1; } else { j=k; k=1; } c) for (i=0, i<5, i++){ j=k+m; m=2*m; } b) if (i<0){ i=i-5; } if (i==0){ i=4; }

ARQUITECTURA DEL PIC16F84A

Microchip Tips & Tricks...

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

Introducción al microcontrolador MSP430

Diseño de una Aplicación en 10 Minutos!!...

CAPITULO 5 GENERADOR DIGITAL DE TREN DE PULSOS PROGRAMABLE

EJERCICIO 1 (2 puntos, 30 minutos):

EJERCICIO 1 (2 puntos, 30 minutos):

26/09/2012. Microcontroladores PROCESADORES DE TEXAS INSTRUMENTS ORGANIZACIÓN INTERNA DE LOS MICROCONTROLADO RES FAMILIA DE MICROCONTROLADORES MSP430

Curso sobre Microcontroladores Familia HC9S08 de Freescale

MODOS DIRECCIONAMIENTO CPU08. Curso de Microcontroladores Familia HC908 Flash de Motorola Parte II. ING. DANIEL DI LELLA DDFAE For Motorola Products

VDD (varios) VSS (varios) OSC_IN OSC_OUT OSC_OUT PB12. Analógica

INSTRUMENTACIÓN AVANZADA Departamento de Ingeniería Eléctrica y Electromecánica Facultad de Ingeniería Universidad Nacional de Mar del Plata

Introducción al simulador

SISTEMAS DIGITALES BASADOS EN MICROPROCESADORES

TARJETA DE ENTRADAS Y CONTADORES RÁPIDOS (MTC-3052)

Percepción (Ensamblador)

INTERIOR DEL PROCESADOR

Microprocesadores. Introducción al Lenguaje C - Parte IV. Prof. Luis Araujo. Universidad de Los Andes

UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO312 Laboratorio de Estructuras de Computadores

Diseño Basado en Microcontroladores. Programa Detallado

PRÁCTICA # 2. 0 Direcciones 1 Dirección 2 Direcciones 3 Direcciones

Nota: Los siguientes ejercicios se refieren a programas ANSI-C modularizados/modularizables.

MICROCONTROLADOR PIC DE MICROCHIP

Assembler para PICs. Permite la utilización de etiquetas, tanto para apuntar a direcciones como para definir valores constantes.

Prueba 1. Figura B.1 Diagrama de Bloques de la Conexión Para la Prueba 1. #include <p18f2321.h> #include <USART.h> #include <delays.

ESPACIO DE DIRECCIONES

CAPITULO 2 REGISTROS DE FUNCIONES ESPECIALES (SFR)

SOLUCIÓN. EJERCICIO 1 (2.0 puntos):

Objetivo. Introducción. Desarrollo. Práctica 11 Contadores por hardware. Implementación de un contador de pulsos digitales

PIC16C5X (GAMA BAJA) Solo en dispositivos de 28 pins. Encapsulado y patillaje:

Estructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS

CAPITULO 3 MANEJO DE LOS TEMPORIZADORES Y CONTADORES

UNIVERSIDAD NACIONAL DE COLOMBIA SEDE BOGOTÁ FACULTAD DE INGENIERÍA INGENIERÍA MECATRÓNICA

INSTRUCCIONES. Las instrucciones del microcontrolador Z8 PLUS se pueden clasificar en grupos de acuerdo a su función como:

Plataformas de Tiempo Real

SISTEMAS BASADOS EN MICROPROCESADORES

PROBLEMA 1 (2.5 puntos): SOLUCIÓN

RESEÑA DE LENGUAJE C

PIC 16F87X. Juan González. Escuela Politécnica Superior Universidad Autónoma de Madrid. Flir Networked Systems. Flir Networked Systems

PIC16F882/883/884/886/887 4 MÓDULO DEL OSCILADOR (CON EL FAIL-SAFE CLOCK MONITOR) 4.1. Apreciación Global

Práctica No. 3 del Curso "Microcontroladores" Contador de Objetos

Integración de Equipos para Comunicaciones

Figura 2. Formato de un dato serie síncrono.

Contadores y timers. Contadores y timers. Contadores y timers

SISTEMAS DIGITALES BASADOS EN MICROPROCESADORES. Examen Ordinario 1

Comunicación Asíncrona

Práctica 6. El procesador

Arquitectura de Computadores II Clase #3

TIMER0 (T0) TMR0 (01h,101h)

Transcripción:

Implementación de un reloj de tiempo real en el MSP430F149 Los relojes de tiempo real (eal Time Clocks) son utilizados en diversas aplicaciones: eventos generadores de marcas de tiempo, generación de eventos periódicos, etc. El implementar un TC con el microcontrolador MSP430 simplifica el diseño de sistemas y reduce costos, ya que no es necesario contar con un dispositivo dedicado que realice esta función. En esta implementación, se utiliza el Timer A del MSP430 para implementar un reloj de tiempo real. Este timer cuenta con 3 registros de comparación/captura, y utiliza como señal de reloj al ACLK del microcontrolador. Generación de la señal de reloj Todos los microcontroladores de la familia MSP430 contienen un oscilador tipo C controlado digitalmente (DCO) y un oscilador de cristal. En el caso de la tarjeta de desarrollo Easyweb se cuenta con un oscilador de cristal de 8 MHz. El DCO es utilizado usualmente como reloj de la CPU, y el oscilador de cristal es usado frecuentemente como reloj para los periféricos; en este caso como la fuente de reloj para el Timer A, que entrega a su vez la base de tiempo requerida para la implementación. De este modo, los problemas de inestabilidad del oscilador tipo C no afectan la precisión de la implementación. Implementación del TC La implementación consiste en la configuración del Timer A como fuente de interrupciones periódicas (cada 1 segundo) y una pequeña rutina de CPU que cuenta las interrupciones actualizando y desplegando en la LCD la cuenta del TC. La CPU puede dormir o realizar otras funciones entre las interrupciones (ver código anexo). La inicialización de los osciladores permite configurar el DCO como reloj de la CPU (8 MHz) y el oscilador de cristal como señal de reloj del ACLK, a una frecuencia de 1 MHz (8 MHz dividido por 8, según configuración del módulo básico de reloj). La inicialización del Timer A realiza la selección del ACLK como fuente de reloj (dividida nuevamente por 8 queda en 125 khz), para lograr finalmente una frecuencia de generación de interrupciones de 1 Hz mediante el uso del modo up-down del Timer A: en el modo comparación, el timer cuenta hasta el valor del registro TACC0, previamente seteado en 62.500. La rutina de servicio de interrupciones manipula los bits del status register que fueron colocados en el stack justo antes de ingresar a ella. En assembler, esto puede ser realizado mediante el código: BIC #LPM3,0(SP) ; ETI Clear S LPM3 Bits, on top of stack

En C no es posible acceder al stack de una forma directa, por lo que se incorpora un llamado a una rutina externa, escrita en assembler y que permite cambiar entre los distintos modos de operación que tiene el MSP430 (en este caso, cambiar entre el estado activo y el estado LPM3, de bajo consumo). Para realizar esto, en el código C, se incluye el prototipo de la función escrita en assembler. extern void modus(int mod, int offset); La rutina en assembler (modus.s43) debe ser incorporada al proyecto y es la siguiente: NAME MODUS SEG CODE(1) PUBLIC modus SEG CODE modus: PUSH 6 ; save 6 MOV.W SP,6 ; load SP to 6 ADD.W 14,6 ; add offset MOV.W @6,14 ; load S en 14 BIC.W #0xF0,14 ; clear modus bits. BIS.W 12,14 ; set modus bits MOV.W 14,0(6) ; save S to old location POP 6 ; restore 6 ET END El llamado a modus se realiza con 2 parámetros: el valor actual (mod) para ser escrito en el S (Status egister) y el offset para el valor del S almacenado en el stack. El argumento mod se pasa en 12 y el offset en 14. La función modus emplea el registro 6 para efectuar cálculos temporales, (es decir, se escribe en 6, dentro de modus) por esta razón es salvado el valor de 6 en el frame de modus y restaurado antes de salir.(el compilador IA usa el convenio: La rutina llamada tiene la responsabilidad de salvar lo que use. De tal modo que el valor de 6 es el mismo antes y después de llamar a modus. Para calcular este offset puede generarse un listado mixto de C y assembler de la rutina de servicio de interrupciones y luego contar los registros que se colocan en el stack al comienzo del cuerpo de la función. Luego se suma 1 al número de instrucciones que salvan registros y se multiplica por dos, obteniendo el offset en bytes del S.

Las rutinas de servicio de interrupciones crean su frame: almacenando PC y luego el registro de estado S. Luego salvan los registros que usen, en el caso de ClockHandler se empujan 4 registros en el frame. La función modus salva 6. Luego de ejecutada la primera instrucción de modus, el stack puede visualizarse según: sp offset 6 PC S PC Fondo del frame de modus Tope del frame de ClockHandler Fondo del frame de ClockHandler En el diagrama las direcciones de memoria aumentan hacia abajo. Se ilustra el frame de modus apilado con el frame de ClockHandler. Notar que el número de registros colocados en el stack puede depender de la versión del compilador y de las opciones de éste (optimization level). Por lo tanto, lo que realiza la función modus es el cambio desde el modo LPM3 (bajo consumo) al estado activo: toma los bits del S desde el stack, resetea los bits del modo LPM3 de acuerdo al parámetro pasado y guarda nuevamente el S en el stack, de tal manera que al volver de la rutina de servicio de la interrupción. ANEXO: Código para implementación del TC #include <msp430x14x.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include "MSP430lib.c" extern void modus(int mod, int offset); void InitTimer_A (void); void InitOsc_TA (void); void Clock (void); int ii, jj; unsigned int SEC; unsigned int MIN;

unsigned int H; unsigned char LCDtime[32]; void main (void) ii = 0; SEC = 0; MIN = 7; H = 12; InitOsc_TA(); InitPorts(); InitTimer_A(); InitLCD(); // inicialización osciladores // inicialización puertos // inicialización Timer A // inicialización LCD while (1) LPM3; // enter low power mode 3 Clock(); // update clock void InitTimer_A (void) P1SEL = 0x80; P1DI = BIT7; // enable Dallas output (P1.7) /* Config. Timer_A*/ TACTL = ID1 ID0 TASSEL0 TAIE; // use ACLK = 1 M / 8 = 125 khz TACCTL2 = OUTMOD1 OUTMOD0 CCIS0; // output mode 3, por P1.7 (Dallas) TACCTL2 &= ~CAP; // compare mode TACC0 = 0xF424; // 62500 TACC2 = 0x7A12; // 31250 TACTL = MC1 MC0; // start timer in up/down-mode _EINT(); void Clock (void) SEC++; if (SEC == 60) SEC = 0; MIN++; if (MIN == 60) MIN = 0; H++; if (H == 24)

H = 0; sprintf (LCDtime, "Hora Chile Cont: %d:%d:%d ", H, MIN, SEC); for (jj=0; jj!= sizeof(lcdtime) - 1; jj++) SEND_CHA(LCDtime[jj]); if (jj==15) SEND_CMD (DD_AM_ADD2); SEND_CMD (CU_HOME); void InitOsc_TA (void) WDTCTL = WDTPW WDTHOLD; BCSCTL1 = XTS; _BIC_S(OSCOFF); // stop watchdog timer // XT1 as high-frequency // turn on XT1 oscillator do IFG1 &= ~OFIFG; while (IFG1 & OFIFG); // wait in loop until crystal is stable BCSCTL1 = DIVA1 DIVA0; IE1 &= ~WDTIE; IFG1 &= ~WDTIFG; // ACLK = XT1 / 8 = 1 MHz // disable WDT int. // clear WDT int. flag WDTCTL = WDTPW WDTTMSEL WDTCNTCL WDTSSEL WDTIS1; // use WDT as timer, flag each. 512 pulses from ACLK while (!(IFG1 & WDTIFG)); // count 1024 pulses from XT1 (until XT1's // amplitude is OK) IFG1 &= ~OFIFG; // clear osc. fault int. flag DCOCTL = DCO2 DCO1 DCO0; BCSCTL1 = SEL2 SEL1 SEL0; // MCLK = DCO, 8 MHz #pragma vector=timea1_vecto interrupt void ClockHandler (void) if (TAIV == 10) // check for timer overflow modus(0x00,12); // exit low power mode 3