Mundo Edukit 16

Anuncio
COMENTARIO TECNICO
“Mundo EDUKIT08”
Por:
Ing. Roberto Simone
Ingeniero de aplicaciones
robertosimone@arnet.com.ar
Ing. Daniel Di Lella
D.F.A.E
www.edudevices.com.ar
edudevices@gmail.com
dilella@arnet.com.ar
(MDO_EDUKIT_016)
Diseño de una Aplicación en 10 Minutos!! .....
Junto con la placa PLUGIN_AW para la familia HC9S08 se incluye un CD.
Dentro de él encontraremos la biblioteca “Edukit.h” que compendia funciones en
C aplicadas a todos los periféricos del EDUKIT08. Esta biblioteca acompañada del
Processor Expert del CodeWarrior nos abre la puerta para implementar
aplicaciones en tiempo record y hace más fácil el aprendizaje del lenguaje C para
MCU´s en nuestro sistema didáctico.
La aplicación propuesta.
Consiste en mostrar una leyenda en un LCD para lo cual nos dividimos el trabajo en las
siguientes etapas:
•
Crear el archivo de proyecto.
•
Configurar los puertos de E/S por medio del Processor Expert.
•
Escribir el programa.
Veamos la primera etapa.
El archivo de proyecto.
Lo más cómodo para generarlo es usar el asistente del CodeWarrior:
Elegimos la familia de microcontroladores, HC9S08, el dispositivo que emplearemos,
9S08AW60, y la herramienta de programación, Open Source BDM, que corresponde
al R(S)_POD:
Acto seguido escogemos al lenguaje C como lenguaje de programación, y damos la
ruta y el nombre del proyecto:
Solicitamos la incorporación del Processor Expert como herramienta visual para
configurar a los periféricos:
Por último indicamos que incluya un código de inicialización ANSI; este código se
encarga entre otras cosas de iniciar registros importantes del microcontrolador y las
variables globales.
El modelo de memoria Small nos permite alojar las variables globales fuera de la
página 0 de memoria ( fuera de las direcciones $0000 a $00FF ) aprovechando mejor
la RAM.
Con buen sentido rechazamos la inclusión de matemática en punto flotante ya que
los microcontroladores de 8 bits no la contemplan en su hardware. De otro modo
gastaríamos los recursos del procesador en estas operaciones.
El CodeWarrior está en condiciones de generar el proyecto, sin embargo encontraremos
muy pocos archivos fuentes:
No nos asustemos pues con una primera compilación (Make) del proyecto se generarán
los archivos necesarios:
Resaltamos el archivo “EleCeDe.c” que contiene a la función main donde escribiremos
nuestro programa.
Configuración de los periféricos.
El Processor Expert nos tiende una mano al momento de inicializar los periféricos del
microcontrolador. En forma visual estableceremos cada una de las características de
funcionamiento de los módulos que usaremos.
Para empezar deshabilitemos el COP y establezcamos un reloj externo de 20MHz:
El manejo del LCD requiere que los siguientes pines sean salidas:
•
Bus de datos del LCD en PTB.
•
Enable del LCD en PTA.7.
•
Register Select del LCD en PTA.6.
•
Read/Write del LCD en PTC.4.
El Processor Expert muy generosamente nos permite configurar como salida un pin
individual o todo un puerto; le damos aplicación a ambas posibilidades:
Compilamos una vez más y se generará el código fuente que inicia como salida a estos
puertos.
El corazón de la aplicación.
Vamos ahora al ejemplo que propusimos al principio, mostrar una leyenda en el LCD.
Lo primero será inicializar el LCD. Podemos hacerlo de 2 maneras, o programando o
bien usando una biblioteca que haga todo por nosotros.
No dudamos de adoptar la segunda. Nos preguntaremos como obtener esa biblioteca. En
el CD de la placa PLUGIN_AW (con el MC 9S08AW60) se encuentran numerosos
ejemplos que se valen de la biblioteca “Edukit.h”. Tan solo con copiarla a nuestra
aplicación disfrutaremos de escribir menos código.
La cuestión es donde copiarla. Al generar el proyecto, el CodeWarrior crea una carpeta
dedicada a este. A su vez dentro, de esta carpeta habrá otras carpetas, en especial una de
nombre CODE. Dentro de ella están los programas fuente y los archivos de cabecera.
Allí copiamos a “Edukit.h”.
#include <stdio.h>
#include "Edukit.h"
void main(void)
{
PE_low_level_init();
inicia_LCD();
LCD_printf_xy(0, 0, "Hola amigos.");
for(;;){}
}
Nuestros lectores habrán advertido que incluimos también a una biblioteca llamada
stdio.h. Su presencia es necesaria pues la función LCD_printf_xy se vale de otra
función, sprintf, declarada en stdio.h. Para nuestra satisfacción stdio.h viene junto con
el CodeWarrior.
La función main es extremadamente sencilla. Llamamos a la función inicia_LCD que
configura al LCD a 2 renglones y comunicación de 8 bits. El cartel se muestra en
pantalla mediante la función LCD_printf_xy, que en este caso exhibe la leyenda “Hola
amigos”.
Damos por concluido este ejemplo dejando claro que escribir una aplicación es algo
muy simple pues contamos con el CodeWarrior y una biblioteca “Edukit.h” muy
completa.
A continuación damos la declaración de las funciones incluidas en dicha biblioteca para
que nuestros lectores tomen una idea de sus potencialidades:
void apagar_LED1(void);
void encender_LED1(void);
void
void
void
void
demora_x100us(unsigned int);
demora_ms(unsigned char);
demora_seg(unsigned int);
demora_1s(void);
void antirrebote(void);
void apaga_catodos(void);
void barre_7seg(unsigned char []);
void barre_7seg_temp(unsigned char []);
unsigned char BCD_a_7seg(unsigned char);
void catodo(unsigned char);
unsigned int cuentas_a_temp(unsigned int);
unsigned int cuentas_a_voltios(unsigned int);
void int_a_BCD(unsigned int, unsigned char []);
void
void
void
void
void
inicia_LCD(void);
LCD_Control(unsigned char);
LCD_Dato(unsigned char);
LCD_gotoxy(unsigned char, unsigned char);
LCD_printf_xy(unsigned char, unsigned char, char *);
void
void
void
void
void
inicia_LCD_4b(void);
LCD_Control_4b(unsigned char);
LCD_Dato_4b(unsigned char);
LCD_gotoxy_4b(unsigned char, unsigned char);
LCD_printf_xy_4b(unsigned char, unsigned char, const char *);
void Incrementa_tiempo_MSD(unsigned char *, unsigned char *, unsigned char *);
void Muestra_tiempo_MSD(unsigned char, unsigned char, unsigned char);
unsigned int Medicion(void);
void RS422_interroga(unsigned char);
void RS422_dato(unsigned char);
void RS422_respuesta(unsigned int);
void Guardar_Memoria_24LC(unsigned int, unsigned char);
unsigned char Leer_Memoria_24LC(unsigned int);
unsigned char SPI_Enviar(unsigned char);
Nota de Radacción: El lector puede descargar este capítulo y capítulos anteriores desde
la sección “Artículos Técnicos” (“Mundo EDUKIT08”) en el sitio web de
EduDevices (www.edudevices.com.ar )
Descargar