Siguenos en ...

Google+facebooktwitter

youtubepinterest RSS aquihayapuntes

Últimos Tutoriales


Licencia

Creative Commons

 

Todo el contenido de este sitio está bajo una licencia de Creative Commons

 

Empezando con las librerías gráficas de Microchip

Control de velocidad de un motor de C.C En este pequeño tutorial describiré lo que han sido mis primeras impresiones con las librerías gráficas de Microchip, la idea era controlar algún dispositivo externo que aceptará las órdenes del usuario a través de alguno de los controles gráficos que nos proporciona la librería. Al final ese dispositivo externo se materializo en un pequeño motor de C.C al que a través de dos botones se le puede aumentar o disminuir su velocidad, la aplicación gráfica también incluye  un indicador de revoluciones (METER) donde podemos ver el nivel de revoluciones del motor.

 

 

 

 

 

 

Hardware utilizado


La placa principal de desarrollo es la Multimedia Expansion Board de Microchip

Esta placa bajo mi punto de vista viene muy bien equipada en cuanto a periféricos se refiere, entre ellos tenemos: slot para tarjeta microSD, acelerómetro y sensor de temperatura (BMA150), EEPROM externa 24LC08, audio códec (WM8731), conectividad WIFI 802.11, Joystick, etc. La placa no lleva el PIC integrado sino un conector en el que podemos conectar cualquiera de los Starter Kit disponibles, si utilizamos la PIC32 Ethernet Starter Kit además de todo eso tendremos conectividad USB y Ethernet. El único inconveniente que le veo a este tipo de placas es que los pines libres accesibles al PIC para conectar nuestros propios periféricos son pocos (aspecto lógico por otro lado ya que la mayoría de pines están ocupados por los periféricos que integra la propia placa), a pesar de ello está placa dispone de un conector de expansión de 28 pines, no son muchos si además tenemos en cuenta que tres de ellos son de alimentación, pero entre los pines accesibles  se encuentran el acceso a las dos USART del pic, por lo que a través de está interfaz podemos conectar cualquier otro dispositivo independientemente del número de pines que necesite para manejar al periférico.

En este ejemplo se va a utilizar la USART Nº 1 del PIC32 para comunicarnos con otro PIC concretamente el PIC16F877, este recibirá las órdenes a través de la interfaz serie y será el encargado de maniobrar el motor de corriente continua. Además el circuito incluye dos componentes más un Buffer (SN74LS126an) utilizado para adaptar por hardware los niveles de tensión de 3,3 V a los que trabaja la placa a los niveles TTL (5V) del resto de los componentes. Y el driver del motor (L293B), necesario ya que el PIC no es capaz de suministrar la corriente necesaria para su funcionamiento.

Nota: algunos pines del pic permiten manejar 5V de salida directamente configurando previamente el pin correspondiente en modo colector abierto. Mirar el datasheet para saber que pines permiten esta configuración.

El circuito montado será el siguiente:

 

Circuito regulador de velocidad

 

Conceptos sobre las librerías gráficas


Para instalar las librerías solo tenemos que descargar el instalador desde la página web de Microchip e instalarlas ya que son gratuitas, puedes acceder a la página de descarga desde aquí.

Junto con la librerías se instalan una serie de demos que podremos encontrar en la carpeta C:\ Microchip Solutions\Graphics.

La librería solo funciona en PICs de 16 y 32 bits, nuestros queridísimos PIC de 8 bits no tienen recursos suficientes para hacer funcionar la librería.

Como se ve en la figura de abajo la librería presenta una estructura por capas:

 

Capas Librería Gráfica

 

En la capa inferior (Device Driver Layer) es donde está implementado el driver o controlador que facilita la comunicación con el módulo GLCD, es por tanto dependiente de la arquitectura del módulo que elijamos, hay disponibles diferentes controladores para el puerto paralelo (PMP) del PIC según el fabricante y la tecnología de LCD Gráfico que tengamos.  

La placa Multimedia de Desarrollo de Microchip viene equipada con una QVGA TFT de 320×240 píxeles de resolución y un controlador gráfico, concretamente el Solomon Systech SSD1926 que permite configurar una interfaz de 8 ó 16 bits con el puerto paralelo de PIC (PMP), además se incluye una pantalla táctil resistiva por medio de la cual podemos interactuar con los objetos gráficos que creemos.

El controlador correcto según el módulo LCD gráfico lo elegimos en el archivo de cabecera HardwareProfile.h

La siguiente capa por encima que tenemos es la de funciones gráficas primitivas (Graphics Primitives Functions), esta capa dispone de funciones que permiten realizar la presentación en pantalla de objetos gráficos básicos como líneas, barras, círculos, etc.  Esta capa se apoya a su vez en la anterior para poder realizar sus cometidos.

La siguiente capa que tenemos hacía arriba es la capa de objetos gráficos ( Graphics Objects Layer) hace posible que se pueda dibujar en la pantalla los widgets, que son objetos gráficos como botones, ventanas, indicadores, cajas de textos, etc. Esta capa dispone de una interfaz que acepta mensajes de la capa superior (Aplication Layer).
Esta interfaz acepta mensajes de diferentes dispositivos de entrada como teclados, ratones o una pantalla táctil.

Por último tenemos la capa de aplicación, que puede ser cualquier programa que necesite interactuar con las librerías Gráficas. Desde la capa de aplicación podemos acceder a funciones de las capas inferiores.

 

Nota: a las funciones de una aplicación que pueden ser llamadas para acceder a otras funciones del programa o de alguna librería determinada se las conoce con la abreviatura de API (Application Programming Interface), este término aparece mucho en la documentación que ofrece Microchip sobre estas librerías.

Los objetos  gráficos disponibles en las librerías son los siguientes: Button, Slider, Window, Check Box, Radio Button, Edit Box, List Box, Group Box, Horizontal/Vertical Scroll Bars, Progress Bar, Static Text, Picture, Dial, Meter.

La creación y control de los objetos se realiza a través de una estructura de datos conocida en los lenguajes de programación como listas enlazadas.


Cuando se dibuja un objeto gráfico en la pantalla sigue un estilo que determina por ejemplo el color del objeto, el tipo de fuente que utiliza, tamaño etc.  Podemos crear nuestro propio estilo o utilizar el que viene por defecto en la librería.

Para añadir una fuente determinada a nuestro programa podemos utilizar la aplicación Graphics Resource Converter proporcionada por Microchip junto con las librerías.

 

Graphics Converter

 

También se pueden añadir imágenes, como fotos o logos:

 

 

Carga de Imágenes

 

Esta aplicación lo que hace es convertir la imagen en un formato de archivo que el compilador pueda entender. Admite la opción de elegir entre dos compiladores C32 para los PIC32  y C30 para los PIC de 16 bits. El tipo de formato del archivo depende del destino donde se vaya a guardar, en la flash interna del PIC o en una flash externa, en ambos casos debemos de tener en cuenta el tamaño de la flash ya que según la resolución de la imagen el archivo resultante de la conversión puede ocupar bastantes kB. Si elegimos la flash interna del PIC la aplicación generará dos archivos uno .h (de cabecera) y otro .c donde se creará un Array constante de caracteres con la información de la imagen, luego deberemos añadir los archivos generados por la aplicación a nuestro proyecto.  La aplicación también puede convertir la imagen en un archivo binario que se guardará por separado en un archivo externo.

Diagrama de flujo de una aplicación gráfica


El diagrama de flujo de una aplicación gráfica que utilice las librerías de Microchip es el siguiente:

 

Diagrama de Flujo

 

Una descripción breve de lo que hace cada función es la siguiente:

  • InitGraph() resetea el controlador gráfico, mueve el cursor a la posición (0,0) e inicializa la pantalla en negro.
  • GolCreateScheme() es llamada para definir el estilo de esquema que se aplicará a los Objetos. Si no creamos ningún estilo personalizado se cogerá el de por defecto.
  • GolInit() con la llamada a esta función se realizan las acciones de las dos anteriores juntas.
  • ObjCreate(,,) esta función representa los múltiples objetos que pueden ser creados,  hay disponibles funciones específicas para cada clase de objeto que queramos crear. Por ejemplo: BtnCreate()  para crear un botón ó MtrCreate() para crear un indicador numérico (METER), las acciones que se realizan al llamar a esta función son: se crea la estructura de datos con las propiedades del objeto, se asigna memoria dinámicamente en el (HEAP) y se incluye el nuevo objeto al final de la lista enlazada, donde se encuentran el resto de los objetos gráficos de nuestra aplicación, por último retorna un puntero al objeto creado.
  • GOLDraw() esta función es la que se encarga de dibujar los objetos en pantalla. No admite parámetros y su función es chequear los bits de estado de los objetos dentro de la lista enlazada para comprobar si tienen que ser redibujados o no.
  • Message Struct es una estructura de datos donde se guardan los mensajes enviados por el usuario. Por ejemplo, en una pantalla táctil si se pulsa un botón se almacenará en la estructura las coordenadas (x,y) del botón pulsado y el tipo de evento que ha producido el usuario, por ejemplo si el botón se ha pulsado o por el contrario se ha soltado.
  • GOLMsg() es la función que se encarga de procesar los mensajes enviados por el usuario. Por ejemplo, cuando se pulse el botón (+) enviar por el puerto serie un valor que indique que lo que se quiere hacer es aumentar la velocidad del motor. Existen más funciones para procesar mensajes como GOLMsgCallback () que además permite personalizar el comportamiento de los objetos en función de su estado y el evento ocurrido. Si esta función está definida es llamada por GOLMsg() cada vez que haya un mensaje valido para el objeto.


En resumen, una vez inicializado el LCD gráfico, creado el objeto y dibujado en la pantalla por medio de GOLDraw() se espera hasta que el usuario desencadene un evento, por ejemplo pulsar un botón, que es procesado entonces por GOLMsg(), para que realice una determinada acción, por ejemplo aumentar la velocidad de un motor o encender un led, después se vuelve a llamar a GOLDraw() para que redibuje el objeto (mostrar el botón presionado).

© 2007-2017 AquiHayapuntes.com