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 )