Está en la página 1de 114

Manual de prcticas con el sistema de

desarrollo de proyectos Easypic 6


Trabajo Practico Educativo

Presenta:

Marcos Alfonso Garcia Castilo


Ana Karen Martinez Aldana

Director:
Dr. Mario Gonzalez Lee

Asesor:
Dr. Rene Fabian Vazquez Bautista

Revisor:
Dr. Luis Javier Morales Mendoza

Universidad Veracruzana
Facultad de ingeniera Electrnica y
comunicaciones
INDICE
PRESENTACION..4
CARACTERISTICAS Y FUNCIONES ESENCIALES. 5
CONFIGURACION DE COMPILADOR7
PRACTICA 1 SALIDA DE SEALES SIMPLES10
MARCO TEORICO.11
ALGORITMO.12
DIAGRAMA DE FLUJO13
CODIGO FUENTE..14
EJECICIO PROPUESTO.15
PRACTICA 2 ENTRADAS DE SEALES DIGITALES CON BOTONES
DE PRESION.22
MARCO TEORICO.23
ALGORITMO.24
DIAGRAMA DE FLUJO....25
CODIGO FUENTE.26
EJECICIO PROPUESTO29
PRACTICA 3 LCD 2X16 VISUALIZADOR EXTERNO.34
MARCO TEORICO..36
ALGORITMO.36
DIAGRAMA DE FLUJO...37
CODIGO FUENTE.38
EJECICIO PROPUESTO41
PRACTICA 4 COG LCD 2X16 VISUALIZADOR INTER..47
MARCO TEORICO.49
ALGORITMO49
DIAGRAMA DE FLUJO50
CODIGO FUENTE..51
2
EJECICIO PROPUESTO54
PRACTICA 5 CONVERTIDOR DE SEALES AD.59
MARCO TEORICO..61
ALGORITMO61
DIAGRAMA DE FLUJO62
CODIGO FUENTE.63
EJECICIO PROPUESTO65
PRACTICA 6 CODIGO DE SEGURIDAD KEYPAD 4X4..74
MARCO TEORICO.75
ALGORITMO76
DIAGRAMA DE FLUJO...77
CODIGO FUENTE78
EJECICIO PROPUESTO..84
PRACTICA 7 WATCHDOG TIMER (WDT)..90
MARCO TEORICO..91
ALGORITMO92
DIAGRAMA DE FLUJO...92
CODIGO FUENTE93
PRACTICA 8 PANTALLA GLCD 128x64..96
MARCO TEORICO..98

ALGORITMO98

DIAGRAMA DE FLUJO...99

CODIGO FUENTE...100

PRESENTACION

3
Este Trabajo practico educativo est basado en una tarjeta
desarrollo Easypic6, este sistema de desarrollo cuenta con
diferentes tipos de mdulos los cuales se encuentran de
manera integral en comunicacin con otros mdulos para
cuando sean requeridos puedan lograr su interaccin entre
ellos. Una de las ventajas de este sistema de desarrollo es la
versatilidad que se obtiene al contar con todo lo necesario
dentro del sistema, con ello no necesitamos de adquirir
ningn tipo de hardware externo para su pleno
funcionamiento, aunque cabe mencionar que maneja tres
tipos de lenguaje de programacin como Basic, MikroC C y
pascal sin limitar al programador a el conocimiento de un solo
lenguaje.
Una de las maneras las que interactan es mediante
entradas y salidas perifricas, las cuales nos ayudaran a
utilizar diversos tipos de conexiones y accesorios externos
para la comunicacin con el sistema de desarrollo hacia la pc
o hacia el microcontrolador que se est utilizando.
En este manual de prcticas utilizaremos el PIC16F887 como
microcontrolador para los trabajos que se presentan. Los
motivos principales los cuales se eligi este microcontrolador
para ser utilizado de manera permanente fue por la facilidad
de adquirir este tipo de PIC ya que se pueden encontrar a un
precio accesible y son comunes dentro de la familia de
microcontroladores, cuenta con una capacidad de memoria
EEPROM de 256 bytes, 368 bytes de memoria RAM y 8k de
memoria ROM, lo cual nos ayuda a tener un amplio margen de
trabajo para almacenar grandes cantidades de datos. Sus
numerosas salidas lo hacen obtener una gran ventaja por
encima de los dems en comparacin a los que pertenecen a
la familia 16F existentes en el mercado.

4
Manual de prcticas con el sistema de desarrollo de
proyectos Easypic 6

OBJETIVO GENERAL.
Realizar un manual de prcticas con el sistema de desarrollo
easypic6 para uso de los estudiantes de la carrera de
ingeniera en electrnica y carreras afines cuyos planes de
estudio contemplen el estudio de los microcontroladores.

CARACTERISTICAS Y FUNCIONES ESECENCIALES.


Las caractersticas especiales de este manual de prcticas
son:

Las cualidades de este trabajo prctico estn orientadas


a proporcionar al estudiante un objeto de referencia
enfocado en los conceptos prcticos de la Experiencia
educativa de microprocesadores y microcontroladores.

El trabajo se caracteriza por ilustrar conceptos con


aplicacin directa a proyectos comunes y adems
propone una serie de retos prcticos que el estudiante
podr desarrollar en el laboratorio con su programador,
ya sea que cuente o no con el sistema de desarrollo
EasyPic6, el cual es una herramienta para propiciar el
rpido desarrollo de prototipos.

Algunas de sus ventajas son:

Presenta unos proyectos relevantes, dentro del contexto


eminentemente prctico, tanto para estudiantes como
para los profesores que imparten la Experiencia
Educativa de microprocesadores y microcontroladores.

5
Es una gua clara para los estudiantes que requieren
superar los retos prcticos de la Experiencia Educativa
de microprocesadores y microcontroladores.

JUSTIFICACIN.
Una problemtica del rea de los microcontroladores y
microprocesadores es la dificultad inherente a la construccin
de los prototipos, lo cual en la mayora de los casos consume
una cantidad de tiempo considerable y si a esto agregamos la
dificultad asociada a la depuracin de los circuitos, tenemos
que la mayora del trabajo se centra en esta rea en lugar de
centrarse en el concepto terico que se persigue, esto termina
por desvirtuar a la prctica misma.
Si eliminamos la dificultad de construir al prototipo, entonces
la mayor cantidad de tiempo se centra en la depuracin de la
programacin, lo que permite centrar a la prctica en los
conceptos relacionados a los microcontroladores en lugar de
los conceptos relativos a la electrnica.

ALCANCE DEL TRABAJO.


El alcance de este trabajo es presentar de una serie de
prcticas de uso comn que permitan al lector de este manual
poder aprender a utilizar el sistema de desarrollo de una
manera ms sencilla poniendo en prctica la habilidad para el
manejo del software de programacin MikroC con proyectos
bsicos para el uso de cada mdulo, con ello se pretende
obtener la experiencia y los conocimientos bsicos del
sistema que sirvan como punto de partida hacia aplicaciones
ms especficas por ejemplo se trabaja con diferentes tipos de
mdulos como:

Visualizador COG LCD.


Visualizador externo LCD 2x16.

6
Keypad 4x4.
Visualizador GLCD 128X64.
Botones de presin.
Panel de leds.
Convertidor de seales ADC.
Watchdog timer (WDT)

En este manual se presenta un conjunto de prcticas con los


mdulos mencionados anteriormente, por ejemplo el
convertidor ADC utilizado en conjunto con la pantalla LCD
2x16, Watchdog timer (WDT) reinicia al microcontrolador para
evitar que se quede en un estado indeterminado, el
visualizador grafico GLCD 128x64 en el cual se puede mostrar
imgenes monocromticas, panel de leds puede ser
manejado por medio de los botones de presin, visualizador
interno COG LCD se puede mostrar un mensaje de texto, el
keypad 4x4 es un teclado de 4x4 para la cerradura de un
puerta.

CONFIGURACIN DEL COMPILADOR


Antes de realizar el programa, debemos de realizar los
siguientes pasos previos para que el compilador nos
proporcione como resultado a un programa construido
especficamente para el PIC887.
Los pasos necesarios se detallan a continuacin.
Abrir el programa MikroC.
Configure en la pestaa de herramientas de proyecto el
tipo de pic que se utilizara, en nuestro caso, seleccionar
al PIC887 y la frecuencia que corresponde al cristal del
microcontrolador, que en nuestro caso es de 8MHz.
En la figura 1-1 se muestra la configuracin necesaria
para el desarrollo de las practicas.

7
Seleccin de
microcontrolador.

Frecuencia del
microcontrolador utilizado en
la prctica.

Proceso de
Tipo de depurador utilizado
depuracin.
para puntualizar y eliminar
errores.

Figura 1-1. Ventana de Configuracin al


Microcontrolador.

Project Settings es una herramienta que ayuda a configurar el


tipo de microcontrolador seleccionando sus frecuencias
tambin cuenta con una seccin que es Build Type
(compilador) es un proceso de traduccin por ejemplo el
proyecto est desarrollado en un programa informtico esto
pasa a ser un lenguaje de programacin con la finalidad de
que la maquina sea capaz de interpretar los cdigos del

8
programa y Debugger (depurador)es un programa que se
encarga de depurar y eliminar errores de otros programas.

En la siguiente figura 1-2 observara la seleccin del


compilador (Release) es la caracterstica del producto final, el
programa informtico pasa a ser un lenguaje de
programacin pasa por una compilacin del pic generando, un
fichero en hexadecimal, se encarga de cargar datos al
microcontrolador.

Caracterstica del Compilador


producto final. ICD.

Es una Depurador de
herramienta hardware en un
que permite circuito para una
identificar y depuracin pas a
corregir errores paso a nivel del
de hardware.
Figura 1-2 Sistema de compilador y depurador

9
Prctica
Salida de seales simples.
1
PRESENTACION
Una de las operaciones bsicas de los microcontroladores es
controlar diversos procesos, para lograrlo, es necesaria la
comunicacin al exterior, es decir, enviar seales a los
subsistemas conectados al microcontrolador, por ejemplo,
enviar una seal de activacin para hacer funcionar una
bomba de agua.
Para ilustrar la manera en que se pueden hacer este tipo de
tareas, se presenta una prctica que consiste en el encendido
y apagado de un LED. El mismo concepto se puede utilizar
para controlar seales de activacin a distintos dispositivo
perifricos al microcontrolador.
A continuacin, presentamos los detalles de la prctica.

OBJETIVO DE LA PRCTICA
Disear e implementar un software embebido que permita al
microcontrolador enviar seales de encendido o de apagado
de un LED.

10
DESTREZAS Y HABILIDADES ADQUIRIDAS
Con esta prctica, el alumno adquiere habilidades y destrezas
en:
El manejo de los puertos de salida.
La programacin de microcontroladores en lenguaje C.
El uso del sistema de desarrollo EASYPIC6.

MATERIAL:
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad

PIC16f887 1

software MikroC Pro for PIC 1

Tarjeta de desarrollo 1
EASYPIC6

MARCO TERICO
MikroC permite la lectura y escritura de bits desde y hacia los
puertos, en nuestro caso, nos interesa la funcionalidad de
escribir bits a un puerto, en el caso particular de esta prctica,
ser el puerto B el que servir para tal fin, el proceso se
vuelve tan simple como asignar un valor a una direccin de
memoria, siendo en este caso la variable reservada PORTB, la

11
cual se encuentra direccionada al puerto B de manera que
para escribir un valor determinado en el puerto B, basta con
asignar el valor que deseamos escribir en la variable PORTB
igual al valor que deseamos escribir.

El programa a realizar contiene los pasos detallados en el


algoritmo 1.

Algoritmo 1

Configurar a los puertos PORT B Y PORTC como salidas.


Configurar a los puertos analgicos como E/S digital.
Hacer PORTB=0 (sacar un cero al puerto, Esto apaga a
los leds)
Si la condicin es verdadera se realiza la siguiente
operacin
Hacer PORTB=~PORTB (PORTB negado), esto hace que si
se encontraban apagados a los leds, ahora se
enciendan con un pequeo retardo de 15 segundos.

12
DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

13
14
Cdigo fuente 1: Encendido y apagado de un grupo de leds.

void main() {

PORTB=0; //Inicializa el puerto B

PORTC=0; //Inicializa el puerto C

TRISB=0x00; //configura el puerto B como salida


TRISC=0x00; //configura el puerto C como salida
ANSELH=0; //configura el puerto AN como E/S digital
ANSEL=0; //configura los dems puertos AN como E/S
digital
while(1){
PORTB=~PORTB; //conmuta el puerto B
PORTC=~PORTC; //conmuta el puerto C
delay_ms(1000); //Retardo de 1 segundo
}

Configuracin:
Encendido y Apagado de led's utilizando el pic16f887
Habilitar los puertos B y C (SW9.2 y SW9.3)

PREPARACION DEL SISTEMA EASYPIC


Para esta prctica el dip switch sw9.2 y sw9.3 debern
ser activados para el correcto funcionamiento de la
prctica, tal y como se muestra en la figura 1 que se
muestra a continuacin.

15
Figura 1.- Activacin de puertos B y C (SW9.2 y SW9.3)

Figura 1.1.- Ejemplo de la prctica de encendido y


apagado de leds.

EJERCICIO PROPUESTO
Realiza un ejercicio cambiando las instrucciones en base al
ejemplo anterior donde se activen las salidas de los puertos
A,B,C,D del microcontrolador desplegando un mensaje de
Hola =) en el panel de leds.

16
Configuracin:
Encender el puerto A, B, C, y D respectivamente (SW9.1,
sw9.2, sw9.3, sw9.4)

Figura 1.2.- Activacin de puertos A, B, C y D (SW9.1,


SW9.2, SW9.3 y SW9.4)

Anlisis a realizar para poder crear las letras


desplegadas en el panel de leds.
En el momento que se desea crear un mensaje el cual se va a
visualizar en el panel de leds primero se tiene que hacer una
tabla de 8x4 para poder comprender de una manera ms
sencilla la visualizacin del mensaje en el panel de leds, el
cual lleva una serie de ajustes para poder realizar cada letra
de la palabra.

17
El panel de leds se encuentra dividido en dos secciones, para
poder visualizar la letra H en el panel se deber contar el
nmero de bits que se va a ingresar dentro del puerto A,B,C y
D como se muestra en la siguiente figura 1.3.
8 4 2 1 8 4 2 1
0 0 0 1 1 1 1 1 A
0 0 0 0 0 1 0 0 B
0 0 0 0 0 1 0 0 C
0 0 0 1 1 1 1 1 D

Figura 1.3.- Imagen representativa del tablero de leds.

Por ejemplo en este caso el valor que deber llevar el puerto


A en hexadecimal como se observa en la figura 1.3 ser un 1
en hexadecimal del lado izquierdo de la tabla y un 15 en
hexadecimal del lado derecho de la tabla, lo cual se
representara como 0x1F, as como el valor asignado al puerto
B ser 0x04 y as sucesivamente se deber seguir con los
siguientes puertos de salida (C, D) hasta lograr la letra que se
desea visualizar en el panel de leds.

18
Demostracin de la figura 1.3 configurado en Easy pic6

Figura 1.4.- Ejemplo de mensaje en panel de leds.

19
DIAGRAMA DE FLUJO: Mensaje utilizado el panel de
leds.

20
21
Cdigo fuente 2: Mensaje utilizado en el panel de leds.

void main() {
ansel= 0 ; // configura el pin AN como digital
anselh= 0;
c1on_bit= 0; //Inhabilitar comparadores
c2on_bit= 0;
TRISA = 0x00; // Establece direccin como salida
TRISB = 0x00; // Establece direccin como salida
TRISC = 0x00; // Establece direccin como salida

TRISD = 0x00; // Establece direccin como salida


do {
PORTA = 0x1F; // Apague los LED de PORTA
PORTB = 0x04; // Apague los LED de PORTB
PORTC = 0x04; // Apague los LED de PORTC
PORTD = 0x1F; // Apague los LED de PORTD
Delay_ms(1000); // Retardo de 1 segundo
PORTA = 0x1F; // Encienda el LED en PORTA
PORTB = 0x11; // Encienda el LED en PORTB
PORTC = 0x11; // Encienda el LED en PORTC
PORTD = 0x1F; // Encienda el LED en PORTD
Delay_ms(1000); // Retardo de 1 segundo
PORTA = 0x1F; // Apague los LED de PORTA
PORTB = 0x10; // Apague los LED de PORTB
PORTC = 0x10; // Apague los LED de PORTC
PORTD = 0x10; // Apague los LED de PORTD
Delay_ms(1000); // Retardo de 1 segundo
PORTA = 0x1F; // Encienda el LED en PORTA
PORTB = 0x05; // Encienda el LED en PORTA
PORTC = 0x05; // Encienda el LED en PORTC

22
PORTD = 0x1F; // Encienda el LED en PORTD
Delay_ms(1000); // Retardo de 1 segundo
PORTA = 0x20; // Encienda el LED en PORTA
PORTB = 0x4e; // Encienda el LED en PORTB
PORTC = 0x4e; // Encienda el LED en PORTC
PORTD = 0x20; // Encienda el LED en PORTD
Delay_ms(1000); // Retardo de 1 segundo
} while(1); // Bucle sin fin
}

Prctica
Entradas digitales con Botones de
presin.
2
23
PRESENTACION
El propsito de esta prctica es controlar entradas y salidas
para lo cual es necesario contar con un subsistema el cual
deber de efectuar las instrucciones que desee para el
dispositivo. Unos de los principales ejemplos de una botonera
de presin (entradas digitales) se encuentran en diversas
formas y tamaos principalmente en aparatos electrnicos y
elctricos los podemos observar en un control remoto o en un
teclado. Para demostrar la manera en que se puede realizar
este tipo de acciones se presenta esta prctica la cual
consiste en el funcionamiento del encendido de leds por
medio del panel de botones. Este tipo de concepto se puede
utilizar para el encendido de dispositivos y puertos hacia el
microcontrolador.

En esta prctica se le facilitara trabajar con los pulsadores


controlando los estados lgicos (0,1).
A continuacin, presentamos las generalidades de la prctica.

OBJETIVO DE LA PRCTICA
Realizar un programa que permita al microcontrolador enviar
seales de encendido y apagado de un led con solo pulsar un
botn.

DESTREZAS Y HABILIDADES ADQUIRIDAS


Con esta prctica, el alumno adquiere habilidades y destreza
en:
Lectura de los puertos de entrada.
Procesamiento de los datos leidos.

24
Configuraciones de instrucciones y uso de los botones de
presin

MATERIAL
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC c Pro for PIC 1
Tarjeta de desarrollo EASYPIC6 1

MARCO TERICO
MikroC permite la lectura y escritura de bits desde y hacia los
puertos, en nuestro caso, nos interesa la funcionalidad de
escribir bits a un puerto, en el caso particular de esta prctica,
sern todos los puertos que se ocupan dentro de EASY PIC6
que servir para tal fin, el proceso se vuelve tan simple como
asignar un valor a una variable, siendo en este caso la
variable reservada de PORTA y PORTB , las cual se encuentra
direccionadas a los puertos de manera que para escribir un
valor determinado, basta con hacer la variable PORTA y PORTB
igual a la seal que se desee realizar.
A continuacin, presentamos el programa ejemplo para
ilustrar al concepto anterior.

Algoritmo 2

Configurar a los puertos como salidas.


Configurar a los puertos analgicos como E/S digitales.

25
Hacer TRISB0= 1 (Activa RB0 como entrada del pulsador)
Mientras sea verdadero el ultimo estado (1)
Hacer PORTB=~PORTB y PORTC=~PORTC, esto hace que
si se encontraban encendidos los leds, ahora se apaguen
con tan solo mandar un pulso en RB0.

DIAGRAMA DE FLUJO

El proceso a realizar se puede resumir a travs del siguiente


diagrama de flujo.

26
Cdigo fuente 1: Entradas digitales con botones de presin

bit oldstate; // bandera de estado


anterior
void main() {

27
ANSEL = 0; //configura los pines AN
como E/S digital
ANSELH = 0;
C1ON_bit = 0; // inhabilita los
comparadores
C2ON_bit = 0;
TRISB0_bit = 1; // Establece el pin RB0 como
entrada
TRISD = 0X00;
TRISC = 0x00; // Configura el PORTC como
salida
PORTD = 0X55;
PORTC = 0xAA; // Valor inicial del puerto
C
oldstate = 0;
do {
if (Button(&PORTB, 0, 1, 1)) // Detectar el uno logico
oldstate = 1; // Actualiza bandera
}
if (oldstate && Button(&PORTB, 0, // Detectar transicin uno a
1, 0)) { cero
PORTC = ~PORTC; // Invierte el PORTC
PORTD = ~PORTD; // Actualiza bandera
}
} whi // Bucle sin fin

Configuracin:
Encienda el dip switch del puerto C y D del panel de
leds (sw9.3, sw9.4).
Ponga el botn de puente (J17) en la posicin VCC y
apague el Puerto B (SW9.2).

28
Figura 2.- Configuracin de puerto B, C, D (SW9.2,
SW9.3, SW9.4)

PREPARACION DEL SISTEMA EASYPIC6


En esta prctica el puente J17 se utiliza para determinar el
estado lgico que ser aplicado al pin del microcontrolador
al presionar el botn correcto. Cuenta con un una
resistencia de 10k cuyo propsito del resistor es de limitar la
mxima corriente lo que impide la ocurrencia de un corto

29
circuito. Los usuarios con ms experiencia pueden, si es
necesario, cortocircuitar este resistor utilizando el puente
J24.

Figura 2.1.- Ejemplo de Entradas digitales con botones


de presin.

EJERCICIO PROPUESTO
Observe a detalle el ejemplo observando los diagramas de
flujo que le ayudara a realizar correctamente el programa.

30
Realice la modificacin del programa enciendo y apagando
tres columnas de leds por medio de botones de presin
(entradas digitales) siguiendo los pasos del ejemplo usted
deber cambiar los puerto de entrada del pulsador RB a RA
para hacer conmutar las tres columnas de leds.

Figura 2.2.- Ejemplo de conmutacin por medio de un


pulsador.

DIAGRAMA DE FLUJO: Conmutacin por medio del


pulsador

31
Cdigo fuente 2: Conmutacin por medio del pulsador

32
bit oldstate; // Bandera de estado antiguo
void main() {
ANSEL = 0; // Configura los pines AN como E/S
digital
ANSELH = 0;
C1ON_bit = 0; // Inhabilita los comparadores
C2ON_bit = 0;
TRISA0_bit = 1; // Establece el pin RB0 como entrada
TRISB = 0X00;
TRISC = 0x00; // Configura PORTC como salida
TRISD = 0X00; // configura PORTD como salida
PORTC = 0xFF; // Valor inicial en PORTC
PORTD = 0XFF; // Valor Inicial en PORTD
PORTB = 0XFF; // Valor Inicial en PORTB
oldstate = 0;
do {
if (Button(&PORTA, 0, 1, // Detectar uno lgico
1)) {
oldstate = 1; // Actualizar bandera
}
if (Button(&PORTa, 0, 1, // Detectar uno lgico
1)) {
oldstate = 1; // Actualizar bandera
if (Button(&PORTa, 0, 1, // Detectar uno lgico
0)) {
oldstate = 0; // Actualizar Bandera
}
if (oldstate && // Detectar transicin uno-a-cero
Button(&PORTA, 1, 1, 0)) {
PORTC = ~PORTC; // Invierte PORTC
oldstate = 1;
}

33
if (oldstate && button
(&porta, 0, 1, 0)) {
PORTD = ~PORTD; // invierte PORTD
oldstate = 0;
}
if (oldstate && button
(&porta, 0, 1, 1)) {
PORTB = ~PORTB;
oldstate = 1; // Actualizar Bandera
}
} while(1); // Bucle sin fin
}

Configuracin:
Encender el interruptor PORTB, PORTC y PORTD del
panel de led's.
Poner el jumper J17 en posicin de VCC.

34
Figura 2.2.- Configuracin de puerto B, C, D (SW9.2,
SW9.3, SW9.4)

Compile el programa y grbelo en el PIC, vea los resultados


en el panel de leds
En este programa aprender a manejar los puertos de
entrada del PIC 16F887

35
Prctica
LCD 2X16 VISUALIZADOR EXTERNO. 3
PRESENTACION

Antes de que aparecieran las pantalla LCD, se trabajaba con


displays de siete segmentos para mostrar la informacin
estos displays tienen una gran desventaja; consuman una
gran cantidad de corriente y espacio fsico, tambin tienen la
limitacin a la de no poder mostrar los caracteres y nmeros
especiales es por eso que las pantallas LCD de cristal lquido
han tenido un xito en el mercado ya que cuentan con un
gran nmero de caracteres alfanumricos y cuentan con
retroiluminacin.
Una de las ventajas de la pantalla LCD es que cuenta con
retroiluminacin para poder visualizar datos o texto, incluso
en condiciones de poca iluminacin lo que comnmente no se
podra con un visualizador integrado en chip como por
ejemplo un COG, otra virtud es su comunicacin entre el LCD
y el microcontrolador que se establece utilizando el modo de 4
bits y gran capacidad para desplegar dgitos alfanumricos
que se pueden visualizar en dos lneas de la cual cada una
contiene 16 caracteres de 7x5 pixeles la cual se podr
controlar de manera programable dentro del software MikroC.
Este tipo de pantalla se puede ser aplicada en la informtica,
comunicaciones, telefona, equipos industriales, medicina etc.

36
A continuacin, presentamos las generalidades de la prctica
en la que se hace el uso del LCD 2x16 visualizador externo

OBJETIVO DE LA PRCTICA
En esta prctica se realiza un ejemplo el cual consiste en
visualizar un mensaje de bienvenida para el programador con
el uso del visualizador LCD 2x16 mandando la instruccin por
medio del microcontrolador hacia el puerto B para su debida
comunicacin con la pantalla externa LCD 2x16.

DESTREZAS Y HABILIDADES ADQUIRIDAS


Con esta prctica, el alumno adquiere habilidades y destrezas
en:
El manejo y uso del display LCD 2x16
La programacin del microcontrolador para el uso del
display LCD 2x16 en lenguaje C.
Funciones especiales de texto y movimiento en el display
LCD
El uso de sistemas externos al EASYPIC6

MATERIAL
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC c Pro for PIC 1
Tarjeta de desarrollo EASYPIC6 1
Visualizador LCD 2x16 1

37
MARCO TERICO
El uso del LCD es una de la principales razones las cuales se
hace esta prctica, en este display se utilizara completamente
cada una de las dos filas con diecisis caracteres cada una, la
cual cuenta con una resolucin de 7x5 pixeles. La
comunicacin de microcontrolador con el LCD se establece
mandando una tasa de 4 bits, en nuestro caso nos interesa la
funcionalidad del LCD y el desplegar texto dentro del
visualizador LCD con la que mandaremos ciertos comandos de
insertar texto como; lcd-out (f, c, texto) Lcd_cmd que sirve
para limpiar el texto en LCD entre otras funciones que nos
permitirn la manipulacin del LCD. Estos son conceptos
bsicos y esenciales para debido uso dentro del sistema de
desarrollo Easypic6.
A continuacin, presentamos el programa ejemplo para
ilustrar al concepto anterior.

El programa a realizar contiene los pasos detallados en el


algoritmo.

Algoritmo 3
Configurar a los puertos de salida del Display LCD 2x16.
Configurar a los puertos analgicos como E/S digital.
Configurar los bits de comunicacin con el LCD.
Escribir texto en el LCD.
Recorrer el texto de Izquierda a derecha.

38
DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

39
Cdigo fuente 3: Visualizador externo pantalla LCD2x16

Conexiones del mdulo LCD

40
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at
TRISB4_bit;
sbit LCD_EN_Direction at
TRISB5_bit;
sbit LCD_D4_Direction at
TRISB0_bit;
sbit LCD_D5_Direction at
TRISB1_bit;
sbit LCD_D6_Direction at
TRISB2_bit;
sbit LCD_D7_Direction at // Fin de conexiones del mdulo LCD
TRISB3_bit;
char txt1[] = "EJEMPLO";

char txt2[] = "LCD 2X16";


char txt3[] =
"Bienvenido";
char txt4[] =
"Programador";
char i; // Variable de bucle
void Move_Delay() { // Funcin usada para mover el texto
Delay_ms(500); // Tu puedes cambiar la velocidad de
movimiento aqu
}
void main(){
ANSEL= 0; // Configura los pines AN como E/S
digitales
C2ON_bit = 0;
Lcd_Init(); // Inicializa LCD
Lcd_Cmd(_LCD_CLEAR); // Limpia Display

41
Lcd_Cmd(_LCD_CURSOR_OFF); // Apaga Cursor
Lcd_Out(1,3,txt3); // Escribe texto en la primera fila
Lcd_Out(2,3,txt4); // Escribe texto en la segunda fila
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Limpia Display
Lcd_Out(1,4,txt1); // Escribe texto en la primera fila
Lcd_Out(2,4,txt2); // Escribe texto en la segunda fila
Delay_ms(2000);
// Moving text
for(i=0; i<7; i++) { // Mueve el texto a la derecha 7
veces
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
while(1) { // Bucle sin fin
for(i=0; i<10; i++) { // Mueve el texto a la izquierda 10
veces
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}
for(i=0; i<10; i++) { // Mueve el texto a la derecha 10
veces
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();

Configuracin:
Encienda el interruptor de la luz de fondo del LCD
(SW6.8) en la placa
de desarrollo.

42
Figura 3.1- Configuracin del switch para activar el uso
de retroiluminacin en el Display LCD 2x16 (SW6.8)

Figura 3.2.- Ejemplo de visualizador externo 2x16

PREPARACION DEL SISTEMA EASYPIC


En este proyecto usted debe colocar adecuadamente los
puentes (J17) en la configuracin VCC-MCU para que sea
alimentado de la manera correcta y que la resistencia de

43
proteccin de 10k se active al encender el sistema de
desarrollo para proteger el equipo de cualquier tipo de corto
circuito que se pueda presentar en la prctica. Podr observar
que se encuentra un potencimetro en la parte inferior del
Display LCD (P4) de 10k con la cual podr modificar el
contraste del visualizador LCD de manera que sea legible el
visualizar el texto que se introduzca al display LCD.
Se observara como se despliega el mensaje de texto
Bienvenido programador seguido del mensaje en
movimiento Ejemplo LCD 2x16 y observara los resultados.

EJERCICIO PROPUESTO
En esta prctica se debe realizar un programa desplegando un
mensaje de texto Universidad Veracruzana en el
visualizador seguido de escribir letra por letra las siglas de la
facultad de ingeniera electrnica y comunicaciones (FIEC) en
la primera fila y las siglas de la universidad veracruzana (UV)
en la segunda fila, seguido de un movimiento de texto de
derecha a izquierda.

44
DIAGRAMA DE FLUJO: Pantalla 2x16 indicador de
mensaje en movimiento

45
Cdigo fuente 2: Pantalla 2x16 indicador de mensaje en
movimiento

Modulo de conexiones LCD


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbitLCD_RS_Directionat
TRISB4_bit;
sbitLCD_EN_Directionat
TRISB5_bit;
sbitLCD_D4_Directionat
TRISB0_bit;
sbitLCD_D5_Directionat
TRISB1_bit;
sbitLCD_D6_Directionat
TRISB2_bit;
sbitLCD_D7_Directionat
TRISB3_bit;
char txt1[] = "F";
char txt2[] = "I";
char txt3[] = "E";
char txt4[] = "C";
char txt5[] = "U";
char txt6[] = "V";
char txt12[] = "Universidad";
char txt13[] = "Veracruzana";
char i ;

46
void Move_Delay() { // Funcin usada para el
movimiento de texto
Delay_ms(500); //Tu puedes cambiar la velocidad
de movimiento aqu
}
void main() {
ANSEL = 0; // Configura los pines AN como E/S
digitales
ANSELH = 0;
PORTB=0;
TRISB = 0; //Salida del PORTB
Lcd_Init(); //Inicializa LCD en PORTB
LCD_Cmd(_LCD_CLEAR); // Limpia el display
lcd_cmd(_lcd_return_home);
lcd_cmd(_LCD_MOVE_CURSOR_RIGHT);
Lcd_Cmd(_Lcd_BLINK_cursor_ON); //Apaga el cursor
delay_ms(1000);
lcd_out(1,1,txt12);
delay_ms(1000);
lcd_out(2,1,txt13);
delay_ms(1000);
lcd_cmd(_LCD_clear);
Lcd_Out(1,6,txt1);
delay_ms(1000);
lcd_out(1,7,txt2);
delay_ms(1000);
Lcd_Out(1,8,txt3);
delay_ms(1000);
lcd_out(1,9,txt4);
delay_ms(1000);
Lcd_Out(2,10,txt5);
delay_ms(1000);

47
lcd_out(2,11,txt6);
delay_ms(1000);
lcd_cmd(_LCD_CURSOR_OFF);
for(i=0; i<5; i++) { //Mueve el texto a la derecha 4
veces
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}
while(1) { // Bucle sin fin
for(i=0; i<10; i++) { //Mueve el texto a la izquierda 4
veces
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
for(i=0; i<10; i++) { //Mueve el texto a la derecha 7
veces
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();

Configuracin:
Encienda el interruptor de la luz de fondo del LCD
(SW6.8) en la placa de desarrollo (figura 3.1).
Ajustar los DIP SWITCH SW6.
Ajustar el potencimetro (P4) para modificar el contraste
de manera que se distinga adecuadamente el texto
desplegado.

48
Figura 3.2.- Configuracin del switch para activar el
uso de retroiluminacin en el Display LCD 2x16 (SW6.8)

Figura 3.3.- Ejemplo Propuesto de siglas en


movimiento.

Compile al programa y grbelo en el PIC 16F887, vea los


resultados en la pantalla LCD vera un claro ejemplo de lo que
podr realizar.

49
Prctica
COG LCD 2X16 VISUALIZADOR
INTEGRADO.
4
PRESENTACION

En un mdulo convencional, el controlador de LCD est


montado en una PCB en la parte trasera del mdulo. Esto es
ms del doble del espesor total de la pantalla y debido a que
las pantallas LCD generalmente requieren muchas entradas
de accionamiento, la calidad de estos es un factor crtico en l
desarrollo de prototipos. En comparacin, los mdulos del
COG (Chip on Glass) tiene el controlador de LCD montada
directamente en un borde de superposicin de unas de las
placas de vidrio que componen la pantalla LCD. El modulo
resultante es una pantalla integrada, de menos de 3mm de
espesor, con todas las conexiones del controlador del LCD a la
pantalla completamente aislado del medio ambiente. Con los
mdulos del COG cada conexin requiere solo un enlace, lo
que le da versatilidad al mdulo. Este mdulo est conectado
con el microcontrolador el cual podrs manipular promedio de
extensor de puertos. A comparacin de la pantalla LCD de
cristal la pantalla LCD (COG) no dispone de luz de fondo.

50
A continuacin, presentamos los objetivos de la prctica.

OBJETIVO DE LA PRCTICA
En esta prctica se visualiza un mensaje de saludo utilizando
el COG LCD en nuestro caso nos interesa familiarizarnos con
las instrucciones necesarias que direccionan y activan el
visualizador COG LCD y en un futuro poder utilizar este tipo de
comandos para dar lugar a un proyecto con fines relacionados
con el mdulo COG LCD.

DESTREZAS Y HABILIDADES ADQUIRIDAS


Con esta prctica, el alumno adquiere habilidades y destrezas
en:
Manejo del mdulo visualizador COG LCD
Uso de instrucciones para la comunicacin
microcontrolador COG LCD

MATERIAL
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC c Pro for PIC 1
Tarjeta de desarrollo 1
EASYPIC6
COG LCD 2x16 visualizador 1
integrado

51
MARCO TERICO
Una de las ventajas es que La tecnologa COG es una
metodologa de diseo alternativo en el que el conductor
del LCD se monta directamente sobre, el tamao de
cristal. El efecto global es una reduccin en el costo del
sistema. A diferencia del visualizador LCD, el
visualizador incorporado no dispone de la luz de fondo y
recibe los datos por medio del expansor de puertos que
utiliza la comunicacin SPI (interfaz serial perifrica),
esta interfaz es un estndar de comunicaciones que es
utilizada para la transmisin de informacin entre
dispositivos electrnicos, Con esto se establece la
comunicacin entre el microcontrolador y el display COG
LCD. Este visualizador tambin visualiza los dgitos en
dos lneas de las que cada una contiene hasta 16
caracteres de 7x5 pxeles y cuenta con un
potencimetro P5 para ajustar y establecer el contraste
para visualizar de manera correcta el mensaje a
desplegar.

El programa a realizar contiene los pasos detallados en el


algoritmo.

Algoritmo 4

Configurar los puertos expansores y direccionarlos a


trisA_2 y trisA_3
Configurar a los puertos de salida como E/S digitales.
Inicializar la interfaz sobre el mdulo SPI
Imprimir texto Hola Bienvenido en la pantalla COG LCD
52
DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo

53
Cdigo fuente 4: Hola Bienvenido

char *text = "Bienvenido"; // Conexiones del mdulo de ampliacin


de puertos
sbit SPExpanderCS at
RA2_bit;
sbit SPExpanderRST at
RA3_bit;

54
sbit SPExpanderCS_Direction
at TRISA2_bit;
sbit SPExpanderRST_Direction // Terminar conexiones del mdulo de
at TRISA3_bit; ampliacin de puertos
void main() {
ANSEL = 0; // Configura los pins AN como digitales
ANSELH = 0;
C1ON_bit = 0; // Inhabilita comparadores
C2ON_bit = 0; //Si expansin del puerto de la
Biblioteca utiliza el mdulo SPI1
SPI1_Init(); // Inicializar el mdulo SPI utilizado
con expansin del puerto
SPI_Lcd_Config(0); // Inicializar Lcd sobre la interfaz SPI
SPI_Lcd_Cmd(_LCD_CLEAR); // Borrar pantalla
SPI_Lcd_Cmd(_LCD_CURSOR_OFF); // Desactivar cursor
SPI_Lcd_Out(1,6, "Hola"); // Imprimir texto de Lcd, primera fila,
sexta columna
SPI_Lcd_Chr_CP('!');
SPI_Lcd_Out(2,4, text); // Imprimir texto de Lcd, segunda fila,
primera columna

Configuracin:
Encienda el switch de los puertos expansores (SW6.1,
SW6.2, SW6.3, SW6.4 and SW6.5) como se muestra en la
figura 4.
Encienda el switch del COG LCD 2x16 (SW10.1, SW10.2,
SW10.3, SW10.4, SW10.5, SW10.6, SW10.7 y SW10.8)
como se muestra en la figura 4.1.

55
Figura 4.- Configuracin puertos SPI (SW6.1, SW6.2,
SW6.3, SW6.4, SW6.5).

Figura 4.1.- Configuracin puertos COG (SW10.1,


SW10.2, SW10.3, SW10.4, SW10.5, SW10.6, SW10.7,
SW10.8).
56
Figura 4.2.- Ejemplo mensaje de saludo COG LCD 2x16.

EJERCICIO PORPUESTO COG LCD 2x16


En esta prctica se deber realizar un mensaje que se
despliegue en el visualizador COG LCD con un mensaje de
Ing. Electrnica activando los cursores y escribiendo letra
por letra con un retardo de 1 segundo por letra completando
la palabra seguido de realizar el movimiento de todo el texto
mostrado en pantalla de izquierda a derecha.

DIAGRAMA PROPUESTO DISPLAY COG LCD 2x16

57
Cdigo fuente 4: Pantalla COG 2x16 indicador de mensaje en
movimiento
// Conexiones del mdulo de ampliacin de puertos
sbit SPExpanderCS at RA2_bit;
sbit SPExpanderRST at RA3_bit;
sbit SPExpanderCS_Direction at TRISA2_bit;
sbit SPExpanderRST_Direction at TRISA3_bit;
// Terminar conexiones del mdulo de ampliacin de puertos

char txt1[] = "I";

58
char txt2[] = "N";
char txt3[] = "G";
char txt4[] = ".";
char txt5[] = "E";
char txt6[] = "l";
char txt7[] = "e";
char txt8[] = "c";
char txt9[] = "t";
char txt10[] = "r";
char txt11[] = "o";
char txt12[] = "n";
char txt13[] = "i";
char txt14[] = "c";
char txt15[] = "a";

char i; // Variable de bucle

void Move_Delay() { // Funcin utilizada


para el texto en movimiento
Delay_ms(500); // Puede cambiar la
velocidad de movimiento aqu
}

void main() {

ANSEL = 0; // Configura los pins AN como digitales


ANSELH = 0;
C1ON_bit = 0; // Inhabilitar comparadores
C2ON_bit = 0;

// Expansin del puerto de la Biblioteca utiliza el mdulo SPI1

59
SPI1_Init(); // Inicializar mdulo de SPI se utiliza con
PortExpander

SPI_Lcd_Config(0); //Inicializar Lcd sobre la interfaz SPI


SPI_LCD_Cmd(_LCD_CLEAR); // Borrar pantalla
SPI_lcd_cmd(_lcd_return_home);
SPI_lcd_cmd(_LCD_MOVE_CURSOR_RIGHT);
SPI_Lcd_Cmd(_Lcd_BLINK_cursor_ON); // Apagar cursor
delay_ms(1000);

SPI_Lcd_Out(1,6,txt1);
delay_ms(1000);
SPI_lcd_out(1,7,txt2);
delay_ms(1000);
SPI_Lcd_Out(1,8,txt3);
delay_ms(1000);
SPI_lcd_out(1,9,txt4);
delay_ms(1000);
SPI_Lcd_Out(2,3,txt5);
delay_ms(1000);
SPI_lcd_out(2,4,txt6);
delay_ms(1000);
SPI_Lcd_Out(2,5,txt7);
delay_ms(1000);
SPI_lcd_out(2,6,txt8);
delay_ms(1000);
SPI_Lcd_Out(2,7,txt9);
delay_ms(1000);
SPI_lcd_out(2,8,txt10);
delay_ms(1000);
SPI_Lcd_Out(2,9,txt11);

60
delay_ms(1000);
SPI_Lcd_Out(2,10,txt12);
delay_ms(1000);
SPI_Lcd_Out(2,11,txt13);
delay_ms(1000);
SPI_Lcd_Out(2,12,txt14);
delay_ms(1000);
SPI_Lcd_Out(2,13,txt15);
delay_ms(1000);
SPI_lcd_cmd(_LCD_CURSOR_OFF);
for(i=0; i<2; i++) { // Mover texto a la derecha 4 veces
SPI_Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

while(1) { // Bucle sin fin


for(i=0; i<5; i++) { // Mover texto a la izquierda 7
veces
SPI_Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

for(i=0; i<5; i++) { // Mover texto a la derecha 7


veces
SPI_Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}

}
}

Configuracin:

61
Encienda el switch de los puertos expansores (SW6.1, SW6.2,
SW6.3, SW6.4 and SW6.5.)
Encienda el switch del COG LCD 2x16 (SW10.1, SW10.2,
SW10.3, SW10.4, SW10.5, SW10.6, SW10.7 and SW10.8. como
se muestra en la figura 4.3)
En este proyecto te ayudara a realizar y a conocer las
funciones de libreras SPI del COG 2X16 serial LCD. Conectar
los puertos de salida a la pantalla LCD.

Figura 4.3.- Configuracin puertos COG (SW10.1,


SW10.2, SW10.3, SW10.4, SW10.5, SW10.6, SW10.7,
SW10.8).

Prctica
CONVERTIDOR DE SEALES. 5
PRESENTACION

62
Un Convertidor de seales ADC es aquel se encarga de
convertir una seal analgica en una seal digital con cierto
valor apropiado, tal y como se muestra en la figura 5. Una
seal analgica puede tomar cualquier valor real mientras que
una seal digital solo puede tomar valores discretos de un
conjunto predeterminado. Es por eso que se utiliza la seal
digital para procesamiento digital y compresin como por
ejemplo los MP3 y JPG o medir presiones y temperatura entre
otros, unas de las ventajas de la conversin es la oportunidad
deteccin y correccin de errores en la seal. Estos
convertidores se pueden encontrar en equipos electrnicos
como computadoras, grabadores de sonido y en los equipos
de telecomunicaciones.

X (t) X(n) Xq( X[n


n) ]
MUESTREAD CUANTIFICA CODIFICAD
OR DOR
Y
Y

X
X

Figura 5.- Ejemplo de conversin de seal Analgico


Digital.
OBJETIVO DE LA PRCTICA
En esta prctica ser realiza la conversin analgico digital
usando el panel de leds para visualizar a la seal digitalizada.
En funcin al voltaje suministrado al sistema puede verse
como gradualmente se encienden los leds a medida que se
modifica el voltaje de entrada.

DESTREZAS Y HABILIDADES ADQUIRIDAS

63
Con esta prctica, el alumno adquiere habilidades y destrezas
en:
Manejo del mdulo ADC (Convertidor Analgico Digital)
programacin de microcontrolador para el uso y
comunicacin con el convertidor AD.
Uso y configuracin de switch y potencimetros
Manejo de jumpers de proteccin

MATERIAL:
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC c Pro for PIC 1
Tarjeta de desarrollo 1
EASYPIC6

MARCO TERICO
El convertidor ADC (Convertidor Analgico Digital) es un
mdulo integrado en el sistema de desarrollo easypic6 capaz
de convertir una seal analgica de voltaje en una seal
digital. El conversor A/D dentro del microcontrolador
convierte un valor de voltaje analgico a un nmero de 10
bits. Los voltajes que varan de 0 a 5V DC se pueden
suministrar por las entradas del conversor Analgico
Digital. Se puede cambiar la entrada de comunicacin con el

64
microcontrolador con solo cambiar un puente (J15) el cual se
utiliza para seleccionar uno de los siguientes pines para la
conversin AD: RA0, RA1, RA2, RA3 o RA4. El resistor R63
tiene la funcin de proteccin y tiene como funcin limitar el
flujo de corriente por el potencimetro o por el pin del
microcontrolador. El valor del voltaje analgico de entrada
se puede cambiar linealmente utilizando el potencimetro
P1.
El programa a realizar contiene los pasos detallados en el
algoritmo 5 siguiente.
Algoritmo 5

Configuracin de jumper J15 en RA2.


Configuracin de puertos de entrada A, B, C, D.
Obtener 10 bits de la conversin de A/D.
Enva 8 bits inferiores al puerto D.
Enva 2 bits ms significativos a RC1, RC0.

DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

65
Cdigo fuente 5: Convertidor de seales

unsigned int

66
temp_res;
void main() {
ANSEL = 0x04; // Configura el pin AN2 como anlogo
ANSELH = 0; // Configura otro pin AN como E/S
digital
C1ON_bit = 0; // Inhabilita los comparadores
C2ON_bit = 0;
TRISA = 0xFF; // Entrada en PORTA

TRISC = 0; // Entrada en PORTC


TRISD = 0; // Entrada en PORTD
TRISB = 0; // Entrada en PORTB
do {

temp_res = // Obtener 10-bit de resultados de la


ADC_Read(2); conversion de AD
PORTD = temp_res;
PORTC = temp_res >> // Envia 8 bits inferiores al PORTD
1;
PORTB = temp_res >> // Enviar 2 bits ms significativos a
2; RC1, RC0
} while(1);

Configuracin:
Encender el puerto B, el puerto C y el puerto D del panel
de leds (sw9.2, sw9.3, sw9.4).
Para regular el voltaje analgico de entrada (RA2) en el
convertidor ADC, utilice el potencimetro incorporado P1
Configurar el puente J15 al pin RA2 correspondiente al
convertidor AD.
Configuracin de los puertos de entrada A, B, C, D.

67
Figura 5.1.- Demostracin de encendido de leds
gradualmente con el convertidor ADC.

Figura 5.2.- Potencimetro (P1) regulador analgico


digital.
En el siguiente ejercicio se deber realizar una comunicacin
con los mdulos del sensor y la pantalla LCD externo.

68
EJERCICIO PROPUESTO
En el siguiente ejercicio deber realizar un indicador de
temperatura ambiental el cual se deber desplegar la
temperatura en grados Celsius y grados Fahrenheit utilizando
el sensor de temperatura MCP 9701.

Cdigo fuente 5: indicador de temperatura

LCD_printfix constants

#define INT_RANGE 1000 //parte entera 3 digitos

#define DEC_RANGE 10 // parte decimal : 1 digit


/*
* this counter is incremented on
each TIMER0 overflow
*/
unsigned int cntr ;
long temp ; // Temperatura en Celcius *
10
int fahr ; // Temperatura en Fahrenheit
* 10
/*
* salida de referencia del
sensor : 0C is 500 mV => 102.4
* Dado que el sensor est calibrado de
fbrica, no hay necesidad de ajuste
*/
int ref = 1024 ; // la compensacin se multiplicada
por 10 para obtener la dcima
parte
/*
* Definiciones de caracteres LCD, generados por

69
la herramienta de Carcter MikroC LCD
personalizada :
*/
const char characterC[] = // C
{8,20,8,0,3,4,4,3};
const char characterF[] = // F
{8,20,8,0,7,4,6,4};
/*
* caracteres de impresin a la que
apunta def en pos_row lnea pos_char
columna en la pantalla LCD
*/
void CustomChar(const char *def,
unsigned char n, char pos_row, char
pos_char)
{

char i ;

LCD_Cmd(64 + n * 8) ;

for(i = 0 ; i<=7 ; i++)


{
LCD_Chr_Cp(def[i]) ;

LCD_Cmd(_LCD_RETURN_HOME) ;

LCD_Chr(pos_row, pos_char, n) ;

/*

* print v con nmero entero de tamao


fijo y partes decimales
*/

void LCD_printFix(unsigned int v)

70
unsigned int w ;

unsigned int d ;

unsigned char n ;

unsigned char blk = 1 ; // cero de supresin

if(v >= 0)

LCD_Chr_Cp('+') ;

else

LCD_Chr_Cp('-') ;

v = abs(v) ;

w= v / DEC_RANGE ;

for(d = INT_RANGE / 10 ; d > 0 ; d /=


10)
{

n = (w / d) % 10 ;

if(n)

blk = 0 ;

if(blk)

LCD_Chr_Cp(' ') ;

71
}

else

LCD_Chr_Cp('0' + n) ;

LCD_Chr_Cp('.') ;
w = v % DEC_RANGE ;
for(d = DEC_RANGE / 10 ; d > 0 ; d /= 10)
{
LCD_Chr_Cp('0' + (w / d) % 10) ;
}
}
/*
*/ rutina de interrupcin, pidi a cada
desbordamiento timer0
*/
void interrupt(void)
{
if(INTCON.T0IF) // 0 temporizador de
desbordamiento?
{
cntr++ ; // Incrementar el
contador
INTCON.T0IF = 0 ; // Terminado
}
}
/*
* Entrada de programa.
*/
// Modulo de conexiones LCD

72
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Final de mdulo de conexiones LCD
void main()

{
ANSEL = 0; // Configure los pines
AN como E/S digitales
ANSELH = 0; // Configure otros pines
AN como E/S digitales
ADCON1 = 0x00 ; // Establecer PORTA como
entrada analgica
TRISA = 0xff ; // Establecer las
entradas de PORTA
TRISB = 0 ; // PORTB es la salida
LCD_Init() ; // Inicializa LCD
conectado al PORTD
LCD_Cmd(_Lcd_CURSOR_OFF) ; // Apagar el cursor
LCD_Cmd(_Lcd_CLEAR) ; // Limpia display
LCD_Out(1, 1, "Temperatura Amb."); // Imprime mensaje de
bienvenida
OPTION_REG = 0x80 ; // iniciar el
temporizador 0, sin
prescaler
INTCON = 0xA0 ; // permitir temporizador
0 desbordamiento de

73
interrupcin
for(;;) // Para siempre
{
if(cntr >= 4000) // si el tiempo
suficiente desde la
ltima muestra
{
/*
* Leer el sensor
*/
temp = Adc_Read(7) * 10 - ref ; // leer RE2 ADC, ajustar
a 0C
/*
* obtener el resultado en Celsius * 10
* coeficiente del sensor de temperatura
es +10
* Resolucin ADC es 5000/1024 = 4.88 mV as un punto ADC
es 0.488C
* Modificar la resolucin a 1500/1024=1.46 despus
1.22/10=.146 y finalmente .122*1000=146
*/
temp *= 146 ;
temp /= 1000 ;
fahr = ((9 * temp) / 5 ) + 320 ; // convierte grados C
en F * 10
/*
* imprimir la temperatura en C en LCD
*/
LCD_Out(2, 1, "") ;
LCD_printFix(temp) ;

CustomChar(characterC, 0, 2, 7) ;

/*

* imprimir la temperatura en F en LCD

74
*/
LCD_Out(2, 10, "") ;
LCD_printFix(fahr) ;
CustomChar(characterF, 1, 2, 16) ;
cntr = 0 ; // limpiar contador
}
}
}

PREPARACION DEL SISTEMA EASYPIC


En este el microcontrolador permite trasmitir la
comunicacin entre ambos mdulos por ejemplo la pantalla
LCD visualizador externo y el indicador de temperatura esto
con el fin de mostrar el uso de tres mdulos trabajando en
conjunto en un solo proyecto.
Trabajamos con un sensor de temperatura MCP9701 el cual se
encarga de censar la temperatura y convertirla en voltaje de
salida para despus transmitirla al convertidor analgico y
desplegar con caracteres la temperatura ambiente en el
visualizador LCD 2x16 pantallas de cristal.
Para poder sacar la temperatura ambiente proveniente del
sensor de temperatura MCP9701 el resultado de la salida de
referencia del sensor es 102.4 para tener el valor de
referencia del sensor se multiplica *10
Obtendramos la siguiente operacin 102.4*10=1024
El coeficiente de temperatura del sensor es de +10
La resolucin del ADC es de 1500 (RAD) entre el valor de
referencia del sensor que es 1024 (RS).

75
El voltaje de resolucin del ADC quedara de la siguiente
manera:
Vr= RAD/RS=1500/1024 = 1.46 mV
Para obtener la temperatura en Celsius por punto obtenido en
ADC se divide el voltaje de la resolucin del ADC entre el
coeficiente de temperatura del sensor (Cs) que quedara de la
siguiente manera:
ADP =Vr/Cs =1.46/10=.146, esto quiere decir que por Cada
punto de ADC (ADP) equivale a 0.146C
Por ltimo se multiplica cada punto en Celsius *1000 y
quedara de la siguiente manera:
VR= ADP*1000 =.146*1000=146 Con ello obtenemos el valor
final de referencia (VR) para anexar al cdigo de
programacin y censar la temperatura ambiente con el
termistor MCP9701.
Nota:
RAD=Resolucin del ADC
RS=Referencia del sensor
Vr=Voltaje de resolucin
CS=coeficiente del sensor
ADP=Punto en Celsius de ADC
VR=Valor de referencia

76
Figura 5.3.- Demostracin en grados Celsius y grados
Fahrenheit en la pantalla LCD 2x16.

Figura 5.4.- Regulador de voltaje convirtiendo la seal


analgico digital.

77
Prctica
Cdigo de seguridad Keypad 4x4.
6
PRESENTACION

El keypad 4x4 es un dispositivo electrnico, conformado por


un conjunto de botones del alfabeto (A, B, C, D) teclado
numrico (0 al 9) los cuales estn en un arreglo de filas y
columnas. Estos dispositivos electrnicos los encontramos en
cerraduras de combinacin, calculadoras y aparatos
telefnicos. Estos estn conectados a un microcontrolador el
cual es configurado con mltiples entradas y salidas, se
puede leer 16 teclas utilizando solamente 8 entradas a un
solo puerto del microcontrolador.

A continuacin, presentamos las generalidades de la prctica.

OBJETIVO DE LA PRCTICA
En esta prctica se utiliza el keypad 4x4 en funcin con el
visualizador externo LCD2x16 en la cual se demuestra el uso
de los botones de presin que conforman el teclado matricial
para realizar un contador del nmero de veces que se

78
presiona cada botn. Para despus visualizar el conteo en la
pantalla LCD 2x16.

DESTREZAS Y HABILIDADES ADQUIRIDAS


Con esta prctica, el alumno adquiere habilidades y destrezas
en:
Manejo del uso del teclado matricial 4x4
Programacin del microcontrolador para el uso y
comunicacin entre el teclado 4x4 y el visualizador
LCD 2x16.
Configuracin de dip swich y puentes

MATERIAL
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC Pro for PIC 1
Tarjeta de desarrollo 1
EASYPIC6

MARCO TERICO
El funcionamiento de este dispositivo est basado en leer a
los pines se su respectiva entrada de cada pin por ejemplo
RD0, RD2 y RD3 estas se encuentran conectadas a los
resistores pull-down como entradas. Los pines RD4, RD5, RD6
y RD7 se configuran como salidas de alto nivel. Al pulsar
cualquier botn de presin se aplicara un uno (lgico) y este
se aplicara en los pines de entrada.

79
El programa a realizar contiene los pasos detallados en el
algoritmo 6.

Algoritmo 6

Inicializar el teclado y display LCD.


Configura los pines AN como E/S digital
Escribir mensaje de salida en el visualizador LCD
2x16
Guardar el cdigo clave en variable kp
Transformar y visualizar clave ASCII en pantalla
LCD

80
DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

81
Cdigo fuente 1: Ejemplo del programa

unsigned short kp, cnt, oldstate = 0;


char txt[6];

// Conexiones de modulo del teclado

82
char keypadPort at PORTD;
// Fin de conexiones del mdulo de teclado

// Conexiones del modulo LCD


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// Fin conexiones del mdulo LCD

void main() {
cnt = 0; // Reiniciar contador
Keypad_Init(); // Inicialize teclado
ANSEL = 0; // Configura los pines
AN como E/S digital
ANSELH = 0;

Lcd_Init(); // Inicializa LCD


Lcd_Cmd(_LCD_CLEAR); // Limpia display
Lcd_Cmd(_LCD_CURSOR_OFF); // Apaga cursor
Lcd_Out(1, 1, "Boton:"); // Escribe mensaje en
LCD

83
Lcd_Out(2, 1, "Veces:");

do {
kp = 0; // Cambiar de cdigo
variable clave

//Espere a que la clave para presionar y soltar


do
kp = Keypad_Key_Press(); // Guarde el cdigo clave
en la variable kp
// kp = Keypad_Key_Click(); // Guarde el cdigo
clave en la variable kp

while (!kp);

// Prepara el valor de salida, Transforma tecla a su valor ASCII


switch (kp) {
case 1: kp = 49; break; // 1
case 2: kp = 50; break; // 2
case 3: kp = 51; break; // 3
case 4: kp = 65; break; // A
case 5: kp = 52; break; // 4
case 6: kp = 53; break; // 5
case 7: kp = 54; break; // 6
case 8: kp = 66; break; // B
case 9: kp = 55; break; // 7
case 10: kp = 56; break; // 8
case 11: kp = 57; break; // 9
case 12: kp = 67; break; // C
case 13: kp = 42; break; // *
case 14: kp = 48; break; // 0

84
case 15: kp = 35; break; // #
case 16: kp = 68; break; // D

if (kp != oldstate) { // La tecla presionada


difiere de la previa
cnt = 1;
oldstate = kp;
}
else { // La tecla presionada
es la misma que la previa
cnt++;
}

Lcd_Chr(1, 10, kp); //Imprimir valor de


clave ASCII en la pantalla LCD

if (cnt == 255) { // Si la variable del


contador se desborda
cnt = 0;
Lcd_Out(2, 10, " ");
}

WordToStr(cnt, txt); // Transformar el valor


del contador a cadena
Lcd_Out(2, 10, txt); // Visualizar valor del
contador en la pantalla LCD
} while (1);

Configuracin:

85
Colocar el puente J17 en VCC-MCU.
Colocar el puente J4 a tierra
Los pines RD0,RD1,RD2,RD3y estn conectados a la
resistencia pull-down
Configurar el dip switch SW4
(SW4.1,SW4.2,SW4.3,SW4.4)

Figura 6.1.-Configuracin del puente J17 en VCC-


MCU

86
Figura 6.3.- Teclado matricial 4x4 configurado en la
pantalla 2x16 LCD.

Figura 6.4.-Demostracion del teclado matricial 4x4 en


la pantalla LCD.

87
DIAGRAMA PROPUESTO: Cerradura electrnica

88
EJERCICIO PROPUESTO
En este ejercicio el usuario deber realizar una prctica en la
cual utilice el keypad 4x4 para ingresar una clave de una
cerradura electrnica contando con los dgitos correctos,
despliegue las opciones para configurar la puerta y cambiar la
clave de acceso de la cerradura electrnica.

Cdigo Fuente 6: Cerradura electrnica

unsigned int i=0,cont=0,k=0,x=0;


unsigned short kp=0, aux;
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
/*
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;

89
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;
*/
// Conexiones del modulo teclado
char keypadPort at PORTD;
// Fin de conexiones del modulo teclado
void acceso2(){
do
kp = Keypad_Key_Click();
while (!kp);
if(kp==4){
k=2;
}
if(kp==8){
k=3;
i=0;
}
}
void acceso(){
lcd_out(1,1,"DIGITE CLAVE");
do
kp = Keypad_Key_Click();
while(!kp) ;
if (kp==eeprom_read(i)){

90
i++;
}
else{
i=0;
}
cont++;

if(cont==1){
lcd_out(2,6,"*");
}
if(cont==2){
lcd_out(2,6,"**");
}
if(cont==3){
lcd_out(2,6,"***");
}
if(cont==4){
lcd_out(2,6,"****");
delay_ms(500);
if(i==4){
i=0;
lcd_cmd(_lcd_clear);
lcd_out(1,1,"Correcto");
portb.F0=0;
k=1;
cont=0;
delay_ms(1000);
lcd_cmd(_lcd_clear);
lcd_out(1,3,"BIENVENIDO");
lcd_out(2,5,"Marcos");

91
delay_ms(2000);
}
else{
lcd_cmd(_lcd_clear);
lcd_out(1,1,"Incorrecto");
portb.F0=1;
portb.F1=1;
delay_ms(1000);
lcd_cmd(_lcd_clear);
k=0;
}
i=0;
cont=0;
}

}
void acceso3(){
do
kp = Keypad_Key_Click();
while (!kp);
Eeprom_write(i,kp);
delay_ms(30);
i++;
porta=kp;
if(i>3){
k=0;
i=0;
cont=0;
lcd_cmd(_lcd_clear);
}

92
}
void main(){
anselh=0;
ansel=0;
trisa=0;
porta=0;
trisb=0;
trisd=0b00001111;
portb=0;
lcd_init();
Keypad_Init();
lcd_cmd(_lcd_cursor_off);
delay_ms(100);
for(x=0;x<4;x++){
Eeprom_write(x,14);
delay_ms(30);
}
while(1){
while(k==0){
acceso();
}
while (k==1){
lcd_cmd(_lcd_clear);
lcd_out(1,1,"A:Abrir Puerta");
lcd_out(2,1,"B:Cambiar Clave");
acceso2();
}
while(k==2){
lcd_cmd(_lcd_clear);
lcd_out(1,1,"Puerta abierta");

93
portb.b0=1;
+
delay_ms(4000);
k=0;
lcd_cmd(_lcd_clear);
portb.b0=0;
}
while(k==3){
lcd_cmd(_lcd_clear);
lcd_out(1,1,"Nueva clave");
acceso3();
};
}
}

Configuraciones:
Configure el J17 en VCC-MCU para que utilice la
resistencia de proteccin R58.

Figura 6.3.- Demostracin del cdigo en la pantalla


LCD.
94
Prctica
Reinicio del contador (WDT). 7
PRESENTACION
El propsito de watch dog (perro guardin) es darle un
reinicio al sistema por medio de un mecanismo de defensa
reiniciando al sistema con la finalidad de evitar que el sistema
entre en un ciclo infinitos. Este tipo de temporizador se
encuentra dentro del microcontrolador por lo que realiza
llamadas al reset del mismo microcontrolador ejecutar en
forma peridica para as lograr actualizar el estado, esto
garantiza que el sistema pueda seguir funcionando.

A continuacin, presentamos las generalidades de la prctica.

OBJETIVO DE LA PRCTICA
El objetivo de esta prctica es hacer que el temporizador que
se encuentra dentro del microcontrolador es disminuir un
contador que arroje valores infinitos o muy grandes valores.
Es por eso que para evitar desbordamientos en los sistemas
de valores no deseados, es recomendable utilizar reset para
reiniciar al sistema.
95
DESTREZAS Y HABILIDADES ADQUIRIDAS
Con esta prctica, el alumno adquiere habilidades y destrezas
en:

El uso de whatchdog
Cocimiento del temporizador de 16 bits
Conocimientos del funcionamiento del microcontrolador

MATERIAL
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales.

Material/Recurso Cantidad
PIC16f887 1
software MikroC Pro for PIC 1
Tarjeta de desarrollo 1
EASYPIC6

MARCO TERICO
MikroC permite la escritura de bits con la posibilidad de
emplear una escala para el watchdog puede extenderse a 268
segundos con un temporizador de 16 bits, el temporizador
(timer) se deber encontrar en 0 cero y reducir el nmero de
interrupciones de 8 bits al mismo tiempo.
El reset puede evitarse si se reinicia el watch dog timer por
medio de la ejecucin de la instruccin CLRWDT (despejar al
WDT) antes del final de su ejecucin. En este caso particular
esta prctica, es necesario usar algo de ensamblador para
indicar que se est usando instrucciones del ensamblador
utilizando una lnea o extensin .asm o una declaracin del
lenguaje C.
96
A continuacin, presentamos el programa ejemplo para
ilustrar al concepto anterior.

El programa a realizar contiene los pasos detallados en el


algoritmo 7.
Algoritmo 7
Encender el watchdog timer en la ventana de edicin de
proyecto
Encender los puertos A, B, C, D.
DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

97
Cdigo fuente 7: Watch dog (WDT)

void main() {

ANSEL = 0; // configura los pins AN como


digitales
ANSELH = 0;
C1ON_bit = 0; // Inhabilita comparadores
C2ON_bit = 0;

98
OPTION_REG = 0x0E; //asignar el prescaler al WDT, con tasa
de 1:64

asm CLRWDT; // Linea asm, Limpia el watchdog


timer
porta = 0x3f;
PORTB = 0x0c; // inicializa el PORTB
portc = 0x0c;
portd = 0x3f;

trisa = 0;
TRISB = 0; // configura PORTB como salida
trisc = 0;
trisd = 0;
Delay_ms(500); // Retardo de .5 segundos

porta = 0x21;
PORTB = 0x3f; // cambia el valor del PORTB
portc = 0x3f;
portd = 0x21;

while (1) // Bucle sin fin, WatchDog_Timer


reiniciara el PIC
;
}

99
Figura 7.1.- Demostracin del watchdog reiniciando al
procesador despus
100
de que ocurra una falla o problema de software.

Figura 7.2.-Utilizando el watchdog timer para reiniciar


la ejecucin del programa este no es empleado en
ninguna subrutina, puede ser configurado como un
temporizador de intervalos y puede generar
interrupciones en los intervalos de tiempo
seleccionados.

Prctica
VISUALIZADOR EXTERNO GLCD
128X64.
8
101
PRESENTACION

Las pantallas GLCD se caracterizan por su amplio nmero de


puntos de 128x64 pixeles, cuenta con una pantalla de cristal
lquido y un fondo de luz reflectora y una memoria RAM
interna del mismo tamao de la pantalla. Este tipo de
pantallas se caracterizan por dos controladores internos este
tipo de visualizadores los encontramos en dispositivos
electrnicos que requieren desplegar informacin en forma
de grficos.
Estos visualizadores son empleados para para tener el control
de la pantalla pero este tipo de pantallas cuenta con
dificultades a la hora de trabajar ya que son muy sensibles.
Este tipo de visualizadores te proporciona observar
detalladamente un sistema grfico y mensajes de textos y
una imagen monocromtica con resolucin de 128x 64 pixeles
y una extensin .BMP.
La diferencia de los visualizadores GLCD grficos como su
nombre los dice tiene una resolucin mayor que las pantallas
LCD y que estas ltimas cuentan con texto con menos
posibilidades de presentacin y manejo de informacin.

A continuacin, presentamos los objetivos de la prctica.

OBJETIVO DE LA PRCTICA
Tiene como objetivo el aprender a utilizar las libreras
disponibles para trabajar con visualizadores GLCD, que tenga
incorporado al controlador Samsung KS0108 y crear figuras,
mensaje de texto con diferentes tipos de fuentes y tamaos
de letras e imgenes monocromticas.

102
DESTREZAS Y HABILIDADES ADQUIRIDAS
Con esta prctica, el alumno adquiere habilidades y destrezas
en:
Uso del mdulo GLCD 128X64.
Control de imgenes monocromticas.
Manejo de las libreras

MATERIAL:
Para la realizacin de esta prctica se requieren los siguientes
recursos y materiales

Material/Recurso Cantidad
PIC16f887 1
software MikroC Pro for PIC 1
Tarjeta de desarrollo 1
EASYPIC6

MARCO TERICO
Esta pantalla contiene un controlador Samsung KS0108
cuenta con 64 canales de salidas para la matriz de puntos
para la visualizacin del GLDC tiene una memoria RAM que
almacena datos de la pantalla los cuales son transferidos a
un microcontrolador de 8 bits.

A continuacin, presentamos el algoritmo ejemplo para


ilustrar al concepto anterior.

El programa a realizar contiene los pasos detallados en el


algoritmo 8.

103
Algoritmo 8

Declarar las variables de imagen.


Configurar el mdulo de conexiones visualizador grfico.
Escoger tipos de fuentes de la librera.
Insertar texto e imgenes.

DIAGRAMA DE FLUJO
El proceso a realizar se puede resumir a travs del siguiente
diagrama de flujo.

104
Cdigo fuente 8: Pantalla GLCD 128x64

//Declarations----------------------------------------------------
--------------
const code char house[1024];

105
//--------------------------------------------------------------
end-declarations
// ------------------------------------------------------
// GLCD Picture name: house.bmp
// GLCD Model: KS0108 128x64
// ------------------------------------------------------

const code char house[1024] = {


0, 0, 0, 0, 4, 10, 58, 62, 122, 210, 208, 208, 208,
208, 208, 48, 188, 60, 172, 172, 246, 247, 255, 110, 254, 190,
126, 126, 92, 152, 96, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
128, 128, 128, 0, 129, 129, 141, 143, 136, 192, 80, 208, 200,
8, 8, 140, 12, 58, 58, 71, 130, 135, 0, 161, 208, 112,
240, 160, 166, 166, 153, 139, 142, 141, 143, 15, 27, 23, 23,
27, 15, 15, 143, 190, 187, 191, 159, 204, 140, 143, 246, 246,
246, 230, 189, 255, 177, 189, 238, 195, 76, 0, 0,
0, 0, 0, 0, 0, 0, 0, 24, 28, 222, 126, 123, 57,
63, 125, 120, 15, 15, 3, 3, 65, 193, 225, 193, 192, 192,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 29, 153,
192, 66, 199, 132, 132, 133, 135, 0, 0, 128, 80, 120, 81,
113, 118, 126, 63, 31, 22, 227, 253, 248, 224, 192, 193, 194,
194, 194, 195, 129, 0, 1, 131, 131, 191, 191, 230, 234, 234,
188, 248, 241, 195, 66, 71, 129, 133, 133, 174, 255, 255, 247,
255, 255, 254, 254, 255, 251, 253, 210, 208, 0, 0,
0, 0, 0, 0, 32, 60, 52, 247, 254, 241, 245, 239, 255,
188, 182, 254, 252, 230, 243, 233, 247, 151, 153, 255, 247, 243,
223, 221, 252, 120, 120, 248, 104, 120, 248, 112, 112, 48, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 16, 16, 16,
16, 16, 16, 16, 16, 16, 31, 31, 31, 31, 17, 17, 17,
17, 17, 17, 17, 18, 18, 25, 25, 44, 15, 31, 63, 63,
111, 127, 58, 63, 119, 119, 255, 191, 53, 22, 31, 11, 31,
31, 47, 63, 63, 255, 207, 255, 255, 47, 37, 0,
0, 0, 0, 0, 0, 0, 32, 251, 255, 255, 255, 255, 255,
131, 129, 193, 227, 227, 51, 55, 229, 199, 7, 15, 11, 27,
31, 28, 56, 240, 96, 96, 97, 97, 97, 97, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,

106
96, 96, 224, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
96, 96, 96, 96, 96, 96, 96, 97, 99, 98, 102, 108, 248,
240, 96, 96, 0, 255, 255, 255, 255, 0, 0, 0,
0, 0, 0, 0, 2, 23, 29, 33, 33, 255, 255, 255, 255,
167, 167, 58, 24, 120, 248, 232, 121, 123, 122, 158, 144, 0,
252, 158, 159, 127, 96, 128, 14, 10, 10, 10, 10, 10, 10,
14, 0, 0, 0, 14, 10, 10, 10, 10, 10, 14, 14, 0,
0, 128, 255, 248, 232, 192, 192, 254, 254, 254, 34, 34, 34,
34, 34, 34, 254, 34, 34, 34, 34, 34, 34, 34, 254, 254,
254, 50, 0, 0, 0, 254, 130, 186, 58, 58, 98, 98, 98,
98, 2, 254, 0, 0, 0, 254, 254, 254, 254, 34, 34, 34,
34, 254, 254, 34, 34, 34, 34, 34, 254, 254, 254, 224, 127,
255, 194, 222, 126, 255, 255, 255, 255, 0, 0, 0,
0, 0, 0, 0, 0, 128, 128, 128, 96, 191, 255, 127, 255,
255, 225, 195, 207, 140, 137, 8, 8, 8, 8, 25, 63, 59,
11, 79, 79, 73, 233, 254, 168, 160, 160, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
60, 63, 39, 47, 63, 63, 125, 73, 9, 225, 64, 72, 120,
120, 120, 121, 73, 65, 77, 81, 25, 121, 73, 121, 49, 113,
73, 73, 200, 200, 120, 127, 80, 81, 64, 64, 64, 80, 80,
240, 224, 127, 24, 152, 144, 201, 233, 249, 249, 56, 136, 8,
144, 241, 121, 120, 160, 248, 240, 112, 9, 121, 63, 127, 120,
104, 77, 76, 124, 255, 255, 255, 255, 248, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 3, 6, 6,
12, 12, 24, 24, 16, 48, 32, 96, 96, 192, 192, 128, 128,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2,
6, 6, 0, 0, 4, 0, 0, 2, 2, 34, 98, 98, 208,
209, 145, 145, 16, 16, 16, 8, 8, 8, 4, 6, 2, 1,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 192,
192, 224, 224, 248, 231, 239, 255, 119, 67, 0, 0,
0, 0, 0, 0, 0, 0, 0, 128, 128, 0, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 96, 64, 64, 65, 65,
99, 99, 98, 102, 102, 108, 108, 120, 120, 120, 112, 112, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 3, 2, 6, 6, 12, 12, 24, 24, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 16, 16, 0, 0, 0, 0, 0, 0

107
};
// ------------------------------------------------------
// GLCD Picture name: UV.bmp
// GLCD Model: KS0108 128x64
// ------------------------------------------------------

const code char UV[1024] = {


0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 192, 224, 240, 248, 252, 252,
248, 240, 224, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 252, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 254, 240, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 128, 192, 192, 224, 240, 240, 240, 248,
248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
240, 240, 240, 240, 224, 199, 223, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 207, 225, 224, 240, 240, 240, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 240,
240, 240, 224, 224, 192, 128, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 12, 63, 255, 255, 255, 255, 255, 255, 31, 15,
7, 7, 3, 3, 1, 1, 1, 1, 129, 129, 129, 131, 131,
131, 135, 135, 143, 31, 127, 255, 255, 255, 255, 255, 255, 255,

108
255, 255, 255, 255, 255, 127, 63, 159, 143, 135, 131, 131, 131,
129, 129, 129, 1, 1, 1, 1, 3, 3, 3, 7, 15, 31,
255, 255, 255, 255, 255, 255, 127, 30, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 3, 3, 7, 6, 4,
8, 8, 0, 0, 0, 0, 0, 63, 252, 249, 227, 207, 159,
63, 255, 255, 255, 255, 254, 248, 241, 231, 143, 31, 127, 127,
63, 159, 199, 243, 249, 252, 255, 255, 255, 255, 127, 31, 207,
231, 241, 252, 254, 0, 0, 0, 0, 0, 0, 8, 4, 6,
7, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 127, 255, 255, 255, 255,
254, 252, 249, 227, 207, 159, 63, 255, 255, 255, 255, 254, 252,
255, 255, 255, 255, 127, 31, 207, 231, 241, 252, 254, 255, 255,
255, 255, 127, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 3,
7, 7, 7, 15, 15, 15, 14, 28, 25, 3, 15, 15, 31,
15, 7, 17, 28, 14, 15, 15, 15, 7, 7, 7, 3, 3,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 124, 64, 64, 64, 64, 120, 56, 0, 112, 112, 16,
112, 96, 0, 120, 112, 0, 16, 96, 96, 48, 0, 32, 112,
112, 112, 112, 0, 112, 112, 16, 16, 0, 80, 112, 112, 0,
0, 120, 0, 0, 112, 80, 80, 124, 0, 0, 80, 112, 112,
112, 0, 32, 112, 80, 80, 124, 0, 0, 0, 0, 0, 0,
0, 24, 48, 96, 48, 24, 12, 112, 112, 112, 112, 0, 0,
112, 16, 16, 16, 64, 112, 48, 112, 64, 0, 112, 80, 80,
80, 0, 0, 112, 16, 16, 0, 48, 112, 64, 64, 112, 0,
0, 80, 112, 80, 0, 0, 80, 112, 112, 112, 0, 0, 112,
16, 16, 112, 32, 0, 80, 48, 112, 112, 0, 0

109
};

// Modulo de conexiones GLCD


char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RB0_bit;


sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS at RB2_bit;
sbit GLCD_RW at RB3_bit;
sbit GLCD_EN at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;


sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction at TRISB2_bit;
sbit GLCD_RW_Direction at TRISB3_bit;
sbit GLCD_EN_Direction at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// Fin del mdulo de conexiones GLCD

void delay2S(){ // Funcin de 2


segundos de retardo
Delay_ms(1000);
}

void main() {
unsigned short ii;
char *someText;

110
#define COMPLETE
ANSEL = 0; // Configura los
pines AN como digitales
ANSELH = 0;
C1ON_bit = 0; // Inhabilita
comparadores
C2ON_bit = 0;

Glcd_Init(); // Inicializa
GLCD
Glcd_Fill(0x00); // Limpia GLCD

while(1) {
#ifdef COMPLETE
Glcd_Image(house); // Dibuja imagen
delay2S(); delay2S();
#endif

Glcd_Fill(0x00); // Limpia GLCD


#ifdef COMPLETE
Glcd_Set_Font(Character8x7, 8, 7, 32); // Escoge Fuente, Ver
__Lib_GLCDFonts.c en el folder de usuario
Glcd_Write_Text("Hola Mundo!", 8, 3, 2); // Escribir
Cadena
#endif

Glcd_Set_Font(font5x7, 5, 7, 32); // Cambiar fuente


someText = "Este es un ejemplo";
Glcd_Write_Text(someText, 8, 4, 2); // Escribir
cadena
delay2S();

111
Glcd_Set_Font(Font5x7, 5, 7, 32); // Cambiar fuente
someText = "De GLCD 128x64";
Glcd_Write_Text(someText, 8, 5, 2); // Escribir cadena
delay2S();

Glcd_Rectangle(5,16,116,55,1); // Dibujar
rectangulo
Delay_ms(2000);

#ifdef COMPLETE
Glcd_Image(UV); // Dibujar imagen
delay2S(); delay2S();
#endif

/*
for(ii = 5; ii > 60; ii+=5 ){ // Dibuja
lineas horizontales y verticales
Glcd_V_Line(2, 54, ii, 1);
Glcd_H_Line(2, 120, ii, 1);
*/
}
delay2S();
}

Configuraciones:
Encienda el interruptor de la luz de fondo del GLCD
SW8.8.
Regular el contraste del visualizador grafico por medio
del potencimetro 3 ubicado en la parte superior GLCD.

112
Figura 8.1.-Demostracio en la pantalla GLCD.

Figura 8.2.-Configuracion del dip switch SW6.8

113
Figura 8.3.- Ejemplo del visualizador GLCD

Figura 8.4- Ejemplo de imagen monocromtica

114

También podría gustarte