LCD_I2C

20
Control de un módulo LCD a través del bus I2C

Transcript of LCD_I2C

Page 1: LCD_I2C

Control de un módulo LCDa través del bus I2C

Page 2: LCD_I2C

Requerimientos hardware

� Placa basada en microcontrolador pic 16F877x (Plataforma Monibot)

� Módulo lcd por I2C modelo LCD03

� Cable de comunicación de 4 hilos (Vcc, Gnd, sda, scl)

Page 3: LCD_I2C

La placa entrenadora

� Como placa de control utilizaremos la placa base Monibot:

Page 4: LCD_I2C

El módulo LCD03 (I)

� Características:� Se trata de un módulo lcd de 4 líneas de 20 caracteres con

retro iluminación controlable por software.

� Puede ser configurado para trabajar mediante el protocolo serie o i2c.

� Incluye conector con posibilidad de conectar un teclado

matricial de 12 teclas

� Como display lcd i2c utilizaremos el LCD03:

Page 5: LCD_I2C

El módulo LCD03 (II)

� Vista delantera

!Importante!

Este puente debe estar abierto para que el lcd trabaje en modo I2C.

� Vista trasera

Page 6: LCD_I2C

El cable de conexión

� Se construye un cable con conectores molex de cuatro hilos según el esquema siguiente:

CON8 (placa)

Gnd

Vcc

Sda=RC4

Scl=RC3

CON_i2c (lcd)

Vcc

Sda

Scl

Gnd

Page 7: LCD_I2C

El programa de control (I)

� Vamos a utilizar el asistente del CSS para nuestro primer programa

Page 8: LCD_I2C

El programa de control (II)

� Seleccionamos

nuestro modelo de pic,

frecuencia del reloj,

tipo de oscilador

y fuses.

Page 9: LCD_I2C

El programa de control (III)

� En la pestaña de

comunicaciones seleccionamos

“I2C”

Page 10: LCD_I2C

El programa de control (IV)

� El archivo .h que nos genera es el siguiente

Page 11: LCD_I2C

El programa de control (V)

� El archivo .c que nos genera es el siguiente

Page 12: LCD_I2C

El programa de control (VI)

� El código que nosotros

tenemos que añadir es el

siguiente

Page 13: LCD_I2C

El programa de control (VI)

� La salida por pantalla es:

Page 14: LCD_I2C

El programa de control (VII)

� La tabla de comandos que reconoce el lcd es la siguiente:

Page 15: LCD_I2C

Funciones I2C del compilador

Las funciones para manejar el bus I2C son:� i2c_start();

� Comando de “start” del bus I2C en modo “master”. Lo pondremos siempre al principio de nuestro programa. El microcontrolador actuará como maestro y el LCD_I2C actuará siempre como esclavo.

� i2c_stop();

� Comando de “stop” del bus I2C. Lo usaremos cuando no queramos seguir mandando datos al bus.

Page 16: LCD_I2C

Funciones I2C del compilador

� i2c_write();� Es la función más importante para este ejemplo. Se usa para seleccionar el dispositivo (mandando al bus su número de identificación. Dato “0xC6” para nuestro lcd.

� i2c_read();� Usamos esta función cuando queremos leer un registro de un dispositivo conectado al bus:

Ejemplo:i2c_start();i2c_write(0xa1);data1 = i2c_read(); // Leemos un byte del dispositivo con id=0xA1data2 = i2c_read(); // Leemos el siguiente byte

i2c_stop();

Page 17: LCD_I2C

Funciones I2C del compilador

� i2c_write();� Es la función más importante para este ejemplo. Se usa para seleccionar el dispositivo (mandando al bus su número de identificación. Dato “0xC6” para nuestro lcd.

� i2c_read();� Usamos esta función cuando queremos leer un registro de un dispositivo conectado al bus:

Ejemplo:i2c_start();i2c_write(0xa1);data1 = i2c_read(); // Leemos un byte del dispositivo con id=0xA1data2 = i2c_read(); // Leemos el siguiente byte

i2c_stop();

Page 18: LCD_I2C

Creando nuestras propias funciones de control

/////////////////////////////////////////////////// //// FICHERO CON LAS FUNCIONES DE CONTROL DEL L.C.D //// para placa MONIBOT basada en pic-16F877A con //// interface I2C conectado en CON8 scl=RC3,sda=RC4 //// Fecha: mayo-2009 Rev: 9.05.11 //// By: Domingo Llorente //// ************************************************ //#use i2c(master, sda=PIN_C4, scl=PIN_C3) // Configu rar Dispositivo como

Master

//////////////////////////////// Declaración de funciones ////////////////////////////////void LCDI2C_Envia_comando(unsigned char comandos);void LCDI2C_Init(void);void LCDI2C_Stop(void);void LCDI2C_Envia_dato(unsigned char datoi2c);void LCDI2C_Envia_cadena(char *texto);void LCDI2C_Cursorpos(char fil, char col);void LCDI2C_BorrarL1(void);void LCDI2C_Nibble(unsigned char dato8bits);void LCDI2C_Binbcd(unsigned char dato8bits);

Page 19: LCD_I2C

Creando nuestras propias funciones de control

/////////////////////////////// Declaración de comandos ///////////////////////////////#define borrar_lcd 0x0C // Borrar lcd#define cursor_home 0x01 // Situa cursor en pos 1,1#define cursor_ocultar 0x04 // Ocultar cursor#define cursor_mostrar 0x05 // Mostrar cursor b ajo#define cursor_parpadear 0x06 // Mostrar cursor b ajo#define cambio_linea 0x0D // Retorno de carro#define lcd_on 0x13 // Iluminación ON#define lcd_off 0x14 // Iluminación OFF

(*) El código fuente de todas las funciones se encu entra en el archivo:“lcd_i2c.c”

Page 20: LCD_I2C

Segundo programa usando nuestras funciones de control

#include <16F877A.h>#fuses XT,NOWDT,NOPROTECT,NOLVP#use delay(clock=4000000)#include <lcd_i2c.c>/// MENSAJES DE TEXTO ///char msg1[]= " D.P.E (2009) ";char msg2[]= " IES LUIS DE LUCENA ";char msg3[]= " GUADALAJARA ";char msg4[]= " ------------- ";

void main(){LCDI2C_Init();LCDI2C_Envia_cadena(msg1); // Escribe la cadena msg1 en L1 del lcdLCDI2C_Envia_cadena(msg2); // Escribe la cadena msg2 en L2 del lcdLCDI2C_Envia_cadena(msg3); // Escribe la cadena msg3 en L3 del lcdLCDI2C_Envia_cadena(msg4); // Escribe la cadena msg4 en L4 del lcd

LCDI2C_Envia_dato(':');LCDI2C_Envia_dato('-');LCDI2C_Envia_dato(')');LCDI2C_Stop(); // Comando de "Stop" del bus i2cwhile(1); // Bucle infinito}