Pic 18 F 452

September 15, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Pic 18 F 452...

Description

 

  UNIVERSIDAD MAYOR FACULTAD DE INGENIERIA ESCUELA DE ELECTRONICA Y TELECOMUNICACIONES TE LECOMUNICACIONES

“PROGRAMACION MICROCONTROLADOR PIC 18F452 USANDO KIT DE DESARROLLO MICROCHIP” DISEÑO E IMPLEMENTACION DE SISTEMAS DIGITALES

Rubén Bravo

SANTIAGO – CHILE Diciembre 2006

 

Rubén Bravo Brach

 

Universidad Mayor 

INDICE Introducción.

2

1. Microcontrolador PICF452.

3

1.1 Características Técnicas.

3

1.2 Características Periféricas.

3

2. Programación del PIC.

5

2.1 Análisis del circuito del grabador.

7

2.2 PIC – C Compiler.

8

2.2.1 Programando en C. 2.2.2 Estructura C – Assembler. 2.3 WinPic 800.

3. Picboard.

8 11 12

2.3.1 Configurando el programador.

12

2.3.2 Extrayendo – Ingresando datos al PIC.

16 18

3.1 Características Generales.

18

4. Teclado.

19

5. Display.

20

5.1 Características.

21

5.2 Descripción de pines.

21

5.3 Encendido del LCD.

23

5.3.1 Usando Funciones del PIC-C Compiler.

24

5.3.2 Usando Funciones del Manual del LCD.

24

5.3.3 Funciones Más Usadas.

29

5.3.3.1 lcd_init().

29

5.3.3.2 lcd_gotoxy(),

30

5.3.3.3 lcd_putc().

30

6. Temporizador. 6.1 Interrupciones. Anexos

31 32 34

  1

 

Rubén Bravo Brach

 

Universidad Mayor 

INTRODUCCION Dentro de los tópicos del curso de “Diseño e Implementación de Sistemas Digitales”, se introdujo como materia del ramo, las aplicaciones y programación de los microcontroladores PIC, específicamente el PIC18F452, el cual se usó para crear un sistema de alarma, que tuviera características varias, como un display, en el cual el usuario pudiera seleccionar distintas opciones desde un teclado multiplexado, como asignar Hora/Fecha, supervisar el estado de puertas y ventanas, etc. En vista de que este material es nuevo, se pensó en la necesidad de crear un manual que fuese en ayuda de los futuros alumnos del ramo, como también de todos aquellos que se interesen en aprender el uso del PIC.

La finalidad de este manual, es entregar las herramientas iniciales sobre el uso, programación y consejos que permitan crear los cimientos necesarios para que el alumno aprenda los conocimientos básicos y sea capaz de realizar proyectos usando las capacidades de estos microcontroladores. De más esta decir que cualquier contribución a este manual, será bienvenida y agradecida. También quisiera agradecer a Osvaldo Rodríguez Toro y al profesor de la asignatura Sr. Gustavo Meyer, por la ayuda y consejos otorgados durante el semestre para poder usar el microcontrolador.

2

 

Rubén Bravo Brach

1.

 

Universidad Mayor 

EL MICROCONTROLADOR PICF452.

Este integrado de la familia PIC, forma parte de los circuitos integrados de Microchip Technology Inc., que pertenece a la categoría de los microcontroladores Presenta .

características muy versátiles que le permiten aplicaciones en un gran número de variedades.

1.1

Características Técnicas: -

Memoria Flash de 32 Kbytes.

-

Número de instrucciones: 16384.

-

RAM (incluida) de 1536 bytes.

-

Datos EEPROM 256 bytes.

1.2

Características Periféricas: -

Posee 5 puertos I/O, de 8 bits, menos el puerto A que sólo tiene 7 bits.

-

Compatibilidad A/D de 10 bits.

-

Tiene un generador de oscilación que le brindan características de timer.

Para más detalle, remitirse al Data sheet del integrado que viene adjunto con el CD del Kit de desarrollo. FIGURA 1.1 DIAGRAMA DE PINES

3

 

Rubén Bravo Brach

Universidad Mayor 

 

FIGURA Nº 1.2 DIAGRAMA EN BLOQUES DEL PIC18F452

4

 

Rubén Bravo Brach

2.

 

Universidad Mayor 

PROGRAMACIÓN DEL PIC.

El Kit de desarrollo trae un software llamado “Mplab” en el cual se puede hacer la programación el PIC; en primera instancia se puede hacer directamente en lenguaje assembler usando el set de instrucciones propio del microcontrolador (adjunto en el data sheet), pero la dificultad de hacerlo puede ser un tanto grande, sobretodo si no se tiene mucha experiencia en microcontroladores, o bien, en lenguaje assembler. Por eso, la opción más simple, es la programación en lenguaje C, al cual se está más habituado, otra razón para programar en C, es que éste es un lenguaje de mayor nivel; lo que implica que no es necesario tener que adaptarse a los distintos tipos de microcontroladores. No como lo que ocurre en assembler, como este es un programa de bajo nivel, implica que cada chip tiene su propio set de instrucciones y por ende hay que adaptarse a cada uno. Pero aparecen otras dificultades; como el procedimiento del Mplab de aceptar la escritura C y transformarla en instrucciones assembler. Para ello, la solución es la siguiente: implementar un grabador de PIC propio, compatible para lenguaje C. El circuito de éste es simple de implementar. El esquema del circuito fue extraído desde Internet a través de la página http://www.pablin.com.ar/; en donde además, hay varios otras opciones e información sobre microcontroladores e interesantes temas relacionados con electrónica.

5

 

Rubén Bravo Brach

 

Universidad Mayor  FIGURA 2.1 “CIRCUITO PROGRAMADOR DE PIC”

FIGURA 2.2 “CONEXIONES CON DISTINTOS TIPOS DE INTEGRADOS”

CircuitoS extraído desde http://www http://www.pablin.com.ar/electron .pablin.com.ar/electron/circuito/mc/pp /circuito/mc/ppp2/index.htm p2/index.htm

Notar que las terminales con los números, corresponden a los pines del puerto paralelo (impresora), se recomienda respetar el orden de los mismos propuestos en

6

 

Rubén Bravo Brach

 

Universidad Mayor 

el esquema (más adelante se explicará el por qué). También este programador es compatible para los microcontroladores de 8, 18, 28, 40 pines. En éste caso, el PIC18F452 tiene 40 pines, por lo que sólo se usará el pin 6 del esquema Nº 2.

2.1

Análisis del circuito del grabador.

Para la alimentación, usar una fuente de voltaje de 12 [v]. Vcc

:

corresponde al voltaje de alimentación del PIC, 5 [v].

Vpp

:

corresponde al voltaje de programación del PIC, 12 [v].

Scl

:

corresponde a la frecuencia de reloj.

Sda

:

corresponde a la entrada/salida de datos del PIC.

El LED marcado como "PIC" indica cuando no hay presencia de tensión de programación (VPP) en el zócalo. Cuando este LED esta apagado la tensión está presente en los zócalos PIC. Nunca insertar o quitar microcontroladores de los

zócalos estando este indicador apagado. Esto ocurre debido a que desde el PIN 6 llega una pequeña corriente a la base del transistor; lo que hace que éste, del estado saturación pase a corte y deje fluir toda la corriente colector emisor que viene a través de la resistencia de 1[ K    Ω ]. El inversor que está presente (74LS04) tiene la misión de ser una especie de buffer, retardando la señal y levantándola; por eso la señal es negada dos veces, esto fue pensado para aquellas situaciones en que el cable es demasiado largo y la señal tiende a atenuarse o a presentar ruido.

7

 

Rubén Bravo Brach

2.2

 

Universidad Mayor 

PCI - C Compiler.

En éste software es posible programar el PIC usando instrucciones de lenguaje C, es un software muy amigable y simple. Además al momento de compilar, automáticamente se crea un archivo de extensión “.hex” que es el necesario para poder ejecutar otro software (se verá más adelante) que crea las instrucciones en assembler.

2.2.1 Programando en C. En la opción “File”, se debe buscar la subopción “New”, en donde aparecerá una pantalla en la cual pide la ubicación en donde se guardará el proyecto. FIGURA 2.3 “PRESENTACION VENTANA PRINCIPAL”

Una vez hecho esto, se comienza a programar el PIC. 8

 

Rubén Bravo Brach

Universidad Mayor 

 

Lo primero que hay que declarar son las librerías necesarias y las características que se usarán. #include #fuses XT,NOWDT,NOPROTECT #use delay(clock=4000000) •

  En la primera, se declara la librería librería del iintegrado ntegrado a usar y el programa automáticamente adopta los parámetros del PIC.



  En la segunda directiva, se define qué fusibles deben activarse en el dispositivo cuando se programe.



  Esta directiv directiva a indica al compilador la frecuencia del procesador, en ciclos por segundo [Hz]. FIGURA 2.4 “EJEMPLO DE PROGRAMACIÓN”

9

 

Rubén Bravo Brach

 

Universidad Mayor 

Para compilar se debe ir a la opción “Compile” o bien apretar F9, si no hay error debería salir el siguiente mensaje: FIGURA 2.5 CUADRO DE COMPILACION

El archivo con la extensión “.hex” se crea en la misma ubicación antes seleccionada (al momento de guardar el proyecto). Se aconseja que cada vez que se compile, se debe hacer click con el botón derecho en la pestaña que tiene el nombre del proyecto y luego seleccionar la opción “Make file of Project”, para asegurarse que se compilará el archivo en el lugar apropiado. Ahora se está en condiciones de ejecutar el software para grabar el PIC

10

 

Rubén Bravo Brach

 

Universidad Mayor 

Si hay interés de ver la estructura assembler del programa realizado, se debe revisar el siguiente tópico(ver Estructura C – Assembler).

2.2.2 Estructura C - Assembler. Para ver cómo quedaría el programa en instrucciones assembler propias del PIC, se debe hacer clic en el botón “Mixed C and ASS List File” FIGURA 2.6 C - ASSEMBLER

“Mixed C and ASS List File”

Es muy recomendable que se tenga un manual de programación de PIC en lenguaje C, en esta dirección hay uno que se puede descargar y es bastante completo: http://www.eupmt.es/cra/inform/Manual_Compilador_C_Para_PICs.pdf 11

 

Rubén Bravo Brach

2.3

 

Universidad Mayor 

WINPIC 800.

Este es un software que permite grabar el PIC usando el grabador de PIC que se implementó con anterioridad.

2.3.1 Configurando el grabador. Es necesario configurar el grabador en el software para que reconozca la existencia de éste y sus capacidades. Se debe hacer click en la opción “Configuración” y luego en la subopción “Hardware”. FIGURA 2.7 VENTANA PRINCIPAL WINPIC 800

12

 

Rubén Bravo Brach

Universidad Mayor 

 

Los siguientes pasos son para configurar los parámetros del grabador: 1.

El grabador que se debe seleccionar es el “Protopic2”.

2.

Para que aparezca el cuadro de opciones se debe oprimir la 5º opción de izquierda a derecha en el extremo inferior izquierdo.

3.

Para habilitar las casillas, se debe quitar el ticket en la casilla del extremo superior derecho. FIGURA 2.8 AJUSTANDO PARAMETROS DE CONFIGURACION

Oprimir para acceder a cuadro de opciones Permite habilitar las casillas

13

 

Rubén Bravo Brach

 

Universidad Mayor 

Ahora para ajustar los parámetros se debe tener en mente el siguiente esquema del conector de puerto paralelo: 1 2 3 4 5 6 7 8 9 10 11 12 13 o o o o o o o o o

o

o

o

o

o o o o o o o o o o o o 14 15 16 17 18 19 20 21 22 23 24 25

En donde el PIN 1 es “Strobe”, los PINES 2 al 9 son de datos (los cuales forman 1 Byte), el 10 es “ACK” y el 25 corresponde a “GND”. El resto de los PINES no es importante mencionarlo para efectos de este ejemplo, por lo que se deja al interesado en buscar la información

Si se siguió el orden de los pines propuestos en el ejemplo de implementación del grabador será más simple configurarlo. Si recordamos el circuito: -

Vcc (alimentación PIC), está asociado al PIN PIN 6, que según el esquema del conector equivale al “bit 4”.

-

“Scl” (Frec. R Reloj) eloj) corresponde al PIN 3, que corresponde al “bit 1”.

-

“Sda” (dato) está asociado a los PINES 10 y 2, pero el PIN 10 “ACK” está predefinido como “Data in”, por lo que no se debe cambiar, pero el PIN 2 corresponde al “bit 0” y debe ser cambiado en las opciones.

Ahora en la ventana de opciones, hay que asignar a la columna “nombre” el bit asociado. Nombre Data Data Dat a In

Bit

P IN P . Pa ra l e l o

 

0

2

 

ACK

10

Clock Vpp

 

1 4

3 6

 

  14

 

Rubén Bravo Brach

 

Universidad Mayor 

La configuración debe quedar así: FIGURA 2.10 AJUSTANDO PARAMETROS DEL GRABADOR

Nota: la casilla que se encuentra habilitada junto a Vpp debe quedar con el clic puesto, ya que de ésta forma el LED nombrado como “PIC” queda encendido cuando no hay voltaje de programación. Así deben quedar las distintas casillas del recuadro de opciones, no olvidar oprimir el botón “Confirmar cambios”.  Una vez hecho esto, se recomienda hacer la siguiente operación antes de comenzar a grabar el PIC. Primero se debe detectar el grabador haciendo clic en el botón “Detectar Dispositivo”, al oprimirlo debe salir una ventana en la cual aparezca el nombre del PIC usado.

15

 

Rubén Bravo Brach

 

Universidad Mayor 

Nota: al hacer esto, el PIC debe estar en el Zócalo del grabador. FIGURA 2.11 RECONOCIMIENTO DEL PIC

Botón “Detectar dispositivo”

Debe salir el nombre del PIC utilizado

2.3.2 Extrayendo – IIngresando ngresando datos al PIC. Una vez realizada la operación de configuración, el programa debería automáticamente reconocer la existencia del grabador de PIC, junto con el PICF452 (que debe estar puesto en el grabador). Ahora se debe buscar el archivo con la extensión “.hex” en el lugar determinado por el software anterior. Para esto se hace clic en la opción “Archivo”, subopción “Abrir” y desde ahí buscar el archivo correspondiente, el archivo posee el mismo nombre que se le asignó anteriormente.

16

 

Rubén Bravo Brach

 

Universidad Mayor 

Aquí las instrucciones que anteriormente se habían escrito en lenguaje C, ahora aparecen escritas en forma hexadecimal. FIGURA 2.12 OPCIONES DE MANEJO DEL PIC

Botones “Leer”,”Grabar”,” “Leer”,”Grabar”,”Verificar”,”Borra Verificar”,”Borrar” r”

Las funciones de “Leer”, “Grabar”, “Verificar” o “Borrar” el contenido del PIC, se realizan con una serie de botones ubicados en la barra de herramientas junto al indicador del “tipo de microcontrolador y fabricante”. Ahora se puede ejecutar estas opciones con el código creado según el respectivo proyecto.

17

 

Rubén Bravo Brach

3.

 

Universidad Mayor 

PICBOARD.

Esta es una tarjeta de entrenamiento que viene como parte del Kit de desarrollo del PIC, se hablará en términos generales sobre ésta, ya que el detalle se puede encontrar en el manual que viene en el CD. FIGURA 3.1 “ESQUEMA DEL PICBOARD” 

3.1 Características Generales. - Al Puerto B están conectados los LED, también el conector de tteclado eclado 4x4. - Posee un Dipswitch de 10 posiciones y otro de seis posiciones. El primero se usa en micros de 40/28 PINES y el otro en micros de 18/8 PINES. - Para el display, se deben usar los puertos D y E, siendo los primeros para datos y los segundos para control del mismo. (Esta función sólo está contemplada para micros de 40 PINES).

18

 

Rubén Bravo Brach

4.

 

Universidad Mayor 

TECLADO.

El teclado usado en el proyecto, fue un teclado multiplexado de 4x4, como el de la figura: FIG Nº 4.1 TECLADO MULTIPLEXADO

1

2

3

F1 F1

4

5

6

F2 F2

7

8

9

F3 F3

*

0

#

F4 F4

 

F1F2 F3 F4C1C2C3C4

Donde

F: filas C: columnas

La forma de operar de este teclado es en generar un corto-circuito al momento de presionar una tecla, ya que cada una de éstas es un pulsador. Lógicamente el funcionamiento se puede describir según la siguiente figura: FIGURA Nº 4.2 FUNCIONAMIENTO TECLADO MULTIPLEX MULTIPLEXADO ADO

19

 

Rubén Bravo Brach

 

Universidad Mayor 

Nota: a las columnas se le recomienda agregar resistencias que garanticen la existencia de voltaje que lleguen a las entradas del PIC. Las resistencias que ahí se muestran son para regular la corriente y sirven de protección. Si tomamos las filas como referencia, dependerá de las columnas que se activen para deducir qué tecla fue presionada. Por ejemplo, si presionamos la tecla “1”, un pulso será enviado desde la “F1” y saldrá por “C1”, de acuerdo con la Figura 4.1. Si tomamos la Figura 4.2, y consideramos el mismo ejemplo, al oprimir “1”, el pulso entrará por la “fila 1” y saldrá por la “columna 5”.

5.

DISPLAY.

El display usado dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una matriz de 5x7 puntos (pixels). FIGURA 5.1 DISPLAY 2 x 16

Este dispositivo esta gobernado internamente por un microcontrolador Hitachi 44780 y regula todos los parámetros de presentación, este modelo es el mas comúnmente usado y esta información se basará en el manejo de este u otro LCD compatible. Para más detalle del funcionamiento del LCD, remitirse a un manual del mismo que hay en el pañol.

20

 

Rubén Bravo Brach

5.1

 

Universidad Mayor 

Características.

- Pantalla de caracteres ASCII, además de los caracteres Kanji y Griegos. - Desplazamiento de los caracteres hacia la izquierda o la derecha. - Proporciona la dirección de la posición absoluta o relativa del caracter. - Memoria de 40 caracteres por línea de pantalla. - Movimiento del cursor y cambio de su aspecto. - Permite que el usuario pueda programar 8 caracteres. - Conexión a un procesador usando un interfaz de 4 u 8 bits Extracto de http://www.x-robotics.com http://www.x-robotics.com/rutinas.htm#LCD /rutinas.htm#LCD

5.2

Descripción de pines.  1 

Vss 

Tierra de alimentación GND 



Vdd 

Alimentación de +5V CC 



Vo 

Contraste del cristal liquido. ( 0 a +5V )  Selección del registro de control/registro de datos:



RS 

RS=0 Selección registro de control  RS=1 Selección registro de datos  Señal de lectura/escritura: 



R/W 

R/W=0 Escritura (Write)  R/W=1 Lectura (Read) 



Habilitación del modulo:  E=0 Módulo desconectado 



E=1 Módulo conectado  7-14 

D0-D7 

Bus de datos bidireccional. 

Extracto de http://www.x-robotics.com http://www.x-robotics.com/rutinas.htm#LCD /rutinas.htm#LCD

El LCD tiene un aspecto físico como el mostrado en la Figura 5.2. Está constituido por un circuito impreso en el que están integrados los controladores del display y los pines para la conexión del display. Sobre el circuito impreso se encuentra el LCD en sí, rodeado por una estructura metálica que lo protege. En total se pueden visualizar

21

 

Rubén Bravo Brach

 

Universidad Mayor 

2 líneas de 16 caracteres cada una, es decir, 2x16=32 caracteres, como se muestra en la Figura 5.3. A pesar de que el display sólo puede visualizar 16 caracteres por línea, puede almacenar en total 40 por línea. Es el usuario el que especifica qué 16 caracteres son los que se van a visualizar. FIGURA 5.2

FIGURA 5.3

El cableado entre el LCD y el PIC puede ser de varias formas, variando la cantidad de bits que se usan para los datos, estos pueden ser según las siguientes opciones:

22

 

Rubén Bravo Brach

5.3.

 

Universidad Mayor 

Encendido del LCD.

Antes de que aparezca cualquier cosa en la pantalla LCD, debe ser inicializada; esto significa, enviar códigos de bits por medio del PIC que indiquen la forma de trabajo de éste, o sea “setear” la características que se utilizarán del LCD, como que aparezca el cursor, mover los datos de izquierda o derecha, etc. Internamente el LCD cuenta con un microcontrolador que transforma los datos enviados del PIC, para desplegarlos en pantalla. Recordemos que por defecto los pines que están conectados al PIC en el PICBOARD son los del Puerto E para control y Puerto D para datos, la forma de inicializar la pantalla. Para inicializar el LCD, hay dos caminos a seguir, el primero es usar las funciones propias del software de programación PIC-C Compiler (se recomienda), o bien usar

23

 

Rubén Bravo Brach

 

Universidad Mayor 

las instrucciones adjuntas en el manual del LCD. Se prefiere usar la primera, debido a la simplicidad en el manejo de las funciones. De cualquier forma, nos referiremos a las dos opciones.

5.3.1 Usando Funciones del PIC – C Compiler. La librería  contiene los códigos de inicialización y otras funciones del LCD, como mostrar datos en pantalla, manipular la posición del cursor, etc. Pero el cableado entre el PIC y el display debe ser el que está predeterminado por las funciones, esto es usar el puerto D, pero sólo se usan los 3 de control y 4 de datos, por lo que el pin D3 no será usado.

PIN DISPLAY D0

PIN PIC ENABLE

D1

RS

D2

R/W

D4

D4

D5

D5

D6

D6

D7

D7

 

Para inicializar el LCD, basta con escribir en el programa, lcd_init().

5.3.2 Usando Funciones del Manual del LCD. Para esto se recomienda usar los 8 bits para datos de cualquier puerto y usar el los 3 pines del puerto E como control, ya que como se mostró anteriormente, para usar 4 bits de datos, hay que multiplexar la información y el programa tiende a ponerse más complejo, por ende, si no se tiene la habilidad necesaria de programación es mejor usar los 8 bits de datos. En los bits de datos, hay que generar un código para inicializar el LCD, el que se da a continuación:

24

 

Rubén Bravo Brach

-

 

Universidad Mayor 

CLEAR DISPLAY: 

Borra el módulo LCD y coloca el cursor en la primera posición (dirección 0). Pone el bit I/D a 1 por defecto. RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

0

0

1

Tiempo de ejecución: 1.64mS

-

HOME: 

Coloca el cursor en la posición de inicio (dirección 0) y hace que el display comience a desplazarse desde la posición original. El contenido de la memoria RAM de datos de visualización (DD RAM) permanece invariable. La dirección de la memoria RAM de datos para la visualización (DD RAM) es puesta a 0. RS 0

R/W 0

DB7 0

DB6 0

DB5 0

DB4 0

DB3 0

DB2 0

DB1 1

DB0 X

Tiempo de ejecución: 1.64mS

-

ENTRY MODE SET:

Establece la dirección de movimiento del cursor y especifica si la visualización se va desplazando a la siguiente posición de la pantalla o no. Estas operaciones se ejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit S=0. RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

1

I/D

S

Tiempo de ejecución: 40µS

-

DISPLAY ON/OFF CONTROL:

Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y se establece si este último debe o no parpadear (B). RS

R/W

DB7

DB6

0

0

0

0

DB5

DB4

DB3

DB2

DB1

DB0

0

0

1

D

C

B

Tiempo de ejecución: 40µS

25

 

Rubén Bravo Brach

-

 

Universidad Mayor 

CURSOR OR DISPLAY SHIFT:

Mueve el cursor y desplaza el display sin cambiar el contenido de la memoria de datos de visualización DD RAM.  RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

1

S/C

R/L

X

X

Tiempo de ejecución: 40µS

-

FUNCTION SET:

Establece el tamaño de interfase con el bus de datos (DL), número de líneas del display (N) y tipo de carácter (F) RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

1

DL

N

F

X

X

Tiempo de ejecución: 40µS

-

SET THE CG RAM ADDRESS:

El módulo LCD además de tener definidos todo el conjunto de caracteres ASCII, permite al usuario definir 4 u 8 caracteres gráficos. La composición de estos caracteres se va guardando en una memoria llamada CG RAM con capacidad para 64 bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 8 bytes que se almacenan en sucesivas posiciones de la CG RAM. Mediante esta instrucción se establece la dirección de memoria CG RAM a partir de la cual se irán almacenando los bytes que definen un carácter gráfico. Ejecutando este comando todos los datos que se lean o escriban posteriormente, lo hacen desde esta memoria CG RAM. RS

R/W

DB7

DB6

0

0

0

1

DB5

DB4

DB3

DB2

DB1

DB0

Dirección de la CG RAM Tiempo de ejecución: 40µS

26

 

Rubén Bravo Brach

-

 

Universidad Mayor 

SET THE DD RAM ADDRESS:

Los caracteres o datos que se van visualizando, se van almacenando en una memoria llamada DD RAM para de aquí pasar a la pantalla. Mediante esta instrucción se establece la dirección de la memoria DD RAM a partir de la cual se irán almacenando los datos a visualizar. Ejecutando este comando, todos los datos que se escriban o lean posteriormente lo harán desde esta memoria DD RAM. Las direcciones de la 80h a la 8Fh corresponden con los 16 caracteres del primer renglón y de la C0h a la CFh con los 16 caracteres del segundo renglón, para este modelo de LCD. RS

R/W

DB7

DB6

DB5

DB4

DB3

0

0

1

Dirección de la DD RAM

DB2

DB1

DB0

Tiempo de ejecución: 40µS

-

READ BUSY FLAG & ADDRESS:

Cuando el modulo LCD esta ejecutando cualquiera de estas instrucciones, tarda un cierto tiempo de ejecución en el que no se debe mandar ninguna instrucción. Para ello dispone de un flag llamado BUSY (ocupado) que indica que se está ejecutando una instrucción previa. Esta instrucción de lectura informa del estado de dicho flag además de proporcionar el valor del contador de direcciones de la CG RAM o de la DD RAM según la última que se haya empleado. RS

R/W

DB7

0

1

BF

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Dirección de la CG RAM o DD RAM Tiempo de ejecución: 40µS

27

 

Rubén Bravo Brach

-

 

Universidad Mayor 

WRITE DATA TO GG DD RAM:

Mediante este comando se escribe en la memoria DD RAM los datos que se quieren presentar en pantalla y que serán los diferentes códigos ASCII de los caracteres a visualizar. Igualmente se escribe en la memoria CG RAM los diferentes bytes que permiten confeccionar caracteres gráficos a gusto del usuario. El escribir en uno u otro tipo de memoria depende de si se ha empleado previamente la instrucción de direccionamiento DD RAM o la de direccionamiento CG RAM. RS

R/W

1

0

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Código ASCII o byte del carácter gráfico Tiempo de ejecución: 40µS

-

READ DATA FROM CG RAM OR DD RAM: 

Mediante este comando se lee de la memoria DD RAM los datos que haya almacenados y que serán los códigos ASCII de los caracteres almacenados. Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha confeccionado un determinado carácter gráfico. El leer de uno u otro tipo de memoria depende de si se ha empleado previamente la instrucción de direccionamiento de la DD RAM o la de direccionamiento CG RAM. RS

R/W

1

1

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Código ASCII o byte del carácter gráfico Tiempo de ejecución: 40µS

28

 

Rubén Bravo Brach

 

Universidad Mayor 

5.3.3 Funciones Más Usadas. El detalle de las funciones del LCD se puede ver abriendo el archivo en la ubicación: C:\Archivos de programa\PICC\Drivers\LCD Ahí se pueden ver, además, los parámetros y modificarlos si se estima conveniente.

5.3.3.1

lcd_init().

Inicializa el LCD, hay que usar los pines del puerto D, descrito en anteriormente en punto 5.3.1.

El esquema en C de esta función es el siguiente: void lcd_init() { BYTE i; set_tris_lcd(LCD_WRITE); lcd.rs = 0; lcd.rw = 0; lcd.enable = 0; delay_ms(15); for(i=1;i 166 [mseg]



  8 -> 333 [mseg]



  16 -> 666 [mseg]



  32 -> 1.33 [seg]



  64 -> 2.66 [seg]



  128 -> 5.33 [seg]



  256 -> 10.66 10.66 [seg] ----->al máximo preescaler posible.



Se advierte que los tiempos fueron obtenidos de forma empírica mediante reiteradas pruebas. Por ende hay que considerar un margen de error en los mismos.

32

 

Rubén Bravo Brach

Universidad Mayor 

 

Las interrupciones se activan en el programa principal mediante la siguiente forma: setup_counters(RTCC_INTERNAL,R setup_counters (RTCC_INTERNAL,RTCC_DIV_2); TCC_DIV_2); // TIMER0: Clock Interno, Presescaler 2 setup_timer_1(T1_DISABLED); setup_timer_1( T1_DISABLED);

// para un RTCC de 33.3 milisegundos

setup_timer_2(T2_DISABLED,0,1) setup_timer_2( T2_DISABLED,0,1); ;

// -> 1 Segundo = 7 RTCC

enable_interrupts(INT_RTCC); enable_interru pts(INT_RTCC);

// Habilito Interrupción RTCC

enable_interrupts(global); enable_interru pts(global);

// Habilito Interrupciones

33

 

Rubén Bravo Brach

Universidad Mayor 

 

ANEXOS

34

 

Rubén Bravo Brach

1.

 

Universidad Mayor 

Programa para hacer que desde un teclado multiplexado de 4x4 se ingrese la hora, mostrarla en un display LCD y también para que un LED (PIN B1) se encienda y se apague a una hora determinada por usuario.

#include

// Selecciona el PIC

#fuses XT,NOWDT,NOPROTECT

// Opciones de configuración

#use delay(clock=4000000)

// Velocidad del Cristal : 4 Mhz

#include byte const NInts=6;

// Numero de interrupciones para 1 Segundo

// VARIABLES GLOBALES char C_Ints=0;

// Contador de Interrupciones ocurridas

char Flag=0;

// Flag que cambia cada NInts interrupciones

#int_RTCC

// Interrupción por desbordamiento

RTCC_isr()

// del TIMER0 RTCC

{ if(C_Ints > NInts) {

// Si las ints ocurridas > ints para 1 Seg.

if(Flag==0) { Flag=1; } else { Flag=0; } C_Ints=0;

// Reinicializo Contador de Ints

} ++C_Ints;

// Incremento el número de interrupciones

}

// Ocurridas

teclado()

// Lee un teclado multiplexado de 4x4

{ int x; lcd_gotoxy(1,2); teclado: x=1; while(x24) { goto r; } printf(lcd_putc,"%d SI F3,NO F4",c); q=teclado(); } lcd_putc("\f"); q=101; while(q==101) { p : lcd_putc("\fIngrese minutos"); lcd_gotoxy(1,2); b=teclado()*10; b=teclado()+b; if(b>60)

38

 

Rubén Bravo Brach

Universidad Mayor 

 

{ goto p; } printf(lcd_putc,"%d SI F3,NO F4",b); q=teclado(); } lcd_putc("\f"); q=101; while(q==101)

//encendido LED

{ o : lcd_putc("\fEncendido LED(hora)"); lcd_gotoxy(1,2); d=teclado()*10; d=teclado()+d; if(d>24) { goto o; } printf(lcd_putc,"%d SI F3,NO F4",d); q=teclado(); } lcd_putc("\f"); q=101; while(q==101) { t : lcd_putc("\fEncendido LEC(min)"); lcd_gotoxy(1,2); e=teclado()*10; e= teclado()+e; if(e>60) { goto t; } printf(lcd_putc,"%d SI F3,NO F4",e); q=teclado(); } lcd_putc("\f"); q=101; while(q==101)

//apagado LED

{ m : lcd_putc("\fApagado LED(hora)");

39

 

Rubén Bravo Brach

 

Universidad Mayor 

lcd_gotoxy(1,2); f=teclado()*10; f=teclado()+f; if(f>24) { goto m; } printf(lcd_putc,"%d SI F3,NO F4",f); q=teclado(); } lcd_putc("\f"); q=101; while(q==101) { n : lcd_putc("\fApagado LED(min)"); lcd_gotoxy(1,2); g=teclado()*10; g=teclado()+g; if(g>60) { goto n; } printf(lcd_putc,"%d SI F3,NO F4",g); q=teclado(); } output_b(0x0); setup_counters(RTCC_INTERNAL,RTCC_DIV_2); setup_counters(RTCC_INTER NAL,RTCC_DIV_2); setup_timer_1(T1_DISABLED); setup_timer_1(T1_DISABLED );

// TIMER0: Clock Interno,Presescaler 2 // para una RTCC cada 83 milisegundos

setup_timer_2(T2_DISABLED,0,1); setup_timer_2(T2_DISABLED ,0,1);

// -> 1 Segundo = 6 RTCC

enable_interrupts(INT_RTCC); enable_interrupts(INT_RTCC); enable_interrupts(global); enable_interrupts(global) ;

// Habilito Interrupción RTCC // Habilito Interrupciones

lcd_putc("\f"); lcd_putc("Contando..."); do

// Bucle infinito

{ if(Flag==k) { } else {

// si ha cambiado Flag printf(lcd_putc,"\n%d :%d :%d",c,b,a);

// muestra el reloj

if(a==60)

40

 

Rubén Bravo Brach

Universidad Mayor 

 

{ a=0; lcd_putc("\fContando..."); printf(lcd_putc,"\n%d :%d :%d",c,b,a); b++; if(b==60) { a=0; b=0; lcd_putc("\fContando..."); printf(lcd_putc,"\n%d :%d :%d",c,b,a); c++; if(c==24) { a=0; b=0; c=0; lcd_putc("\fContando..."); printf(lcd_putc,"\n%d :%d :%d",c,b,a); } } } a++; if((b==e)&&(c==d)) { output_high(PIN_B1); } if((b==g)&&(c==f)) { output_low(PIN_B1); } k=Flag;

// Guardo estado anterior de Flag

} }while(true); }

41

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF