You are on page 1of 7

Assignatura: Programaci dArquitectures Encastades

Alumnos: Gheorghe Iustin,


Marcut Laurentiu
1



PRACTICA 3: Creacin de funciones Retardo y un Reloj en tiempo real
-informe-



Presentaremos en este informe el desarrollo de las ltimas dos semanas de prctica que
consiste en dos partes:
El uso del reloj, como base de tiempo, para encender los leds de la placa de
interfaz a ciertos intervalos de tiempo;
La creacin de un reloj en tiempo real y de una alarma;

La implementacin se ha hecho en dos proyectos distintos para una mejor vista y un
mejor control de los botones.

Parte 1: Base de tiempo 1/10000 de segundos


1. Planteamiento del problema.

El objetivo de la primera parte de la practica era de encender los 8 leds, de la placa de
interfaz, de forma secuencial a ciertos intervalos de tiempo. En comparacin con la prctica
anterior, tenamos que utilizar un reloj y, con la ayuda de los botones, aadir diferentes
funcionalidades como:
Al pulsar el botn RIGHT del joystick, los leds se encienden hacia la derecha;
Al pulsar el botn LEFT del joystick, los leds se encienden hacia la izquierda;
Al pulsar el botn UP del joystick, se incrementa el intervalo de tiempo en que se
encienden los leds;
Al pulsar el botn DOWN del joystick, disminuye el intervalo de tiempo en que se
encienden los leds;
Mostrar por pantalla el tiempo que hay en cada momento entre el cambio de los
leds;

2. Que recursos del Micro controlador, la placa de interfaz o la placa experimental se
utilizan.

Para llegar al objetivo deseado, hemos utilizado el reloj B0 componente del Micro
controlador, los 8 leds de la placa de interfaz (el puerto P4) como salida, el joystick de la placa
experimental (los puertos P2.1, P2.2, P2.4, P2.5) - como entrada y la pantalla de la placa
experimental como salida.


Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
2

3. Como se han configurado los diferentes recursos.

Los botones y los leds usados tienen la misma configuracin que en la prctica
anterior.
En el caso del reloj B0 se han configurado los siguientes registros:
TB0CCTL0 - El CAP lo ponemos en COMPARE MODE y el CCIE lo ponemos en
INTERRUPT ENABLE., para habilitar las interrupciones.
TB0CTL elegimos la fuente del reloj TBSSEL= >SMCLK porque tiene un valor de
1 MHz. Esto nos permite lanzar interrupciones a intervalos muy pequeos de
tiempo.
En el mismo registro configuramos el modo de funcionamiento del reloj
MC=>modo UP. Este modo cuenta de forma cclica des de 0 al valor TB0CCR0.
TB0CCR0 aqu guardamos el valor hasta que cuenta el reloj en cada ciclo.
Nosotros hemos puesto un valor de 10000 y esto significa que cada ciclo de reloj
es de 1/10000 segundos.

4. Implementacin.

La configuracin del reloj B0 est incluida en un mtodo llamado init_timer_luces() que
se est llamando en el main(), al principio, junto con la configuracin de los otros
componentes.
Hemos construido la funcin que se encarga de la interrupcin del reloj B0 usando la
sintaxis #pragma vector=TIMERB0_VECTOR. Esta interrupcin llama a cada 1/10000 segundos
y simplemente cambia el valor a 1 de una variable de control interr_B.
Despus de hacer esta operacin, el programa vuelve al main() y comprueba si esta
variable ha cambiado a 1 y verifica el estado actual. En funcin del estado actual tenemos
cuatro posibilidades:
estado=3 (Joystick LEFT): encendemos el siguiente led de la parte izquierda;
estado=4 (Joystick RIGHT): encendemos el siguiente led de la parte derecha;
estado=6 (Joystick UP): incrementamos el tiempo de espera para el reloj B0 con
1000 (cambiamos el valor del registro TB0CCR0). Aqu hemos delimitado el
tiempo a un valor mximo de 30000;
estado=7 (Joystick DOWN): bajamos el tiempo de espera con 1000 (cambiamos
el valor del registro TB0CCR0). Aqu hemos delimitado el tiempo a un valor
mnimo de 1000;

Cada vez que cambiamos el valor del registro TB0CCR0, mostramos por pantalla el
tiempo de espera. Primero convertimos la variable TB0CCR0 en una cadena de caracteres y
luego llamamos la funcin escribir(cadena, lnea) que efectivamente imprima el tiempo por
pantalla.



Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
3

5. Diagrama de flujo.


Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
4



Parte 2: Reloj en tiempo real y alarma


1. Planteamiento del problema.

En la segunda parte de la practica tenemos que definir un reloj con horas, minutos y
segundos y mostrarlo en tiempo real por pantalla. El formato tiene que ser de tipo hh:mm:ss.
Existe la posibilidad de ajustar la hora, usando los botones del joystick.
Otro funcionamiento del programa ser el de introducir una alarma y mostrar un
mensaje al LCD.
Proponemos asignar las diferentes funcionalidades a los siguientes botones:
Joystick CENTER: modificamos la hora;
Botn S1: modificamos los minutos;
Botn S2: modificamos los segundos;
Joystick UP: configuramos la hora de la alarma;
Joystick DOWN: configuramos los minutos de la alrma;

2. Que recursos del Micro controlador, la placa de interfaz o la placa experimental se
utilizan.

Para diversificar la implementacin hemos decidido usar otro reloj, el A1 componente
del Micro controlador y los 8 leds de la placa de interfaz (el puerto P4) como salida, los
botones CENTER, UP y DOWN del joystick de la placa experimental (los puertos P2.3, P2.6, P2.7)
- como entrada y la pantalla de la placa experimental como salida.

3. Como se han configurado los diferentes recursos.

Los botones y los leds usados tienen la misma configuracin que en la prctica
anterior.
En el caso del reloj A1 se han configurado los siguientes registros:
TA1CCTL0 - El CAP lo ponemos en COMPARE MODE y el CCIE lo ponemos en
INTERRUPT ENABLE., para habilitar las interrupciones.
TA1CTL elegimos la fuente del reloj TBSSEL= >ACLK porque necesitamos crear
una interrupcin en cada segundo y el valor grande de 1 MHz no lo necesitamos
ms en este caso.
En el mismo registro configuramos el modo de funcionamiento del reloj
MC=>modo CONTINUOUS. Este modo cuenta de forma cclica des de 0 al valor
mximo (CNTL) un segundo.

4. Implementacin.

Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
5

La configuracin del reloj A1 est hecha por la funcin init_timer_hora() que se esta
llamando al inicio del main(), junto con la configuracin de los botones y otros componentes.
Definimos la funcin que se encarga con la interrupcin usando la sintaxis #pragma
vector=TIMER1_A0_VECTOR. Es una interrupcin directa del reloj A1 y va a contener una
operacin en que cambiamos el valor de la variable de control interr_A a 1.
Despus de este proceso, el programa vuelve al main() y comprueba las siguientes
situaciones:
estado=1 (botn S1): incrementamos los minutos con 1. Tenemos un lmite de
mximo 59 minutos. Si el valor sobrepasa este lmite, se reinicializa con 0.
estado=2 (botn S2): incrementamos los segundos con 1. Tenemos un lmite de
mximo 59 segundos. Si el valor sobrepasa este lmite, se reinicializa con 0.
estado=5 (joystick CENTER): incrementamos las horas con 1. Tenemos un lmite
de mximo 23 horas. Si el valor sobrepasa este lmite, se reinicializa con 0.
estado=6 (joystick UP): incrementamos la hora de la alarma con 1.
estado=7 (joystick DOWN): incrementamos los minutos de la alarma con 1.
Interr_A=1: se incrementa de forma automtica el nmero de segundos y, si es
el caso, el nmero de minutos o de horas. Esto pasa a cada ciclo del reloj A1.

Cada vez que cambiamos el valor de la hora, minutos o segundos, mostramos por
pantalla la hora en formato hh:mm:ss. Primero convertimos las variables hora, minutos,
segundos en una cadena de caracteres y luego llamamos la funcin escribir(cadena, lnea) que
efectivamente imprima el tiempo por pantalla.


5. Diagrama de flujo.















Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
6


Assignatura: Programaci dArquitectures Encastades
Alumnos: Gheorghe Iustin,
Marcut Laurentiu
7

You might also like