domingo, 8 de noviembre de 2015

XiuaElectronics: Curso de XC8 y MPLABX

Curso de MPLABX y XC8 #04: Manejo de Lcd#1 

Buenas compañeros.
Antes de iniciar el cuarto capitulo del curso de programación en C para pic's con MPLABX y XC8, les recomiendo ver los capítulos anteriores siguiendo el siguiente LINK.

Ya vistos los anteriores capítulos y una vez teniendo todos los software necesarios procederemos a explicar de que tratara esta clase.

Primero vamos a saber algo del hardware a utilizar:

LCD: Las pantallas de cristal líquido LCD o display LCD para mensajes (Liquid Cristal Display) tienen la capacidad de mostrar cualquier carácter alfanumérico, permitiendo representar la información que genera cualquier equipo electrónico
de una forma fácil y económica. La pantalla consta de una matriz de caracteres (normalmente de 5x7 o 5x8 puntos) distribuidos en una, dos, tres o cuatro líneas de 16 hasta 40 caracteres cada línea. El proceso de visualización es gobernado por un microcontrolador incorporado a la pantalla, siendo el Hitachi 44780 el modelo de controlador más utilizado. 

Bien, ya que sabemos que es un LCD y para que sirve, ahora vamos a pasar a la parte de configuración; para esta parte vemos a ver unas instrucciones de XC8 las cuales se utilizan para configurar el LCD y darle los comandos básico.

Para que el compilador pueda ejecutar estos comandos solo basta con incluir la siguiente libreria:

#include  <xlcd.h>     // Librería LCD a incluir

WriteCmdXLCD(XXXXXXX):

Este comando es muy importante ya que da las configuraciones básicas del LCD; entre ellas destacamos las siguientes:

0b00001111 // Display on
0b00001011 // Display off
0b00001111 // Cursor on
0b00001101 // Cursor off
0b00001111 // Cursor Blink
0b00001110 // Cursor No Blink
0b00000001 // Borrar lcd
0b11000000 // Cambio de línea

El modo de uso de este comando con respecto a las funciones sería:

WriteCmdXLCD(0b00000001);   // Borramos LCD

SetDDRamAddr(XXX):

Este comando se utiliza para dar la posición del LCD donde se imprimirán los caracteres que necesitamos; para saber las posiciones con la que contamos les mostraré el siguiente diagrama:

/* Tabla de posiciones del LCD 2x16
 *  ===============================================
 * |00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|
 *  ===============================================
 * |40|41|42|42|44|45|46|47|48|49|4A|4B|4C|4D|4E|4F|
 *  ===============================================
*/    

Conociendo las posiciones el uso correcto de SetDDRamAddr( ) sería el siguiente:

SetDDRamAddr(0x00);         // Primera fila, Primera columna

putrsXLCD("XXX"):     

Este comando es el que nos permitirá enviar a SetDDRamAddr los caracteres a imprimir, su uso es muy sencillo como se vera a continuación:

putrsXLCD("Hola Mundo!"); // Imprimimos el mensaje Hola Mundo!


Bien! estos son los comandos básico para poder manipular nuestro LCD; pero antes de eso debemos saber que para que se inicialice el LCD debemos configurar unos retardos mientras que se carga el controlados de este, para eso basta con colocar una rutina sencilla al inicio y al final del programa, y también una librería <delays.h> quedando de la siguiente forma:

#include  <delays.h> // Librería a incluir

void DelayFor18TCY(void);
void DelayPORXLCD(void);
void DelayXLCD(void);

============ Programa =============

// Retardos necesarios para el driver para la LCD
void DelayFor18TCY(void)
{
 Delay10TCYx(120);
}
void DelayPORXLCD(void)
{
 Delay1KTCYx(180);
 retundir;
}
void DelayXLCD(void)
{
 Delay1KTCYx(60);
 return;
}
quedando de la siguiente forma:

:::::::::::::::::::::::::::::::::::::::::: Programa :::::::::::::::::::::::::::::::::::::::::::


#include  <delays.h> // Librería Tiempos a incluir
#include  <xlcd.h>     // Librería LCD a incluir

void DelayFor18TCY(void);
void DelayPORXLCD(void);
void DelayXLCD(void);

========== Aquí va la configuración del LCD =========
========================================

WriteCmdXLCD(0b00000001);   // Borramos LCD
SetDDRamAddr(0x00);               // Primera línea
putrsXLCD("Hola Mundo!");       // Imprimimos Mensaje 


// Retardos necesarios para el driver para la LCD
void DelayFor18TCY(void)
{
 Delay10TCYx(120);
}
void DelayPORXLCD(void)
{
 Delay1KTCYx(180);
 retundir;
}
void DelayXLCD(void)
{
 Delay1KTCYx(60);
 return;
}

Listo! ya estamos en lo ultimo, la configuración del LCD;  esta configuración se especificará en el siguiente vídeo:


NOTA: Diferencias entre conexión de 4 bits y 8 bits en el LCD.

Modo de 4 bits utiliza 4 E / S pines del puerto de datos y dos o tres pines de E / S adicionales para el control.
Modo de 8 bits utiliza 8 E / S pines del puerto de datos y dos o tres pines de E / S adicionales para el control.
El modo de 4 bits requiere dos transferencias de 4 bits para cada instrucción y el carácter que se envía a la pantalla.
Modo de 8 bits requiere sólo una transferencia de 8 bits para cada instrucción y el carácter que se envía a la pantalla.
La implicación es que, las transferencias de datos de 4 bits tendrán el doble de tiempo para transferir en comparación a las transferencias de datos de 8 bits.
Las transferencias de datos de 4 bits también requieren un poco más de código, necesitará el nibble inferior para ser desplazado en el nibble superior con cada comando y carácter de transferencia.


Esto sería todo del cuarto capitulo de programación en C con XC8 Compiler y MPLABX, de pronto en el vídeo tuve algunos errores, o mal pronunciamiento, pero la finalidad de este blog es corregir esto y profundizar un poco más en el tema; espero que les sirva!

Esto es todo por hoy, Sigue mi blog y visita mi próxima entrada!



NOTA:
 se les recuerda a los lectores que se utilizo la versión del compilador XC8 Versión 1.34 la cual trae las peripheral libraries incluidas en él; el pdf de estas lo pueden encontrar en la parte de etiquetas del blog en la etiqueta llamada Documentación.
Bien muchachos, esto es todo por hoy; esten pendiente en mi canal, o de mi blog o de mi pagina de facebook.

Facebook: https://www.facebook.com/electronicalibrexc/
Youtube:  http://www.youtube.com/c/breismanrueda
Google +: https://plus.google.com/u/0/+breismanrueda
Twitter: https://twitter.com/BreismamR

Esto es todo por hoy, Sigue mi blog y visita mi próxima entrada!

Cualquier duda, trabajo, tutoria personalizada por correo electronico o pagina en facebook:
Correo: ElectronicaLibreXC@outlook.com
Facebook: https://www.facebook.com/electronicalibrexc/



Salu2...








No hay comentarios.:

Publicar un comentario