RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Control de un LCD03 por bus I2C

El LCD03 es un display que permite la comunicación tanto por bus I2C como por RS232. En este caso se va a emplear la conexión I2C con el PIC 16F876A. Para ello hay que sacar el puente trasero que viene conectado por defecto para una conexión RS232.
Dentro de este bus I2C, el acceso al display se establecerá con la dirección 0xC6. Por esta dirección se enviará el texto a mostrar así como los comandos para su control.


Decimal
Comando
Descripción
1
Inicio de Cursor
Fija el cursor en la posición de inicio (esquina superior izquierda)
2
Fijar cursor (1-80)
Fija el cursor en una posición especificada tras el byte siguiente, donde 1 es de la esquina superior izquierda y 80 es la esquina inferior derecha
3
Fijar cursor (línea, columna)
Fija el cursor utilizando dos bytes, donde el primer byte es la línea y el segundo byte es la columna
4
Ocultar cursor
Oculta la posición del cursor en el display 
5
Mostrar cursor bajo
Cambia el tipo de cursor a un cursor bajo de subrayado 
6
Mostrar cursor parpadeante
Cambia el tipo de cursor a un cursor parpadeante 
8
Borrar carácter anterior
Borra el carácter anterior a la posición del cursor
9
Tabulador horizontal (según configuración del tabulador)
Mueve la posición actual del cursor a la posición definida en la configuración del comando 18 (por defecto el espacio del tabulador es 4)
10
Salto de línea (LF) inteligente
Mueve el cursor a la línea inferior en la posición de la misma columna
11
Tabulador vertical
Mueve el cursor a la línea superior en la posición de la misma columna
12
Borrar pantalla
Borra toda la pantalla y coloca el cursor en la posición de inicio
13
Retorno de carro
Mueve el cursor al principio de la siguiente línea
17
Borrar columna
Borra el contenido de la columna actual y mueve el cursor a la siguiente columna
18
Configuración tabulador
Define el tamaño del tabulador, el byte siguiente puede tener un tamaño de 1 a 10
19
Apaga la iluminación
Apaga la iluminación de la pantalla.
20
Enciende la iluminación
Enciende la iluminación de la pantalla.
27
Generador de caracteres personalizados
Permite la creación de 8 caracteres personalizados.
32-255
Caracteres ASCII
Escribe caracteres ASCII en el display

Para escribir un comando con el PIC sobre el display y ejecutar su acción correspondiente se escribe sobre el registro 0 del LCD03 el correspondiente comando:

i2c_start();            //Comienzo de la comunicación I2C ...
i2c_write(LCD03_ID);    //...con la dirección del LCD03...
i2c_write(0);      //...apuntando a la posición 0 del registro del LCD03
i2c_write(comando);     //acción a ejecutar según el valor de “comando”
i2c_stop ();            //Finalización de la transmisión


Donde “LCD03_ID” contiene la dirección del bus para el LCD (0xC6) y “comando” el valor decimal que especifica la actuación a realizar sobre el display según la tabla anterior.

Si en lugar de ejecutar un comando lo que se desea es escribir un texto, un posible procedimiento es el especificado a continuación.

Primero se guarda en una variable tipo buffer (texto) la cadena de caracteres a escribir en el LCD:

 strcpy (texto, "Mensaje a mostar");  //En “texto” se guarda el mensaje

Si se quiere mostrar centrado en alguna de las lineas del display, antes identificaremos cuantos caracteres posee el mensaje guardado:

 n=strlen(texto);   //En “n” el número de caracteres del mensaje

Y establecemos, teniendo en cuenta que se trata de un display de 4x20 caracteres, con las variables columna y linea en que punto del display comenzará a mostrarse el mensaje:

columna=((20-n)/2)+1;     //Posición texto centrado...
linea=1;                  //... en la 1ª linea

Y se posiciona cursor en el LCD:
 
i2c_start();               //Comienzo de la comunicación I2C ...
i2c_write(LCD03_ID);       //...con la dirección del LCD03...
i2c_write(0);       //...apuntando a la posición 0 del registro del LCD03
i2c_write(3);              //comando posicionar cursor... 
i2c_write(linea);          //...en la linea...
i2c_write(columna);        //... y en la columna indicadas
i2c_stop ();               //Finalización de la transmisión

 Finalmente, posicionado ya el cursor, se escribe secuencialmente toda la cadena de texto:

for ( i=0; i<n; i++) {
   i2c_start();               //Comienzo de la comunicación I2C ...
   i2c_write(LCD03_ID);       //...con la dirección del LCD03...
   i2c_write(0);      //...apuntando a la posición 0 del registro del LCD03
   i2c_write(texto[i]);       //...escribe caracter posición i de texto[]
   i2c_stop ();               //Finalización de la transmisión
   delay_ms(10);
   }


[+/-] Ver / Ocultar programa completo en C
En este video se puede verificar su funcionamiento según el procedimiento explicado.



Todos los archivos del proyecto se pueden descargar de este enlace:
El proyecto contenido en el artículo ha sido diseñado con la versión v4.084 de CCS PIC C COMPILER


2 comentarios:

Brayan Riquelme López Machuca dijo...

Hola que tal, serías tan amable de decirme como configurar la libreria i2c para MPLABX, aún no puedo hacerlo correctamente. Te lo agradeceria mucho.

Robotypic dijo...

Hola Brayan.
Lo siento pero no trabajo con MPLABX

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)