DESCRIPCIÓN
Se programará
el microcontrolador FRDM-KL25Z para que al ingresar una letra en el teclado de
la computadora, se emita luz y sonido durante un cierto tiempo, basado en el
Código Morse para cada letra.
OBJETIVO
Emplear la
base de tiempos y notas musicales, creada por catedrático de la asignatura,
para implementar el abecedario en clave Morse.
REQUERIMIENTOS
HARDWARE
Para esta
práctica se requiere el microcontrolador FRDM-KL25Z, que incluye un LED
tricolor RGB (Rojo-Verde-Azul), así como una bocina.
ARQUITECTURA DEL SOFTWARE.
Tabla de funciones
Funciones en main
|
|
void f_inicio(void);
|
// Función
de inicialización
|
Tabla 1
Funciones empleadas en el programa principal
Diagramas de flujo
Fig. 1
Diagrama de flujo de la función main.
Fig. 2
Diagrama de flujo de la función f_inicio, empleada en main.
Fig. 3
Diagrama de flujo de la función “TI1_OnInterrupt”, en Events.c.
Fig. 4
Diagrama de flujo de la función “AS1_OnRxChar”, en Events.
Fig. 5
Diagrama de flujo de la función “AS1_OnTxChar”, en Events.c.
Fig. 6
Diagrama de flujo de la función “gen_per_notasTicks”, en notas.c.
Fig. 7
Diagrama de flujo de la función “toca_nota”, en notas.c.
Descripción de variables y constantes
Processor Expert
|
|
#include "notas.h"
|
|
#include "Alfabeto_Morse.h"
|
|
extern AS1_TComData Letra_ing;
|
// Variable externa que guarda la letra ingresada
|
extern int Enter_ing;
|
// Variable externa para saber si se oprimió la tecla de Enter
|
byte Entrada[]="\n\r Introduce una letra y presiona Enter
\n\r";
|
// Mensaje de entrada
|
byte *ap_men;
|
// Apuntador para enviar el mensaje de
entrada
|
Letra_Morse
*ap_letra_sele,*ap_reset;
|
// Estructura
de tono y tiempo de las letras en código Morse
|
Tabla 2
Tabla de variables empleadas en el programa principal
Events.c
|
|
#include
"Events.h"
|
|
#include "notas.h"
|
|
#define RANGO
41
|
//Numero de
notas, contando el "SILENCIO"
|
#define
TIEMPO 5
|
|
extern
uint32_t escalas[RANGO];
|
|
extern
Letra_Morse *ap_letra_sele, *ap_reset;
|
// Estructura
externa de tono y tiempo de las letras en código Morse
|
byte tempo;
|
// Variable de tiempo
|
AS1_TComData Letra_ing;
|
// Variable que guarda la letra ingresada
|
int
Enter_ing;
|
// Variable
para saber si se oprimió la tecla Enter
|
extern
byte*ap_men;
|
// Apuntador
externo para enviar el mensaje de entrada
|
void
AS1_OnRxChar(void)
|
|
AS1_TComData
ch;
|
// Variable
local que guarda un carácter
|
Tabla 3
Tabla de variables empleadas en Events.c
notas.c
|
||
#include
"notas.h"
|
||
#include "TU1.h"
|
||
#include "TI1.h"
|
||
#include
"TU2.h"
|
||
extern byte tempo;
|
// Variable externa de tiempo
|
|
uint32_t escalas[RANGO];
|
||
void gen_per_notasTicks(void)
|
||
unsigned
char i;
|
//
Variable local empleada como contador
|
|
uint32_t
Ticks;
|
||
uint32_t
factores[]={3444,3649,3866,4096,4340,4598,4871,5161,5468,5793,6137,6502,6889,7298,7732,8192,8679,9195,9742,10321,10935,11585,12274,13004,13777,14596,15464,16384,17358,18390,19484,20643,21870,23171,24548,26008,27555,29193,30929,32768,1};
|
||
Tabla 4
Tabla de variables empleadas en notas.c
notas.h
|
|
#define
RANGO 41
|
//Numero
de notas, contando el "SILENCIO"
|
#define
TEMPO 1
|
|
#define
FREC_BASE 261.626
|
//Frecuencia
equivalente a la nota mas baja deseada (DO3)
|
#define NUM_GEN 1.059465
|
//Factor de multiplicación
|
typedef
enum
|
|
{ REs6,
RE6, DOs6, DO6,
SI5, LAs5, LA5,
SOLs5, SOL5, FAs5,
FA5, MI5, REs5,
RE5, DOs5, DO5,
SI4, LAs4, LA4,
SOLs4, SOL4, FAs4,
FA4, MI4, REs4,
RE4, DOs4, DO4,
SI3, LAs3, LA3, SOLs3,
SOL3, FAs3, FA3, MI3,
REs3, RE3, DOs3,
DO3, SILENCIO } notas;
|
//Son 41 (RANGO) notas, contando el
"SILENCIO"
|
typedef struct {byte nota; byte tempo;}
Letra_Morse;
|
//
Definición de la estructura "Letra_Morse", con una nota y un
tiempo.
|
typedef
enum
|
|
{ SFUSA
=1, FUSA =2, SCORCHEA =4, CORCHEA =8, NEGRA =16, BLANCA =32, REDONDA =64, PUNTO
=8, RAYA =3*PUNTO }dura;
|
//
Definición de los posibles tiempos que pueden tomar las notas, en duracion de
multiplos de 25ms
|
Tabla 5
Tabla de variables empleadas en notas.h
Componentes
Se requiere
incluir lo siguiente:
Un componente TimerUnit_LDD, TU1
Un componente TimerInt_LDD, TI1
Un componente BitIO, LED_ROJO
Un componente AsynchroSerial, AS1
(Nota: Para detalles sobre cómo incluir
componentes, revisar la práctica “Encender-apagar un LED”).
Configuración del componente TU1
Seleccionando
el componente que será editado, en el inspector de componentes se deben hacer
los cambios señalados en la Fig. 3.8.
Fig. 8
Configuración del componente TU1.
Configuración del componente TI1
Seleccionando
el componente que será editado, en el inspector de componentes se deben hacer
los cambios señalados en la Fig. 9.
Fig. 9
Configuración del componente TI1.
Configuración del componente BitIO
Seleccionando
el componente que será editado, en el inspector de componentes se deben hacer
los cambios señalados en la Fig. 10.
Fig. 10
Configuración del componente BitIO.
Configuración del componente AS1
Seleccionando
el componente que será editado, en el inspector de componentes se deben hacer
los cambios señalados en la Fig. 11.
Fig. 11
Configuración del componente AS1.
Prueba de componentes
Una vez
concluida la configuración de los componentes, en la ventana Components, se da
click en el ícono de la esquina superior derecha, para generar e incluir en el
Processor Expert el código de los componentes añadidos al proyecto. (Ver Fig. 12)
Fig. 12
Generación de código para el Processor Expert.
PROGRAMA FINAL
Código
EVIDENCIAS.
(FOTOS)
REFERENCIAS
1. “FRDM-KL25Z
User's Manual”. Freescale.
2. http://www.taringa.net/posts/info/1875087/Como-aprender-codigo-Morse.html
3. http://www.asifunciona.com/tablas/codigo_morse/codigo_morse_1.htm
4. http://colegiodepilotos.org.mx/cabina/bolet35/05.pdf
No hay comentarios:
Publicar un comentario