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

Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

Sep 10, 2018

Download

Documents

vuongdiep
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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

Page 2: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

La placa entrenadora

� Como placa de control utilizaremos la placa base Monibot:

Page 4: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (I)

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

Page 8: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (II)

� Seleccionamos

nuestro modelo de pic,

frecuencia del reloj,

tipo de oscilador

y fuses.

Page 9: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (III)

� En la pestaña de

comunicaciones seleccionamos

“I2C”

Page 10: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (IV)

� El archivo .h que nos genera es el siguiente

Page 11: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (V)

� El archivo .c que nos genera es el siguiente

Page 12: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (VI)

� El código que nosotros

tenemos que añadir es el

siguiente

Page 13: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (VI)

� La salida por pantalla es:

Page 14: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

El programa de control (VII)

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

Page 15: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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: Control de un módulo LCD a través del bus I2C · Requerimientos hardware Placa basada en microcontrolador pic 16F877x (Plataforma Monibot) Módulo lcd por I2C modelo LCD03 Cable

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}