Programación pic 18 f452

2,153
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,153
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
90
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Programación pic 18 f452

  1. 1. UNIVERSIDAD MAYOR FACULTAD DE INGENIERIA ESCUELA DE ELECTRONICA Y TELECOMUNICACIONES “PROGRAMACION MICROCONTROLADOR PIC18F452 USANDO KIT DE DESARROLLO MICROCHIP” DISEÑO E IMPLEMENTACION DE SISTEMAS DIGITALES Rubén Bravo SANTIAGO – CHILE Diciembre 2006
  2. 2. Rubén Bravo Brach Universidad Mayor INDICEIntroducción. 21. Microcontrolador PICF452. 3 1.1 Características Técnicas. 3 1.2 Características Periféricas. 32. 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. 8 2.2.2 Estructura C – Assembler. 11 2.3 WinPic 800. 12 2.3.1 Configurando el programador. 12 2.3.2 Extrayendo – Ingresando datos al PIC. 163. Picboard. 18 3.1 Características Generales. 184. Teclado. 195. 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(). 306. Temporizador. 31 6.1 Interrupciones. 32Anexos 34 2
  3. 3. Rubén Bravo Brach Universidad Mayor INTRODUCCIONDentro 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 losmicrocontroladores PIC, específicamente el PIC18F452, el cual se usó para crear unsistema de alarma, que tuviera características varias, como un display, en el cual elusuario pudiera seleccionar distintas opciones desde un teclado multiplexado, comoasignar 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 unmanual que fuese en ayuda de los futuros alumnos del ramo, como también de todosaquellos 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 elalumno aprenda los conocimientos básicos y sea capaz de realizar proyectos usandolas capacidades de estos microcontroladores.De más esta decir que cualquier contribución a este manual, será bienvenida yagradecida.También quisiera agradecer a Osvaldo Rodríguez Toro y al profesor de la asignaturaSr. Gustavo Meyer, por la ayuda y consejos otorgados durante el semestre parapoder usar el microcontrolador. 3
  4. 4. Rubén Bravo Brach Universidad Mayor1. EL MICROCONTROLADOR PICF452.Este integrado de la familia PIC, forma parte de los circuitos integrados de MicrochipTechnology Inc., que pertenece a la categoría de los microcontroladores. Presentacaracterísticas muy versátiles que le permiten aplicaciones en un gran número devariedades.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 CDdel Kit de desarrollo. FIGURA 1.1 DIAGRAMA DE PINES 4
  5. 5. Rubén Bravo Brach Universidad Mayor FIGURA Nº 1.2 DIAGRAMA EN BLOQUES DEL PIC18F452 5
  6. 6. Rubén Bravo Brach Universidad Mayor2. PROGRAMACIÓN DEL PIC.El Kit de desarrollo trae un software llamado “Mplab” en el cual se puede hacer laprogramación el PIC; en primera instancia se puede hacer directamente en lenguajeassembler usando el set de instrucciones propio del microcontrolador (adjunto en eldata sheet), pero la dificultad de hacerlo puede ser un tanto grande, sobretodo si nose 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áshabituado, otra razón para programar en C, es que éste es un lenguaje de mayornivel; lo que implica que no es necesario tener que adaptarse a los distintos tipos demicrocontroladores. No como lo que ocurre en assembler, como este es un programade bajo nivel, implica que cada chip tiene su propio set de instrucciones y por endehay que adaptarse a cada uno.Pero aparecen otras dificultades; como el procedimiento del Mplab de aceptar laescritura 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áginahttp://www.pablin.com.ar/; en donde además, hay varios otras opciones e informaciónsobre microcontroladores e interesantes temas relacionados con electrónica. 6
  7. 7. 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.pablin.com.ar/electron/circuito/mc/ppp2/index.htmNotar que las terminales con los números, corresponden a los pines del puertoparalelo (impresora), se recomienda respetar el orden de los mismos propuestos en 7
  8. 8. Rubén Bravo Brach Universidad Mayorel esquema (más adelante se explicará el por qué). También este programador escompatible 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 delesquema 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 deprogramació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 loszócalos estando este indicador apagado.Esto ocurre debido a que desde el PIN 6 llega una pequeña corriente a la base deltransistor; lo que hace que éste, del estado saturación pase a corte y deje fluir toda lacorriente 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 fuepensado para aquellas situaciones en que el cable es demasiado largo y la señaltiende a atenuarse o a presentar ruido. 8
  9. 9. Rubén Bravo Brach Universidad Mayor2.2 PCI - C Compiler.En éste software es posible programar el PIC usando instrucciones de lenguaje C, esun 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 parapoder ejecutar otro software (se verá más adelante) que crea las instrucciones enassembler.2.2.1 Programando en C.En la opción “File”, se debe buscar la subopción “New”, en donde aparecerá unapantalla 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. 9
  10. 10. Rubén Bravo Brach Universidad MayorLo primero que hay que declarar son las librerías necesarias y las características quese usarán.#include <18f452.h>#fuses XT,NOWDT,NOPROTECT#use delay(clock=4000000) • En la primera, se declara la librería del integrado 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 directiva indica al compilador la frecuencia del procesador, en ciclos por segundo [Hz]. FIGURA 2.4 “EJEMPLO DE PROGRAMACIÓN” 10
  11. 11. Rubén Bravo Brach Universidad MayorPara compilar se debe ir a la opción “Compile” o bien apretar F9, si no hay errordebería salir el siguiente mensaje: FIGURA 2.5 CUADRO DE COMPILACIONEl 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 derechoen la pestaña que tiene el nombre del proyecto y luego seleccionar la opción “Makefile 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 11
  12. 12. Rubén Bravo Brach Universidad MayorSi hay interés de ver la estructura assembler del programa realizado, se debe revisarel 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, sedebe 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 lenguajeC, 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 12
  13. 13. Rubén Bravo Brach Universidad Mayor2.3 WINPIC 800.Este es un software que permite grabar el PIC usando el grabador de PIC que seimplementó con anterioridad.2.3.1 Configurando el grabador.Es necesario configurar el grabador en el software para que reconozca la existenciade éste y sus capacidades. Se debe hacer click en la opción “Configuración” y luegoen la subopción “Hardware”. FIGURA 2.7 VENTANA PRINCIPAL WINPIC 800 13
  14. 14. 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 CONFIGURACIONOprimir para acceder a cuadro de opciones Permite habilitar las casillas 14
  15. 15. Rubén Bravo Brach Universidad MayorAhora para ajustar los parámetros se debe tener en mente el siguiente esquema delconector 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 25En donde el PIN 1 es “Strobe”, los PINES 2 al 9 son de datos (los cuales forman 1Byte), el 10 es “ACK” y el 25 corresponde a “GND”. El resto de los PINES no esimportante mencionarlo para efectos de este ejemplo, por lo que se deja alinteresado en buscar la informaciónSi se siguió el orden de los pines propuestos en el ejemplo de implementación delgrabador será más simple configurarlo.Si recordamos el circuito: - Vcc (alimentación PIC), está asociado al PIN 6, que según el esquema del conector equivale al “bit 4”. - “Scl” (Frec. Reloj) 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 bitasociado. Nombre Bit PIN P. Paralelo Data 0 2 Data In ACK 10 Clock 1 3 Vpp 4 6 15
  16. 16. Rubén Bravo Brach Universidad MayorLa configuración debe quedar así: FIGURA 2.10 AJUSTANDO PARAMETROS DEL GRABADORNota: la casilla que se encuentra habilitada junto a Vpp debe quedar con el clicpuesto, ya que de ésta forma el LED nombrado como “PIC” queda encendido cuandono hay voltaje de programación.Así deben quedar las distintas casillas del recuadro de opciones, no olvidar oprimir elbotón “Confirmar cambios”.Una vez hecho esto, se recomienda hacer la siguiente operación antes de comenzara 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 elnombre del PIC usado. 16
  17. 17. 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 PICBotón “Detectar dispositivo” Debe salir el nombre del PIC utilizado2.3.2 Extrayendo – Ingresando datos al PIC.Una vez realizada la operación de configuración, el programa deberíaautomá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 porel software anterior. Para esto se hace clic en la opción “Archivo”, subopción “Abrir” ydesde ahí buscar el archivo correspondiente, el archivo posee el mismo nombre quese le asignó anteriormente. 17
  18. 18. Rubén Bravo Brach Universidad MayorAquí las instrucciones que anteriormente se habían escrito en lenguaje C, ahoraaparecen escritas en forma hexadecimal. FIGURA 2.12 OPCIONES DE MANEJO DEL PIC Botones “Leer”,”Grabar”,”Verificar”,”Borrar”Las funciones de “Leer”, “Grabar”, “Verificar” o “Borrar” el contenido del PIC, serealizan con una serie de botones ubicados en la barra de herramientas junto alindicador del “tipo de microcontrolador y fabricante”.Ahora se puede ejecutar estas opciones con el código creado según el respectivoproyecto. 18
  19. 19. Rubén Bravo Brach Universidad Mayor3. PICBOARD.Esta es una tarjeta de entrenamiento que viene como parte del Kit de desarrollo delPIC, se hablará en términos generales sobre ésta, ya que el detalle se puedeencontrar 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 teclado 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). 19
  20. 20. Rubén Bravo Brach Universidad Mayor4. TECLADO.El teclado usado en el proyecto, fue un teclado multiplexado de 4x4, como el de lafigura: FIG Nº 4.1 TECLADO MULTIPLEXADO 1 2 3 F1 4 5 6 F2 7 8 9 F3 * 0 # F4 F1F2 F3 F4C1C2C3C4Donde F: filas C: columnasLa forma de operar de este teclado es en generar un corto-circuito al momento depresionar una tecla, ya que cada una de éstas es un pulsador. Lógicamente elfuncionamiento se puede describir según la siguiente figura: FIGURA Nº 4.2 FUNCIONAMIENTO TECLADO MULTIPLEXADO 20
  21. 21. Rubén Bravo Brach Universidad MayorNota: a las columnas se le recomienda agregar resistencias que garanticen laexistencia de voltaje que lleguen a las entradas del PIC. Las resistencias que ahí semuestran son para regular la corriente y sirven de protección.Si tomamos las filas como referencia, dependerá de las columnas que se activenpara 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 elmismo ejemplo, al oprimir “1”, el pulso entrará por la “fila 1” y saldrá por la “columna5”.5. DISPLAY.El display usado dispone de 2 filas de 16 caracteres cada una y cada carácterdispone de una matriz de 5x7 puntos (pixels). FIGURA 5.1 DISPLAY 2 x 16Este dispositivo esta gobernado internamente por un microcontrolador Hitachi 44780y regula todos los parámetros de presentación, este modelo es el mas comúnmenteusado 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 quehay en el pañol. 21
  22. 22. Rubén Bravo Brach Universidad Mayor5.1 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/rutinas.htm#LCD5.2 Descripción de pines. 1 Vss Tierra de alimentación GND 2 Vdd Alimentación de +5V CC 3 Vo Contraste del cristal liquido. ( 0 a +5V ) Selección del registro de control/registro de datos: 4 RS RS=0 Selección registro de control RS=1 Selección registro de datos Señal de lectura/escritura: 5 R/W R/W=0 Escritura (Write) R/W=1 Lectura (Read) Habilitación del modulo: 6 E 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/rutinas.htm#LCDEl LCD tiene un aspecto físico como el mostrado en la Figura 5.2. Está constituidopor un circuito impreso en el que están integrados los controladores del display y lospines para la conexión del display. Sobre el circuito impreso se encuentra el LCD ensí, rodeado por una estructura metálica que lo protege. En total se pueden visualizar2 líneas de 16 caracteres cada una, es decir, 2x16=32 caracteres, como se muestraen la Figura 5.3. A pesar de que el display sólo puede visualizar 16 caracteres por 22
  23. 23. Rubén Bravo Brach Universidad Mayorlínea, puede almacenar en total 40 por línea. Es el usuario el que especifica qué 16caracteres son los que se van a visualizar. FIGURA 5.2 FIGURA 5.3El cableado entre el LCD y el PIC puede ser de varias formas, variando la cantidadde bits que se usan para los datos, estos pueden ser según las siguientes opciones: 23
  24. 24. Rubén Bravo Brach Universidad Mayor5.3. Encendido del LCD.Antes de que aparezca cualquier cosa en la pantalla LCD, debe ser inicializada; estosignifica, enviar códigos de bits por medio del PIC que indiquen la forma de trabajode éste, o sea “setear” la características que se utilizarán del LCD, como queaparezca el cursor, mover los datos de izquierda o derecha, etc.Internamente el LCD cuenta con un microcontrolador que transforma los datosenviados del PIC, para desplegarlos en pantalla.Recordemos que por defecto los pines que están conectados al PIC en elPICBOARD son los del Puerto E para control y Puerto D para datos, la forma deinicializar la pantalla.Para inicializar el LCD, hay dos caminos a seguir, el primero es usar las funcionespropias del software de programación PIC-C Compiler (se recomienda), o bien usar 24
  25. 25. Rubén Bravo Brach Universidad Mayorlas instrucciones adjuntas en el manual del LCD. Se prefiere usar la primera, debidoa la simplicidad en el manejo de las funciones. De cualquier forma, nos referiremos alas dos opciones.5.3.1 Usando Funciones del PIC – C Compiler.La librería <lcd.c> 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 porlas funciones, esto es usar el puerto D, pero sólo se usan los 3 de control y 4 dedatos, por lo que el pin D3 no será usado. PIN DISPLAY PIN PIC D0 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 3pines del puerto E como control, ya que como se mostró anteriormente, para usar 4bits de datos, hay que multiplexar la información y el programa tiende a ponerse máscomplejo, por ende, si no se tiene la habilidad necesaria de programación es mejorusar los 8 bits de datos.En los bits de datos, hay que generar un código para inicializar el LCD, el que se daa continuación: 25
  26. 26. 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 elbit 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 comiencea desplazarse desde la posición original. El contenido de la memoria RAM de datosde visualización (DD RAM) permanece invariable. La dirección de la memoria RAMde datos para la visualización (DD RAM) es puesta a 0. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 0 0 1 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 vadesplazando a la siguiente posición de la pantalla o no. Estas operaciones seejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizarnormalmente 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 seestablece si este último debe o no parpadear (B). RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 D C B Tiempo de ejecución: 40µS- CURSOR OR DISPLAY SHIFT: 26
  27. 27. Rubén Bravo Brach Universidad MayorMueve el cursor y desplaza el display sin cambiar el contenido de la memoria dedatos 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 deldisplay (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 estoscaracteres se va guardando en una memoria llamada CG RAM con capacidad para64 bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 8 bytesque se almacenan en sucesivas posiciones de la CG RAM.Mediante esta instrucción se establece la dirección de memoria CG RAM a partir dela cual se irán almacenando los bytes que definen un carácter gráfico. Ejecutandoeste comando todos los datos que se lean o escriban posteriormente, lo hacen desdeesta memoria CG RAM. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 Dirección de la CG RAM Tiempo de ejecución: 40µS- SET THE DD RAM ADDRESS: 27
  28. 28. Rubén Bravo Brach Universidad MayorLos caracteres o datos que se van visualizando, se van almacenando en unamemoria 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 partirde 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 memoriaDD RAM. Las direcciones de la 80h a la 8Fh corresponden con los 16 caracteres delprimer renglón y de la C0h a la CFh con los 16 caracteres del segundo renglón, paraeste modelo de LCD. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 Dirección de la DD RAM Tiempo de ejecución: 40µS- READ BUSY FLAG & ADDRESS:Cuando el modulo LCD esta ejecutando cualquiera de estas instrucciones, tarda uncierto tiempo de ejecución en el que no se debe mandar ninguna instrucción. Paraello dispone de un flag llamado BUSY (ocupado) que indica que se está ejecutandouna instrucción previa.Esta instrucción de lectura informa del estado de dicho flag además de proporcionarel valor del contador de direcciones de la CG RAM o de la DD RAM según la últimaque se haya empleado. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 BF Dirección de la CG RAM o DD RAM Tiempo de ejecución: 40µS- WRITE DATA TO GG DD RAM: 28
  29. 29. Rubén Bravo Brach Universidad MayorMediante este comando se escribe en la memoria DD RAM los datos que se quierenpresentar en pantalla y que serán los diferentes códigos ASCII de los caracteres avisualizar.Igualmente se escribe en la memoria CG RAM los diferentes bytes que permitenconfeccionar caracteres gráficos a gusto del usuario.El escribir en uno u otro tipo de memoria depende de si se ha empleado previamentela instrucción de direccionamiento DD RAM o la de direccionamiento CG RAM. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 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 hayaalmacenados 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 haconfeccionado un determinado carácter gráfico.El leer de uno u otro tipo de memoria depende de si se ha empleado previamente lainstrucción de direccionamiento de la DD RAM o la de direccionamiento CG RAM. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 1 Código ASCII o byte del carácter gráfico Tiempo de ejecución: 40µS5.3.3 Funciones Más Usadas. 29
  30. 30. Rubén Bravo Brach Universidad MayorEl detalle de las funciones del LCD se puede ver abriendo el archivo en la ubicación: C:Archivos de programaPICCDriversLCDAhí 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 enpunto 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<=3;++i) { lcd_send_nibble(3); delay_ms(5); } lcd_send_nibble(2); for(i=0;i<=3;++i) lcd_send_byte(0,LCD_INIT_STRING[i]);}5.3.3.2 lcd_gotoxy(y,x). 30
  31. 31. Rubén Bravo Brach Universidad MayorEsta función pone el cursor en la posición deseada, esto es en la fila (Y), columna(X).void lcd_gotoxy( BYTE x, BYTE y){BYTE address;if(y!=1) address=lcd_line_two;else address=0; address+=x-1; lcd_send_byte(0,0x80|address);}5.3.3.3 lcd_putc().Muestra datos en el display, su función es análoga al printf() usado en programaciónconvencional de C.Para mostrar caracteres hay que ponerlos entre comillas Ej. lcd_putc(“TEXTO”);Para mostrar números hay que agregarle la función printf() de la siguiente forma: Ej. printf(lcd_putc,”%d”,variable);Si a esta función se le agregan los siguientes prefijos, como los siguientes, causanlos siguientes efectos: 31
  32. 32. Rubén Bravo Brach Universidad Mayor f Borra el display. n Va al inicio de la 2º línea. b Retrocede una posición.El detalle de ésta función se muestra aquí:void lcd_putc( char c){ switch (c) { case f : lcd_send_byte(0,1); delay_ms(2); break; case n : lcd_gotoxy(1,2); break; case b : lcd_send_byte(0,0x10); break; default : lcd_send_byte(1,c); break; }}6. TIMER.Esta característica de reloj se logra a través de interrupciones, ya que se le asociauna variable que cuenta un número determinado de interrupciones y éstas puedenser tales que calcen en 1 segundo, de esta forma se logra simular un reloj con el PIC,se refiere a simulación, porque siempre habrá un pequeño error en los segundos.Dependiendo de la forma de hacer el cálculo, se puede minimizar, pero siemprehabrá un error.6.1 Interrupciones. 32
  33. 33. Rubén Bravo Brach Universidad MayorEl PIC posee varios métodos y tipos de interrupciones, aquí se hablará de la RTTC,que usa el TIMER_0, ésta es una interrupción por desbordamiento, la cual es muyútil para desarrollar un reloj. Para más detalles sobre ésta y otras, remitirse al datasheet del integrado.Forma de uso:La interrupción RTCC se produce cada vez que el contador TIMER0 pasa de FFh a00h en 8 bits o bien de FFFh a 000h en 16 bits.El TIMER0 hace un cómputo completo de 00h a FFh cada 0.083ms, sin embargoeste tiempo puede ser cambiado mediante un preescaler o sea un divisor, ajustable.Los tiempos generados para cada configuración son:• 2 -> 83 [mseg] al mínimo preescaler posible.• 4 -> 166 [mseg]• 8 -> 333 [mseg]• 16 -> 666 [mseg]• 32 -> 1.33 [seg]• 64 -> 2.66 [seg]• 128 -> 5.33 [seg]• 256 -> 10.66 [seg] ----->al máximo preescaler posible.Se advierte que los tiempos fueron obtenidos de forma empírica mediante reiteradaspruebas. Por ende hay que considerar un margen de error en los mismos.Las interrupciones se activan en el programa principal mediante la siguiente forma: 33
  34. 34. Rubén Bravo Brach Universidad Mayorsetup_counters(RTCC_INTERNAL,RTCC_DIV_2); // TIMER0: Clock Interno, Presescaler 2setup_timer_1(T1_DISABLED); // para un RTCC de 33.3 milisegundossetup_timer_2(T2_DISABLED,0,1); // -> 1 Segundo = 7 RTCCenable_interrupts(INT_RTCC); // Habilito Interrupción RTCCenable_interrupts(global); // Habilito Interrupciones 34
  35. 35. Rubén Bravo Brach Universidad Mayor ANEXOS 35
  36. 36. Rubén Bravo Brach Universidad Mayor1. 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 <18f452.h> // Selecciona el PIC#fuses XT,NOWDT,NOPROTECT // Opciones de configuración#use delay(clock=4000000) // Velocidad del Cristal : 4 Mhz#include <lcd.c>byte const NInts=6; // Numero de interrupciones para 1 Segundo// VARIABLES GLOBALESchar C_Ints=0; // Contador de Interrupciones ocurridaschar Flag=0; // Flag que cambia cada NInts interrupciones#int_RTCC // Interrupción por desbordamientoRTCC_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} // Ocurridasteclado() // Lee un teclado multiplexado de 4x4{int x;lcd_gotoxy(1,2);teclado: x=1;while(x<5) { if(x==1) //para las teclas 1 2 3 { output_high(PIN_C0); 36
  37. 37. Rubén Bravo Brach Universidad Mayor if(input(PIN_C4)==1) { delay_us(500000); return(1); delay_us(500000); } if(input(PIN_C5)==1) { delay_us(500000); return(2); delay_us(500000); } if(input(PIN_C6)==1) { delay_us(500000); return(3); delay_us(500000); } output_low(PIN_C0); } if(x==2) //para las teclas 4 5 6 { output_high(PIN_C1); if(input(PIN_C4)==1) { delay_us(500000); return(4); delay_us(500000); } if(input(PIN_C5)==1) { delay_us(500000); return(5); delay_us(500000); } if(input(PIN_C6)==1) { delay_us(500000); return(6); delay_us(500000); } output_low(PIN_C1); 37
  38. 38. Rubén Bravo Brach Universidad Mayor } if(x==3) //para las teclas 7 8 9 F3 { output_high(PIN_C2); if(input(PIN_C4)==1) { delay_us(500000); return(7); delay_us(500000); } if(input(PIN_C5)==1) { delay_us(500000); return(8); delay_us(500000); } if(input(PIN_C6)==1) { delay_us(500000); return(9); delay_us(500000); } if(input(PIN_C7)==1) { delay_us(500000); return(100); delay_us(500000); } output_low(PIN_C2); } if(x==4) //para las teclas * 0 # F4 { output_high(PIN_C3); if(input(PIN_C5)==1) { delay_us(500000); return(0); delay_us(500000); } if(input(PIN_C7)==1) { delay_us(500000); 38
  39. 39. Rubén Bravo Brach Universidad Mayor return(101); delay_us(500000); } output_low(PIN_C3); } delay_us(1000000); //realiza una pausa en microsegundos x=x+1; }goto teclado;}void main() //Programa Principal{int k=1;int a=0;int b=0;int c=0;int d,e,f,g; //a:segundos, b:minutos, c:horasint q=101;lcd_init();delay_us(6);while(q==101) //seleccionar hora y minutos reloj{ r : lcd_putc("fIngrese hora"); lcd_gotoxy(1,2); c=teclado()*10; c=teclado()+c; if(c>24) { 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) 39
  40. 40. 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)"); 40
  41. 41. 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); // TIMER0: Clock Interno,Presescaler 2setup_timer_1(T1_DISABLED); // para una RTCC cada 83 milisegundossetup_timer_2(T2_DISABLED,0,1); // -> 1 Segundo = 6 RTCCenable_interrupts(INT_RTCC); // Habilito Interrupción RTCCenable_interrupts(global); // Habilito Interrupcioneslcd_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) 41
  42. 42. 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);} 42

×