libro simulacion mikroc

289
1 Diseño y simulación de sistemas microcontrolados en lenguaje C Programación con MikroC PRO Simulación en Proteus ISIS Juan Ricardo Clavijo Mendoza

Upload: fernando-sanz

Post on 16-Oct-2015

710 views

Category:

Documents


47 download

TRANSCRIPT

  • 5/26/2018 Libro Simulacion Mikroc

    1/289

    1

    Diseo y simulacin de

    sistemasmicrocontrolados enlenguaje C

    Programacin con MikroC PROSimulacin en Proteus ISIS

    Juan Ricardo Clavijo Mendoza

  • 5/26/2018 Libro Simulacion Mikroc

    2/289

    2

  • 5/26/2018 Libro Simulacion Mikroc

    3/289

    3

    Dedicado a m esposa:Sandra, mi hijo Miguel, mis padres Jorge y Bibiana

  • 5/26/2018 Libro Simulacion Mikroc

    4/289

    4

  • 5/26/2018 Libro Simulacion Mikroc

    5/289

    5

    Diseo y simulacin desistemasmicrocontrolados enlenguaje C

    Programacin con el compilador MikroC PRO ysimulacin en Proteus ISIS

    Juan Ricardo Clavijo Mendoza

  • 5/26/2018 Libro Simulacion Mikroc

    6/289

    6

    Diseo y simulacin de sistemas microcontrolados en lenguaje C.

    Se prohbe la reproduccin total o parcial de este librosea cual fuere el medio, electrnico o mecnico,sin el consentimiento escrito del autor.

    AutorIng. Juan Ricardo Clavijo Mendoza

    Correccin de estiloIng. Sandra Milena Bernate BautistaDr. Duilio Cruz Becerra

    Hecho e impreso en Colombia

    ISBN 978-958-44-8619-6Primera edicin mayo de 2011

  • 5/26/2018 Libro Simulacion Mikroc

    7/289

    7

    Contenido1 El Compilador MikroC y los PICMicro ................................................................................. 17

    1.1 El compilador MikroC PRO ............................................................................................ 182 Fundamentos de lenguaje C ................................................................................................... 20

    2.1 Declaracin de variables en lenguaje C ........................................................................... 202.2 Formatos numricos usados en el lenguaje C .................................................................. 232.3 Operadores en lenguaje C ................................................................................................ 232.4 Funciones en lenguaje C .................................................................................................. 272.5 Creacin de un programa en lenguaje C .......................................................................... 292.6 Condicionales e iteraciones en lenguaje C ...................................................................... 30

    2.6.1 Creacin de condiciones lgicas en lenguaje C ....................................................... 302.6.2 La sentencia condicional if e if else ......................................................................... 312.6.3 La sentencia switch case........................................................................................... 322.6.4 El ciclo iterativo while y do while............................................................................ 322.6.5 El ciclo iterativo for .................................................................................................. 332.6.6 Uso anidado de ciclos iterativos ............................................................................... 33

    3 El simulador ISIS de Proteus ................................................................................................. 343.1 Caractersticas bsicas del ISIS para simular .................................................................. 35

    4 Creacin del primer programa en MikroC PRO .................................................................... 385 Visualizacin de datos ............................................................................................................ 44

    5.1 Display de 7 segmentos ................................................................................................... 445.1.1 Control de display de 7 segmentos ........................................................................... 455.1.2 Control de displays 7 segmentos dinmicos............................................................. 47

    5.2 Display LCD de caracteres .............................................................................................. 505.2.1 Funciones para imprimir caracteres ......................................................................... 545.2.2 Funciones para imprimir cadenas de texto ............................................................... 555.2.3 Impresin de valores numricos ............................................................................... 575.2.4 Creacin de caracteres propios ................................................................................. 595.3 Display LCD grficos ...................................................................................................... 64

    6 Teclados y sistemas de entrada de datos ................................................................................ 746.1 Uso de pulsadores ............................................................................................................ 746.2 Uso de Dip-Switch ........................................................................................................... 766.3 Uso de teclados matriciales ............................................................................................. 786.4 Uso de teclados PS2 o Din .............................................................................................. 84

    7 Comunicaciones seriales ........................................................................................................ 887.1 Modulo serial IC ............................................................................................................. 887.2 Mdulo USART .............................................................................................................. 917.3 Mdulo USB .................................................................................................................... 95

    8 Conversin AD y DA ........................................................................................................... 1098.1 Conversin AD, o ADC ................................................................................................. 1098.2 Conversin DA o DAC .................................................................................................. 110

    8.2.1 Conversin DA con PWM ..................................................................................... 1108.2.2 Conversin DA con arreglo R-2R .......................................................................... 114

    9 Memorias EEPROM y FLASH ............................................................................................ 1179.1 Memoria EEPROM ....................................................................................................... 1179.2 Memoria FLASH ........................................................................................................... 118

    10 Mdulos Timer ..................................................................................................................... 121

  • 5/26/2018 Libro Simulacion Mikroc

    8/289

    8

    11 Interrupciones ....................................................................................................................... 12412 Sensores ................................................................................................................................ 128

    12.1 Sensor de temperatura LM35 ..................................................................................... 12812.2 Sensores de presin .................................................................................................... 13112.3 Sensores de distancia ................................................................................................. 13412.4 Sensores LDR ............................................................................................................ 13812.5

    Sensores de humedad y temperatura .......................................................................... 141

    13 Comunicacin con dispositivos ............................................................................................ 147

    13.1 Mdulos GPS ............................................................................................................. 14713.2 Mdulos inalmbricos unidireccionales..................................................................... 16113.3 Mdulos inalmbricos bidireccionales....................................................................... 16713.4 Comunicacin RS 485 ............................................................................................... 17213.5 Mdulos inalmbricos infrarrojos .............................................................................. 17413.6 Comunicacin con memorias SD ............................................................................... 17713.7 Relojes en tiempo real ................................................................................................ 183

    14 Tratamiento digital de seales .............................................................................................. 19014.1 Muestreo .................................................................................................................... 19014.2 Funciones de transferencia ......................................................................................... 19114.3 Convolucin ............................................................................................................... 19214.4 Filtros FIR .................................................................................................................. 192

    14.4.1 Filtro Pasa bajas ..................................................................................................... 19314.4.2 Filtros Pasa Altas .................................................................................................... 19414.4.3 Filtro Pasa Banda ................................................................................................... 19414.4.4 Filtro Rechaza Banda ............................................................................................. 19514.4.5 Filtro Multi Band .................................................................................................... 19614.4.6 Ventanas fijas ......................................................................................................... 19614.4.7 Ventanas Rectangulares ......................................................................................... 19714.4.8 Ventanas Hamming ................................................................................................ 19814.4.9 Ventanas Hanning .................................................................................................. 19914.4.10 Ventanas Blackman ............................................................................................ 201

    14.5 Ejemplos de diseo para filtros FIR ........................................................................... 20214.5.1 Ejemplo de diseo para filtro pasa bajas ................................................................ 20414.5.2 Ejemplo de diseo para filtro pasa altas ................................................................. 20714.5.3 Ejemplo de diseo para filtro pasa banda ............................................................... 20814.5.4 Ejemplo de diseo para filtro rechaza banda ......................................................... 20914.5.5 Ejemplo de diseo para filtro multi banda ............................................................. 210

    14.6 Filtros IIR ................................................................................................................... 21214.6.1 Transformacin bilineal ......................................................................................... 21314.6.2 Filtro Pasa Bajas IIR .............................................................................................. 21314.6.3 Ejemplo de diseo para filtro pasa bajas ................................................................ 21514.6.4 Filtro Pasa Altas IIR ............................................................................................... 21614.6.5 Ejemplo de diseo para filtro pasa altas ................................................................. 21714.6.6 Filtro Pasa Banda IIR ............................................................................................. 21914.6.7 Ejemplo de diseo para filtro pasa banda ............................................................... 22014.6.8 Filtro Rechaza Banda IIR ....................................................................................... 22114.6.9 Ejemplo de diseo filtro rechaza banda ................................................................. 222

    14.7 Osciladores digitales .................................................................................................. 22414.7.1 Ejemplo de diseo oscilador doble cuadrado ......................................................... 22514.7.2 Ejemplo de diseo para oscilador de acople en cuadratura .................................... 226

  • 5/26/2018 Libro Simulacion Mikroc

    9/289

    9

    14.8 Transformada discreta de Fourier DFT ...................................................................... 22814.8.1 Transformada rpida de Fourier FFT ..................................................................... 232

    14.9 Control digital PID ..................................................................................................... 23815 Transmisin de datos ............................................................................................................ 243

    15.1 Control de flujo .......................................................................................................... 24415.2 Transparencia de datos ............................................................................................... 24715.3

    Control de errores CRC ............................................................................................. 252

    16 Actuadores y potencia .......................................................................................................... 262

    16.1 Actuadores DC ........................................................................................................... 26216.1.1 Relevadores ............................................................................................................ 26316.1.2 Motores DC ............................................................................................................ 26416.1.3 Puente H ................................................................................................................. 26516.1.4 Motores Paso .......................................................................................................... 26716.1.5 Servomotores .......................................................................................................... 271

    16.2 Actuadores AC ........................................................................................................... 27317 Anexos .................................................................................................................................. 279

    17.1 Tabla ASCII ............................................................................................................... 279Bibliografa ................................................................................................................................... 281ndice ............................................................................................................................................ 283

  • 5/26/2018 Libro Simulacion Mikroc

    10/289

    10

  • 5/26/2018 Libro Simulacion Mikroc

    11/289

    11

    El autorJuan Ricardo Clavijo Mendoza, Ingeniero Electrnico egresado de la universidad ManuelaBeltrn de Bogot D.C, Colombia. Autor de capitulo de libro de: Ciencia, tecnologa einnovacin, Tomo 1, publicado por la Universidad Catlica de Colombia. Docente de laUniversidad Catlica de Colombia, en el programa de Tecnologa en Electrnica y

    Telecomunicaciones, asesor temtico en proyectos de investigacin de la Universidad Catlica deColombia, y la Escuela de Telemtica de la Polica Nacional de Colombia, desarrollador deproyectos tecnolgicos en diversas empresas de Bogot Colombia.

  • 5/26/2018 Libro Simulacion Mikroc

    12/289

    12

  • 5/26/2018 Libro Simulacion Mikroc

    13/289

    13

    PrologoEl desarrollo de la tecnologa hace parte vital de la evolucin y el progreso de una nacin, estrazn motiva la creacin de documentos que formen a los desarrolladores e investigadores en lasdiversas reas de la ciencia. Este libro busca hacer un aporte en este propsito como un curso defcil entendimiento en el diseo de sistemas microcontrolados, para este fin este texto se enfoca

    en la simulacin de sistemas digitales en el paquete de software PROTEUS, y la programacin demicrocontroladores PIC con la herramienta de programacin en lenguaje C MikroC PRO. Estelibro es ideal para estudiantes de ingeniera, tecnologa, o carreras tcnicas en electrnica,sistemas, mecatrnica, biomdica, y todas aquellas afines con la electrnica. De igual manera esun aporte importante al desarrollo de proyectos de investigacin y tecnologa.

  • 5/26/2018 Libro Simulacion Mikroc

    14/289

    14

  • 5/26/2018 Libro Simulacion Mikroc

    15/289

    15

    IntroduccinEste libro trata temticas relacionadas con el diseo de sistemas con microcontroladores, de lafamilia microchip 12F, 16F, y 18F. Usando como herramienta de diseo, el compilador MikroCPRO, y el paquete de software para simulacin Proteus. Para entender este libro de forma clara elestudiante o desarrollador debe tener bases slidas de electrnica digital como circuitos

    combinacionales y secuenciales. Tambin es de utilidad tener conocimientos bsicos deprogramacin en lenguaje C y algoritmos. De la misma forma, se debe conocer las teoras decircuitos elctricos, y circuitos electrnicos anlogos, teoras bsicas de algebra, y algebra linealas como la manipulacin de nmeros complejos en todas sus expresiones. Este libro se enfoca enla demostracin de diseos simples que posteriormente pueden ser integrados para realizardiseos de mayor complejidad en funcin de la necesidad del desarrollador.

  • 5/26/2018 Libro Simulacion Mikroc

    16/289

    16

  • 5/26/2018 Libro Simulacion Mikroc

    17/289

    17

    1El Compilador MikroC y losPICMicro

    Un microcontrolador es un dispositivo electrnico encapsulado en un circuito de alto nivel deintegracin. Los microcontroladores se pueden adquirir comercialmente de diferentes casasfabricantes como: Freescale, Motorola, Intel, Philips, y Microchip.

    Microchip en particular es una empresa fabricante de dispositivos electrnicos, en sus lneas deproduccin se encuentran los microcontroladores PICMicro, los cuales se pueden adquirir endiferentes familias, algunas de ellas son: 12F, 16F, 18F, 24F, 30F, y 33F.

    En funcin de la necesidad del proyecto el desarrollador debe escoger la familia y la referenciaque ms se acerque a su necesidad, por ejemplo el microcontrolador 12F675 es un PIC de 8 pines

    con mdulos integrados bsicos como: Timer y ADC. Un microcontrolador como el 16F877cuenta con 40 pines y mdulos como: Timer, ADC, USART, I2C, PWM, entre otros. Fcilmentese pueden apreciar diferencias que permiten crear aplicaciones diferentes entre estos dosejemplos.

    Figura 1-1

    La informacin tcnica, la masiva comercializacin y la increble informacin publicada acercade los microcontroladores PIC, los hace ideales para aprender y estudiar su funcionamiento, laempresa Microchip cuenta con el portal WEBwww.microchip.comen donde se puede descargarinformacin y aplicativos de software que facilitan los desarrollos con sus microcontroladores.

    Bsicamente implementar un desarrollo con un microcontrolador PIC consiste en identificar laproblemtica del desarrollo, crear editar y depurar un programa de mquina y programar

    elctricamente el microcontrolador con un programador especifico para los PICMicro. Microchipsuministra programadores especializados en diferentes escalas, tal vez el ms popular es elPICSTART Plus, sin embargo existen otros como el PICkit2, PICkit3. A pesar de que existanprogramadores comerciales un desarrollador puede construir o adquirir un programador didcticode bajo costo, de estos ltimos existe amplia informacin publicada en Internet.

    http://www.microchip.com/http://www.microchip.com/http://www.microchip.com/http://www.microchip.com/
  • 5/26/2018 Libro Simulacion Mikroc

    18/289

    18

    Figura 1-2

    Un microcontrolador tiene una arquitectura bsica que es similar a la de un computador deescritorio, cuenta con un bloque de memoria OTP o Flash en la cual se guardan las instruccionesdel programa est seccin es similar al disco duro del computador, el PICMicro cuenta con unamemoria RAM, que cumple las mismas funciones de la memoria RAM de un ordenador personal,el microcontrolador posee puertos de entrada y salida que son similares a los perifricos deentrada y salida del computador tales como puertos para el ratn, impresora, monitor, teclado y

    dems. Ests caractersticas hacen que un microcontrolador sea ideal para crear aplicaciones apequea escala que tengan interfaz de usuario, adecuando teclados, botones, lectura de memoriasde almacenamiento masivo, sensores de diversas variables como: temperatura, humedad, presin,luminosidad, proximidad, entre otros. De igual manera, es posible crear ambientes devisualizacin con displays numricos, alfanumricos y grficos. Los puertos seriales como laUSART y USB permiten crear comunicaciones seriales y comunicaciones inalmbricas con otrosdispositivos. En sntesis las posibilidades son infinitas.

    1.1El compilador MikroC PROLa programacin de microcontroladores se basa en un cdigo de mquina que es conocido como

    cdigo ensamblador, este cdigo contiene una a una las instrucciones del programa, este cdigoensamblador o tambin conocido como cdigo asembler es minucioso, y tedioso de editar. Elasembler crea cdigos de programa extensos y de difcil comprensin. La creacin decompiladores de alto nivel facilit la edicin y creacin de programas en todo modo deprogramacin lgica, por supuesto los microcontroladores no fueron la excepcin,comercialmente existen varios compiladores de diferentes fabricantes y diferentes lenguajes dealto nivel.

    Es posible adquirir compiladores como el PICC, CCS, PIC Basic, entre otros. El estudio de estelibro se centra en el compilador MikroC PRO, que es un compilador en lenguaje C paramicrocontroladores PICMicro de la familia 12F, 16F, y 18F.

    MikroC PRO es un paquete de software con una amplia variedad de ayudas y herramientas quefacilita la creacin de proyectos y aplicativos para los microcontroladores PICMicro.

    El estudio de este entorno de desarrollo es posible debido a que el estudiante puede descargar unaversin demo o estudiantil, que tiene las mismas caractersticas de la versin completa, la nicalimitacin es la dimensin del cdigo de mquina que no puede exceder 2K bytes, sin embargo esuna capacidad suficiente al tratarse de un prime aprendizaje. La versin demo se puede descargarde la pagina:www.mikroe.com.

    http://www.mikroe.com/http://www.mikroe.com/http://www.mikroe.com/http://www.mikroe.com/
  • 5/26/2018 Libro Simulacion Mikroc

    19/289

    19

    En la siguiente figura se puede apreciar la apariencia visual del entorno de desarrollo.

    Figura 1-3

    El compilador de alto nivel en lenguaje C utiliza estructuras que facilitan la programacin,optimiza las operaciones matemticas y los procesos, por medio del uso de funcionespredefinidas y las no predefinidas que el desarrollador puede crear, as como el uso de unconjunto de variables, de tipo carcter, entero, y punto decimal. El compilador creaautomticamente el cdigo ensamblador y a su vez un cdigo similar consignado en un archivocon extensin *.hex, este archivo es el resultado primordial del compilador dado que con este seprograma elctricamente el microcontrolador o con el mismo se puede realizar una simulacincomputacional.

  • 5/26/2018 Libro Simulacion Mikroc

    20/289

    20

    2Fundamentos de lenguaje CEl lenguaje C data del ao 1972; fue creado por los laboratorios Bell como resultado de lanecesidad de reescribir los sistemas operativos UNIX con el fin de optimizar el conocido cdigo

    ensamblador. De igual manera el lenguaje C fue la evolucin de lenguajes previos llamados B, yBCPL. El nuevo lenguaje C, rpidamente tom fuerza por su funcionalidad y facilidad en laimplementacin en diversos sistemas computacionales que requeran cdigos de mquina.

    La forma del lenguaje C, se fundamenta en un complejo estructural que requiere un amplioestudio de las mismas, sin embargo para la programacin de los microcontroladores el estudianterequiere una porcin fundamental que le permita iniciar y crear los primeros proyectos enMikroC PRO, para este fin el actual captulo se centra en conocer las nociones necesarias parainiciar el estudio de los microcontroladores con este libro.

    2.1Declaracin de variables en lenguaje CLas variables bsicas en este compilador especfico son:

    bit char short int long float double

    Las variables bitpermiten almacenar un valor lgico es decir verdadero o falso, 0 1.

    Las variables char se utilizan para almacenar caracteres codificados con el cdigo ASCII, sontiles para guardar letras o textos.

    Una variableshortalmacena un nmero entero de 8 bits corto puede valer de: -127 a 127.

    Las variables tipo intguardan nmeros enteros de 16 bits, est variable permite guardar nmerosde: -32767 a 32767.

    La variable tipo long almacena nmeros enteros largos de 32 bits, su rango puede ser de:-2147483647 a 2147483647.

    Las variables tipofloaty doublepermiten guardar nmeros con punto decimal.

    Las anteriores variables pueden declararse incluyendo el signo positivo y negativo, o se puedendeclarar por medio de la opcin sin signo con la directriz unsigned.

  • 5/26/2018 Libro Simulacion Mikroc

    21/289

    21

    En la siguiente tabla se pueden apreciar las caractersticas de las variables.

    Ti po de variable Tamao en Bytes Val ores que sopor ta

    bit 1 0 1char 1 -127 a 127short 1 -127 a 127

    int 2 - 32767 a 32767long 4 - 2147483647 a 2147483647float 4 -1.5x10^45 a 3.4x10^38double 4 -1.5x10^45 a 3.4x10^38unsigned char 1 0 a 255unsigned short 1 0 a 255unsigned int 2 0 a 65535unsigned long 4 0 a 4294967295

    Tabla 2-1

    La declaracin de variables se realiza indicando el tipo de variable seguido de un nombre que eldesarrollador asigna arbitrariamente a la variable. En el punto de la declaracin de una variable esposible dar un valor inicial a cada una de las variables sin embargo este ltimo no esestrictamente necesario. Por ltimo la declaracin debe culminar con el carcter punto y coma (;).

    En los siguientes ejemplos se puede apreciar como se hacen las declaraciones:

    bitVARIABLE1_BIT; //Declaracin de una variable tipo bit.charCARACTER; //Declaracin de una variable tipo char.char CARACTER2='J'; //Declaracin de una variable tipo char inicializada con el//valor ASCII del carcter J.

    intENTERO=1234; //Declaracin de una variable tipo entera inicializada con//el valor 1234.float DECIMAL=-12.45; //Declaracin de una variable con punto decimal//inicializada con el valor -12,45.doubleDECIMAL2=56.68; //Declaracin de una variable con punto decimal//inicializada con el valor 56,68.longENTERO2=-954261; //Demacracin de una variable de tipo entero largo//inicializada con el valor -954261.

    Los siguientes ejemplos muestras como declarar variables sin signo:

    unsigned charCARACTER; //Declaracin de una variable tipo char sin signo.unsigned intENTERO; //Declaracin de una variable tipo entera sin signo.unsigned longENTERO2; //Demacracin de una variable de tipo entero largo sin signo.

    Las variables tambin pueden ser declaradas en un formato que asocia varias variables a unmismo nombre, este formato se conoce como una cadena de variables, o un vector e inclusopuede ser una matriz de variables, en conclusin este tipo de declaraciones pueden ser de una oms dimensiones.

  • 5/26/2018 Libro Simulacion Mikroc

    22/289

    22

    El siguiente ejemplo muestra un vector de caracteres, o tambin conocido como una cadena decaracteres:

    char Texto[20]; //Cadena de caracteres con 20 posiciones de memoria.

    De igual manera las cadenas de caracteres o de variables pueden ser declaradas con un valor

    inicial, este tipo de declaracin se puede ver en el siguiente ejemplo:charTexto[20] = Nuevo Texto; //Declaracin de una cadena de caracteres//inicializada con el texto: Nuevo Texto.intEnteros[5]={5,4,3,2,1}; //Declaracin de una cadena de enteros con//valores iniciales.floatDecimales[3]={0.8,1.5,5.8}; //Declaracin de una cadena de nmeros con//punto decimal inicializadas.

    La declaracin de las variables debe respetar algunas reglas bsicas que evitan errores ycontradicciones en la compilacin del cdigo, para este fin tenga presente las siguientesrecomendaciones:

    Las variables no deben tener nombres repetidos. Las variables no deben empezar por un nmero. Una variable no puede utilizar caracteres especiales como: / * ; { }-\! % &.

    A continuacin se muestran ejemplos de declaraciones de variables que no se pueden hacer:

    bit1_VARIABLE-;char-CARCTER!;int3ENTERO*;

    De igual manera es posible crear estructuras de informacin como un nuevo tipo de variablecreada por el desarrollador. Ests estructuras se pueden realizar con las variables ya predefinidasy pueden ser declaraciones de variables o de arreglos de variables. Este tipo de estructuras sedeclarar, por medio de la directriz: typedef struct, y la forma de declarar una variable creada porel desarrollador es la siguiente:

    typedef struct{

    charNombre[10];intEdad;

    }Usuario;La siguiente es la forma de usar una variable personalizada por el desarrollador:

    Usuario U;U.Edad = 25;U.Nombre[0]=J;U.Nombre[1]=u;U.Nombre[2]=a;

  • 5/26/2018 Libro Simulacion Mikroc

    23/289

    23

    U.Nombre[3]=n;U.Nombre[4]=0;

    2.2Formatos numricos usados en el lenguaje CLos aplicativos en lenguaje C usan nmeros en diferentes bases numricas, a pesar de que para eltrabajo de bajo nivel del microcontrolador todos sus nmeros estn procesados en base 2 es deciren nmeros binarios. El ser humano no est acostumbrado a pensar y procesar operaciones enest base numrica. Desde las primeras etapas de la formacin acadmica las escuelas y colegiosensean a pensar y procesar todos los clculos en base 10, es decir con nmeros decimales. Espor esto que los compiladores en lenguaje C trabajan los nmeros decimales facilitando losdiseos para el desarrollador. Adems del sistema decimal el compilador en lenguaje C puedetrabajar otras bases tales como el binario, y hexadecimal haciendo ms simple realizar clculos ytareas que en decimal seran ms complejas. Los sistemas numricos en base 2, 10, y 16, son losimplementados en este compilador en lenguaje C. La escritura de nmeros decimales, es la formade mayor simplicidad ya que se escriben en lenguaje C de la misma manera convencional que seaprende desde los primeros cursos de matemticas. Los nmeros binarios se escriben con elencabezado 0b seguidos del nmero en binario, un ejemplo de est escritura es: 0b10100001 quees equivalente al nmero decimal 161. Los nmeros en base 16 o hexadecimales se denotan conel encabezado 0x precedidos de un nmero en hexadecimal, la expresin 0x2A, es un ejemplo deun nmero hexadecimal en lenguaje C, y equivale a 42 en decimal. Los nmeros binarios solopueden tener dos dgitos que son el 0 y el 1. Los nmeros hexadecimales pueden tener 16 dgitosque son; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F.

    2.3Operadores en lenguaje CEl lenguaje C permite hacer operaciones aritmticas o matemticas bsicas entre nmeroscontenidos en variables o constantes. Las operaciones aritmticas disponibles son las siguientes:

    Suma Rest Multiplicacin Divisin Modulo

    La suma aritmtica entre dos o ms nmeros, se puede hacer como se ve en el siguiente ejemplo:intA;intB;intC;

    C = A+B; //Est expresin guarda la suma de A y B en la variable C.C = A+B+C; //Est expresin guarda la suma de A, B y C en la variable C.

    La rest aritmtica entre dos o ms nmeros, se puede hacer como se ve en el siguiente ejemplo:intA;intB;intC;C = A-B; //Est expresin guarda la diferencia entre A y B en la variable C.C = A-B-C; //Est expresin guarda la diferencia entre A, B y C en la variable C.

  • 5/26/2018 Libro Simulacion Mikroc

    24/289

    24

    La operacin matemtica de multiplicacin se puede realizar entre dos o ms nmeros, laoperacin se relaciona con el carcter asterisco (*), est expresin se puede apreciar con mayorclaridad en los siguientes ejemplos:intA;intB;intC;

    C = A*B; //Est expresin guarda la multiplicacin entre A y B en la variable C.C = A*B*C; //Est expresin guarda la multiplicacin entre A, B y C en la variable C.

    La divisin aritmtica en lenguaje C se especifica por medio de la barra inclinada (/), en elsiguiente ejemplo se puede observar su implementacin:intA;intB;intC;C = A/B; //Est expresin guarda la divisin A entre B en la variable C.

    La operacin mdulo calcula el mdulo de una divisin aritmtica es decir calcula el residuo deuna divisin, el clculo del mdulo se denota con el carcter de porcentaje, (%), la aplicacin deest operacin se puede ver en el siguiente ejemplo:intA;intB;intC;C = A%B; //Est expresin guarda el residuo de la divisin de A entre B en la variable C.

    Las operaciones aritmticas pueden ser usadas en forma combinada, es decir que se puedenmezclar varias operaciones en una misma expresin, para ver esto con mayor claridad observe lossiguientes ejemplos:intA;intB;intC;

    C = (A+B)/C; //Est expresin es equivalente a C = (A+B)C.C = (A/B)*C; // Est expresin es equivalente a C = (AB) X C.

    Otros operadores matemticos abreviados pueden ser utilizados cuando se requiere de conteos ocambios de una variable de forma constante, por ejemplo es posible incrementar o decrementaruna variable en trminos de un nmero, de igual manera es posible hacer est operacin con lamultiplicacin y la divisin. Para entender de forma ms clara este concepto observe lossiguientes ejemplos:

    intA=100;intB=10;

    A++; //Este operador incrementa en una unidad el valor de A.A--; //Este operador decrementa en una unidad el valor de A.A+=4; //Este operador incrementa en 4 el valor de A.A-=5; //Este operador decrementa en 5 el valor de A.A/=4; //Este operador divide el valor de A en 4.A*=3; //Este operador multiplica el valor de A por 3.

  • 5/26/2018 Libro Simulacion Mikroc

    25/289

    25

    A+=B; //Este operador incrementa el valor de A en el valor de B unidades.A*=B; //Este operador multiplica el valor de A por B veces.

    Otras operaciones matemticas de mayor complejidad se pueden realizar en lenguaje C, pormedio de funciones predefinidas en la librera math, est temtica ser tratada posteriormente

    cuando se estudie el uso y declaracin de funciones.Los operadores lgicos permiten realizar acciones u operaciones que respetan la lgica digitalplanteada por el matemtico ingls George Boole, en el siglo XIX. Boole plante las operacionesOR, AND, NOT, XOR, NOR, NAND, XNOR, Ests operaciones son ampliamente estudiadas enlos cursos de sistemas digitales combinacionales y secuenciales.

    Las operaciones lgicas se realizan en lenguaje C entre dos variables o constantes, ests se hacenbit a bit, del mismo peso en una variable o nmero. Para ver y entender los ejemplos recuerdeprimero las tablas de verdad de las operaciones lgicas que se muestran a continuacin:

    I nversor NOTEntrada Salida

    0 11 0

    OR inclusiva

    Entrada 1 Entrada 2 Salida

    0 0 00 1 11 0 11 1 1

    OR exclusiva o XOR

    Entrada 1 Entrada 2 Salida

    0 0 00 1 11 0 11 1 0

    AND

    Entrada 1 Entrada 2 Salida

    0 0 00 1 01 0 01 1 1

    NOR inclusiva

    Entrada 1 Entrada 2 Salida

    0 0 10 1 01 0 01 1 0

    NOR exclusiva o XNOR

    Entrada 1 Entrada 2 Salida

    0 0 10 1 01 0 01 1 1

    NAND

    Entrada 1 Entrada 2 Salida

    0 0 10 1 11 0 11 1 0

  • 5/26/2018 Libro Simulacion Mikroc

    26/289

    26

    Las operaciones lgicas en lenguaje C, se realizan con caracteres especficos, que denotan cadauna de ellas, en el siguiente ejemplo pueden verse las aplicaciones de los operadores lgicos:

    Operacin lgica NOT, negacin, se denota con el carcter virgulilla (~);unsigned shortVALOR1=0b01010000; //Variable inicializada en binario con el nmero 80.unsigned shortRESULTADO;

    RESULTADO = ~VALOR1; //La variable RESULTADO guarda el complemento de//VALOR1, 175.

    Operacin lgica OR, o inclusiva, est se denota con el carcter barra vertical (|);unsigned shortVALOR1=0b01010000; //Variable inicializada en binario con el nmero 80.unsigned shortVALOR2=0b01011111; //Variable inicializada en binario con el nmero 95.unsigned shortRESULTADO;RESULTADO = VALOR1|VALOR2; //El valor de la operacin lgica o, es guardado en//RESULTADO, 95.

    Operacin lgica XOR, o exclusiva, est se denota con el carcter acento circunflejo (^);

    unsigned shortVALOR1=0b01010000; //Variable inicializada en binario con el nmero 80.

    unsigned shortVALOR2=0b01011111; //Variable inicializada en binario con el nmero 95.unsigned shortRESULTADO;RESULTADO = VALOR1^VALOR2; //El valor de la operacin lgica AND//es guardado en RESULTADO, 15.

    Operacin lgica AND, y, est se denota con el carcter ampersand (&);unsigned shortVALOR1=0b01010000; //Variable inicializada en binario con el nmero 80.unsigned shortVALOR2=0b01011111; //Variable inicializada en binario con el nmero 95.unsigned shortRESULTADO;RESULTADO = VALOR1&VALOR2; //El valor de la operacin lgica o//exclusiva, es guardado en RESULTADO, 80.

    La implementacin de las operaciones lgicas NAND, NOR, XNOR, son similares a AND, OR,y XOR, a agregando el carcter de negacin virgulilla, observe los siguieres ejemplos:

    unsigned shortVALOR1=0b01010000; //Variable inicializada en binario con el nmero 80.unsigned shortVALOR2=0b01011111; //Variable inicializada en binario con el nmero 95.unsigned shortRESULTADO;RESULTADO = ~(VALOR1|VALOR2); //El valor de la operacin lgica o negada// exclusiva, es guardado en RESULTADO.RESULTADO = ~(VALOR1&VALOR2); //El valor de la operacin lgica y negada,// es guardado en RESULTADO.RESULTADO = ~(VALOR1^VALOR2); //El valor de la operacin lgica o negada// exclusiva negada, es guardado en RESULTADO.

    El desplazamiento de bits dentro de una variable es til para realizar procesos y tareas queimpliquen la manipulacin de datos a nivel de los bits. El corrimiento a la derecha en unavariable o valor constante, en lenguaje C se realiza por medio del doble carcter mayor que, (>>),de la misma manera el corrimiento a la izquierda se ejecuta con el doble carcter menor que,(

  • 5/26/2018 Libro Simulacion Mikroc

    27/289

    27

    los nuevos bits. En los siguientes ejemplos se puede observar la implementacin de estosoperadores:shortDato=0xFF; //Declaracin de variables.shortResultado;Resultado = Dato>>4; //Est operacin guarda en la variable Resultado el corrimiento de 4 bits//a la derecha de la variable Dato, valor final de Resultado es 0x0F.

    Resultado = Dato

    Corrimiento a la izquierda

  • 5/26/2018 Libro Simulacion Mikroc

    28/289

    28

    intFuncion (void ) //Funcin con parmetro de entrada vaco y salida entera.{ // Apertura de la funcin con corchete.

    //Porcin de cdigo donde se ejecutan la rutina de la funcin.} //Cierre de la funcin con corchete.

    intFuncion (intA ) //Funcin con un parmetro de entrada y salida enteras.

    { // Apertura de la funcin con corchete.//Porcin de cdigo donde se ejecutan la rutina de la funcin.} //Cierre de la funcin con corchete.

    Los nombres que se designan a las funciones cumplen con las mismas reglas para nombrar lasvariables. El siguiente ejemplo muestra una funcin que es capaz de calcular el producto de dosnmeros con punto decimal:

    floatProducto (fl oatA, flotaB ) //Funcin para calcular el producto de A y B.{ // Apertura de la funcin con corchete.

    floatRESULTADO;RESULTADO = A*B; //Producto de A y B.returnRESULTADO; //La funcin retorna el resultado guardado en RESULTADO.

    } //Cierre de la funcin con corchete.

    Una funcin puede recurrir a otra funcin para realizar funciones ms complejas, para demostrarest situacin se puede ver el siguiente ejemplo, que realiza el clculo del rea de unacircunferencia en funcin de su radio:

    Figura 2-1

    El rea de la circunferencia se calcula por medio de la ecuacin A=r, donde el valor de esaproximadamente 3,1416.

    floatValor_PI (void ) //Funcin que retorna el valor de .{ // Apertura de la funcin con corchete.

    floatPI=3.1416;returnPI;

    } //Cierre de la funcin con corchete.

    En el caso en que una funcin requiera variables internas est declaracin se debe hacer alprincipio de la misma, antes de realizar cualquier otra accin o instruccin.

    floatArea_Circunferencia (f loatRadio ) //Funcin para calcular el rea del circulo.{ // Apertura de la funcin con corchete.

    floatArea;

  • 5/26/2018 Libro Simulacion Mikroc

    29/289

    29

    Area = Valor_PI()*Radio*Radio; //Clculo del rea del circulo.returnArea;

    } //Cierre de la funcin con corchete.

    Las funciones son creadas por el desarrollador, sin embargo existen algunas que estnpredefinidas en el compilador y pueden ser consultadas e implementadas respetando los

    parmetros de entrada y salida, la ms importante de ellas es la funcin main o principal. Laimportancia de est funcin radica en el hecho de que es sobre ella que corre todo el programadel microcontrolador y est se ejecuta automticamente cuando el microcontrolador se energiza.La funcin main en el caso particular de los microcontroladores no contiene parmetros deentrada ni de salida, su declaracin se puede apreciar en el siguiente ejemplo:

    voidmain( void) //Declaracin de la funcin main.{ // Apertura de la funcin main.

    //Cdigo del programa principal del microcontrolador.} //Cierre de la funcin main.

    Las declaraciones de funciones hechas por el desarrollador deben ser declaradas antes de lafuncin main, y en el caso de una funcin que invoque a otra funcin debe ser declarada antes dela funcin que hace el llamado.

    Las funciones matemticas trigonomtricas y otras como logaritmos, exponenciales, ypotenciacin pueden ser usadas con la librera predefinida por el compilador. Est librera sedenomina C_Math.

    2.5Creacin de un programa en lenguaje CLa estructura de un programa en lenguaje C es relativamente simple, primero es indispensabledeclarar las variables globales que el desarrollador considere necesarias para el funcionamientodel programa, ests variables globales son reconocidas por todos los puntos de cdigo delprograma incluidas las funciones propias del desarrollador y la funcin main. El paso a seguir eshacer las declaraciones de funciones diseadas por el desarrollador para las tareas especficas ensu programa. Posteriormente se declara la funcin mainy al comienzo de est se deben declararlas variables que se requieran dentro de la misma. El cdigo que sigue debe configurar einicializar los puertos y mdulos del microcontrolador que sean indispensables en la aplicacin.Por ltimo se edita el cdigo que contiene el aplicativo concreto del programa. En el siguienteejemplo se puede ver cmo hacer una estructura para un programa:

    intVarible1; //Declaracin de variables globales.charVariable2;floatVariable3;

    //Declaracin de funciones propias del desarrollador.floatValor_PI (void ){

    floatPI=3.1416;returnPI;

    }

  • 5/26/2018 Libro Simulacion Mikroc

    30/289

    30

    floatCalculo_Area_Circulo( floatRadio ){

    floatArea;Area = Valor_PI()*Radio*Radio; //Clculo del rea.returnArea;

    }

    voidmain( void ) //Declaracin de la funcin main o principal{

    floatValor_Radio; //Declaracin de variables de la funcin main.floatValor_Area;TRISB=0; //Configuracin de puertos y mdulos.TRISC=0;PORTB=0;PORTC=0;while( 1 ) //Cdigo concreto del aplicativo.{

    Valor_Area=Calculo_Area_Circulo( Valor_Radio );}

    }

    2.6Condicionales e iteraciones en lenguaje CLas formas condicionales e iterativas hacen parte vital de las estructuras de cualquier cdigo enlenguaje C. Ests permiten hacer ciclos en funcin de conteos y condiciones de variables quehacen efectivo el flujo del programa. Las sentencias condicionales if, if else, y switch case,permiten realizar mens, tomar decisiones, y controlar el flujo del programa o aplicativo. Lasestructuras iterativas while, do while y for, permiten crear bucles iterativos, que cuentan ogobiernan tareas y procesos desarrollados en el programa.

    2.6.1Creacin de condiciones lgicas en lenguaje CLas condiciones lgicas permiten tomar decisiones en funcin de una evaluacin. Lascondiciones lgicas solo retornan dos posibles valores: falso o verdadero. Cuando la condicinlgica se hace directamente sobre una variable o nmero, la condicin es falsa cuando su valor es0 y retorna verdadero para cualquier otro valor diferente de 0. Las formas condicionales usadasen lenguaje C son: NOT, o negacin, OR o o inclusiva, AND o y. Tambin se pueden usarcomparaciones de magnitud entre dos valores tales como: mayor que, menor que, mayor o igualque, menor o igual que, diferente que, e igual que. El uso de la negacin se realiza con el carcteradmiracin (!), la condicin OR, se realiza con los caracteres doble barra vertical (||), la condicin

    AND o y, se usa con los caracteres doble ampersand (&&), la condicin mayor que se usa con elcarcter que tiene su mismo nombre (>), la condicin menor que, se hace con el carcter menorque (=), lacondicin menor que, se realiza con los caracteres menor que, e igual (

  • 5/26/2018 Libro Simulacion Mikroc

    31/289

    31

    shortB;//La condicin es verdadera si A vale 10 y B vale 20.(A==10)&&(B==20)//La condicin es verdadera si A es diferente de 5 y B es mayor que 2.(A!=5)&&(B>2)//La condicin es verdadera si A es menor o igual que 4 o si B es mayor o igual que 6.

    (A=6)//La condicin es verdadera si A no es mayor que 3 y si B es diferente de 4.!(A>3)&&(B!=4)

    2.6.2La sentencia condicional if e if elseLa estructura de la sentencia ifevala una condicin lgica y ejecuta una porcin de cdigo si ysolo si el resultado de la evaluacin es verdadera. Observe la estructura del la sentencia ifen elsiguiente ejemplo:

    shortValor;i f( Valor>100 ) //Este if evala si la variable Valor es mayor que 100.

    { // Porcin de cdigo que se ejecuta si el if es verdadero.}

    La estructura ifelsees igual que la sentencia if, su nica diferencia es que en el dado caso de quela evaluacin de la condicin sea falsa se ejecuta la porcin de cdigo asociada al else. Paraentender est situacin observe el siguiente ejemplo:

    shortValor;i f( Valor>100 ) //Este if evala si la variable Valor es mayor que 100.{

    // Porcin de cdigo que se ejecuta si la condicin del if es verdadero.}else{

    // Porcin de cdigo que se ejecuta si la condicin del if es falsa.}

    Las sentencias if e if elsese pueden anidar para crear estructuras ms completas y complejas, estcaracterstica se puede ver con claridad en el siguiente ejemplo:

    shortValor1; //Declaracin de variables.

    shortValor2;i f( Valor1>30 ) //Sentencia if.{

    // Cdigo que se ejecuta cuando el primer if tiene una condicin verdadera.i f( (Valor2==4)&&(Valor1

  • 5/26/2018 Libro Simulacion Mikroc

    32/289

    32

    2.6.3La sentencia switch caseLa sentenciaswitch case, funciona de manera similar a la sentencia if, difiere en que no se evalauna condicin si no el valor de una variable, y ejecuta una porcin de cdigo para cada valorposible de la variable. Los valores contemplados en los casos o caseposibles de la variable losescoge el desarrollador arbitrariamente en funcin de su criterio y necesidad. Los casos o valoresque no son de inters para el desarrollador se ejecutan en un fragmento de cdigo por defecto, por

    medio de la directriz default. Cada uno de los fragmentos de cdigo editados deben terminar conla directriz breakpara romper el flujo de la estructura switch case, est accin es necesaria dadoque si dos casos estn seguidos los fragmentos de cdigo seguidos se ejecutarn hasta encontrarla directriz breako hasta finalizar la estructura switch case. Para comprender de forma clara elfuncionamiento de la sentenciaswitch caseobserve el siguiente ejemplo:

    short Valor;switch( Valor ) //Evaluacin de la variable Valor.{

    case 0: //Fragmento de cdigo correspondiente al valor 0 de la variable Valor.break; //Ruptura del caso 0.

    case 1: //Fragmento de cdigo correspondiente al valor 1 de la variable Valor.break; //Ruptura del caso 1.

    case10: //Fragmento de cdigo correspondiente al valor 10 de la variable Valor.break; //Ruptura del caso 10.

    case20: //Fragmento de cdigo correspondiente al valor 20 de la variable Valor.break; //Ruptura del caso 20.

    case50: //Fragmento de cdigo correspondiente al valor 50 de la variable Valor.break; //Ruptura del caso 50.

    default: //Cdigo correspondiente para cualquier otro valor por defecto.break; //Ruptura del default.

    }

    2.6.4El ciclo iterativo while y do whileEl ciclo iterativo whilerepite o ejecuta un fragmento de programa siempre y cuando la condicincontenida en el whilesea verdadera. Para conocer la forma de declarar este tipo de ciclo observeel siguiente ejemplo:

    short CONT=0; //Declaracin de variable entera que cuenta hasta 100.while( CONT

  • 5/26/2018 Libro Simulacion Mikroc

    33/289

    33

    CONT++; //Incremento de la variable CONT.} while( CONT

  • 5/26/2018 Libro Simulacion Mikroc

    34/289

    34

    3El simulador ISIS de ProteusEl simulador ISIS de Proteus es un poderoso paquete de software, desarrollado por la compaalabcenter electronics, que se ha posicionado desde hace mas de 10 aos, como una de las

    herramientas ms tiles para la simulacin de los microcontroladores PICMicro. El ISIS permitela simulacin de las familias de los PICMicro ms populares tales como la: 12F, 16F, 18F.Adems de los PIC, el ISIS puede simular una gran variedad de dispositivos digitales yanalgicos, entre los dispositivos digitales es posible simular displays de siete segmentos, decaracteres, y grficos. ISIS puede simular sensores de temperatura, humedad, presin, yluminosidad, entre otros. El simulador permite, simular actuadores como: motores dc, servomotores, luces incandescentes entre otros. Es posible simular perifricos de entrada y salidacomo teclados, y puertos fsicos del ordenador como: RS232, y USB. Este simulador cuenta conuna amplia variedad de instrumentos de medicin como voltmetros, ampermetros,osciloscopios, y analizadores de seal. En conclusin ests y otras caractersticas hacen del ISISde Proteus, una herramienta ideal para el diseo y estudio de los PICMicro. Una versin

    demostrativa del paquete de software se puede descargar de la pgina:www.labcenter.com.En lasiguiente imagen se puede apreciar la apariencia visual del entorno de desarrollo del ISIS:

    Figura 3-1

    El uso y trabajo bajo en el torno de ISIS demanda una amplia cantidad de herramientas yopciones que se deben conocer pero se conocern paulatinamente en el transcurso de losejemplos.

    http://www.labcenter.com/http://www.labcenter.com/http://www.labcenter.com/http://www.labcenter.com/
  • 5/26/2018 Libro Simulacion Mikroc

    35/289

    35

    3.1Caractersticas bsicas del ISIS para simularEn la siguiente seccin se mostrarn las caractersticas bsicas para hacer la primera simulacinen ISIS. Como primera medida se debe identificar la paleta de dispositivos, que est a laizquierda de la pantalla, en est paleta el desarrollador debe identificar el botn P, para mayorclaridad observe la siguiente imagen:

    Figura 3-2

    Al picar el botn P, el programa abre una nueva ventana que permite buscar los dispositivoselectrnicos por medio de la referencia comercial, o bajo la clasificacin que el mismo ISIS tiene.Para buscar un dispositivo por medio de la referencia se digita la referencia en la casilla:Keywords, el programa genera una lista en la parte derecha de la ventana con los dispositivosrelacionados a la solicitud del usuario. Para seleccionar un dispositivo de est lista se da dobleclic sobre cada uno de los numerales de la lista. Para iniciar busque los siguiente dispositivos:BUTTON, LED-RED, RES, que corresponden a un pulsador, un LED de color rojo, y unaresistencia. Despus de este proceso, en la paleta de dispositivos debe verse lo siguiente:

    Figura 3-3

    El paso siguiente es buscar las terminales de referencia y poder, para este fin se debe pulsar elicono siguiente: este se encuentra en la paleta de herramientas que est en la parte izquierdade la ventana del programa. Cuando este botn se pica permite ver una lista de terminales, en las

  • 5/26/2018 Libro Simulacion Mikroc

    36/289

    36

    cuales se encuentra GROUND, y POWER, las cuales corresponden respectivamente a lareferencia elctrica y al poder o Vcc. La terminal de poder tiene una diferencia de potencial pordefecto de 5 voltios. Para colocar ests terminales en el rea de trabajo se pica los tems en lapaleta de terminales y posteriormente en el rea de trabajo, despus de est accin en el rea detrabajo se debe ver lo siguiente:

    Figura 3-4

    El paso siguiente es pegar los dispositivos en el rea de trabajo para esto pique el botn: quese encuentra en la paleta de herramientas de la izquierda. Para pegar los dispositivos en el rea detrabajo se sigue el mismo procedimiento de las terminales, al finalizar se bebe tener la siguientevista:

    Figura 3-5

    El paso siguiente es realizar las conexiones elctricas, para este ejemplo se conectan todos loselementos en serie, para este fin el cursor del ratn adopta la forma de lpiz, para hacer la

    conexin entre dos terminales se pica una terminal y despus la siguiente. El programa terminarutiando la conexin. Al terminar las conexiones se ve la siguiente vista:

  • 5/26/2018 Libro Simulacion Mikroc

    37/289

    37

    Figura 3-6

    Para finalizar se puede cambiar el valor de la resistencia dando clic izquierdo sobre la resistencia,con est accin sale una ventana que permite editar el valor de la resistencia, que por defecto es

    de 10k, lo que se debe hacer es cambiarlo por 330.

    El paso siguiente es ejecutar o correr la simulacin para esto se utiliza la paleta de reproduccinque est en la parte inferior izquierda de la pantalla. La apariencia de est paleta es la siguiente:

    Figura 3-7

    Por ltimo se pica el botn de play y la simulacin se ejecuta, cuando la simulacin estecorriendo se puede pulsar el BUTTON, y ver el efecto de la simulacin. Este simple ejemplopermite mecanizar el proceso de creacin de un circuito digital, para su posterior simulacin.

    La creacin de circuitos en ISIS, implica hacer otra serie de acciones, que sern tratadas en eltranscurso de los ejemplos.

  • 5/26/2018 Libro Simulacion Mikroc

    38/289

    38

    4Creacin del primerprograma en MikroC PRO

    El proceso siguiente debe ser mecanizado para ser implementado cada vez que se haga unproyecto o programa nuevo para un PICMicro. Al correr el MikroC PRO, se identifica en elmen superior el temProject, se pica y dentro de este se pica New Project, con est accin elprograma despliega un asistente fcil de usar para crear el nuevo proyecto. La apariencia visualde este asistente es la siguiente:

    Figura 4-1

    La siguiente accin es pulsar el botn Next, con este paso el asistente muestra una casilla paraseleccionar la referencia del PICMicro, que se desea usar. En est opcin seleccione el PICP16F84A. El siguiente paso es definir la frecuencia se oscilacin con la cual trabajar el PIC, eneste ejemplo se selecciona 4.000000 MHz. La siguiente opcin permite definir el directorio endonde el desarrollador guardar el proyecto, en este directorio el programa guardar todos losarchivos requeridos, en los cuales la fuente del cdigo ser el archivo con extensin .c, y elejecutable del PIC es el archivo .hex. El siguiente paso solicita adicionar archivos que sernanexados al proyecto. Cuando se realiza un proyecto nuevo este paso se puede omitir y se pulsaNext, El ltimo tem del asistente pregunta si el desarrollador quiere seleccionar las libreras queusar en este trabajo, por defecto este tem selecciona todas las libreras habilitadas para este PIC,

  • 5/26/2018 Libro Simulacion Mikroc

    39/289

    39

    lo mejor es dejar todas las libreras activas. Por ltimo se termina la configuracin y se crea elproyecto, al terminar debe aparecer una vista como la siguiente:

    Figura 4-2

    Cuando un cambio se realice sobre el cdigo del programa se debe compilar el cdigo picando el

    siguiente botn: que est ubicado en la parte superior del programa dentro de la paleta deherramientas. Est accin genera los resultados de la compilacin que se encuentran en la parteinferior de la ventana del programa. Los mensajes se deben terminar con un texto de finalizacin

    exitosa.

    Para iniciar la edicin del proyecto, se configuran los puertos del PIC, y posteriormente seencierra el programa en un bucle infinito. El PIC 16F84A, tiene dos puertos l A y el B, paraconfigurar los puertos como salida o como entrada se manipula el registro TRIS. Cada puertocuenta con su respectivo registro TRIS, que hace alusin a los tres estdos posibles, alto, bajo, yalta impedancia. Los registros TRIS cuentan con el mismo nmero de bits del puerto, por ejemploel puerto B o PORTB de este PIC tiene 8 bits, por lo tanto el TRISB tambin tiene 8 bits. Los bitsde los registros TRIS, son correspondientes al puerto, y definen bit a bit el estdo del puerto. Siun bit en el TRIS es 0 el mismo bit en el puerto es de salida, y si el bit del TRIS es 1 el mismo bitdel puerto es de entrada o est en alta impedancia. Para entender este concepto con mayor

    claridad observe y analice el siguiente ejemplo:

    TRISB = 0b11110000; // Configura los cuatro bits de menor peso como salida, y//los cuatro bits de mayor peso como entrada.PORTB=0b00000000; //Los bits de salida asumen un 0 lgico.

    Este ejemplo usa un pulsador y un par de LEDs para ver el comportamiento del programa.Observe y analice el programa a continuacin:voidmain ( void)

  • 5/26/2018 Libro Simulacion Mikroc

    40/289

    40

    {unsigned intCONTADOR=0;TRISB = 0b11110000; // Configura los cuatro bits de menor peso como salida, y//los cuatro bits de mayor peso como entrada.PORTB=0b00000000; //Los bits de salida asumen un 0 lgico.while( 1 ) //Bucle infinito

    { i f( PORTB.F7==0 ) //Evala si bit RB7 es 0{

    i f( PORTB.F0==1 ) //Evala el valor del bit RB0 y conmuta su valor.PORTB.F0=0;

    elsePORTB.F0=1;

    while( PORTB.F7==0 ); //Espera a que el RB7 cambie a 1.}CONTADOR++; //Incrementa el valor del CONTADOR.//La siguiente condicin if cambia automticamente el estdo del bit RB1

    i f( CONTADOR&0x0100 ) //Evala si el bit 8 del CONTADOR es 1

    PORTB.F1=1;else

    PORTB.F1=0;}

    }

    El paso siguiente es hacer la simulacin en ISIS, las resistencias de los LEDs deben sercambiadas a 330, la terminal Master Clear, MCLRdebe ser conecta a Vcc para que el PIC, nose reinicie al terminar se debe ver de la siguiente forma:

    Figura 4-3

  • 5/26/2018 Libro Simulacion Mikroc

    41/289

    41

    Antes de correr la simulacin se debe cargar el archivo .hex, para este proceso se hace clicizquierdo sobre el PIC, y aparece una ventana que permite buscar el archivo .hex, en est ventanatambin se ajusta la frecuencia de oscilacin. Por defecto este valor es 1MHz, para efectos desimulacin en este caso se debe seleccionar 4MHz, la vista de est ventana es la siguiente:

    Figura 4-4

    Para fines de la programacin fsica del microcontrolador es importante tener presente lascondiciones de configuracin del PIC, cada uno de los microcontroladores de Microchip, poseenun campo de memoria que caracteriza el comportamiento de real del PIC, entre estos se puedendestcar; el tipo de oscilador o reloj de procesamiento, por ejemplo cuando se usa un cristal de4M Hz, el oscilador del PIC se debe configurar como XT, si el oscilador es de 20M Hz se usa laconfiguracin HS, si se trata de un cristal de baja velocidad como 400K Hz se usa laconfiguracin LP, y si se implementa un oscilador por medio de circuito RC, o circuito deresistencia en serie con capacitor se usa la opcin RC. De la misma forma es posible configurar

    otras opciones como el uso del perro guardin, la proteccin de cdigo en memoria FLASH yEEPROM, est ltima opcin es de suma importancia para proteger la informacin delmicrocontrolador y evitar que el programa o los datos de la memoria sean ledos. Para modificarla configuracin del PIC, se debe buscar el tem Edit Proyectque se encuentra en la pestaProyect, del men principal del programa MikroC PRO.

    El acceso a este tem se puede apreciar en la siguiente figura:

  • 5/26/2018 Libro Simulacion Mikroc

    42/289

    42

    Figura 4-5

    Despus de picar est opcin el compilador MikroC PRO, despliega una ventana con casillas deseleccin para editar las opciones de configuracin del PIC, en funcin del microcontrolador estventana puede cambiar de apariencia dado que no todos los PIC, cuentan con las mismasconfiguraciones, sin embargo en la siguiente figura se puede apreciar la apariencia de estaventana para un PIC 16F877A:

  • 5/26/2018 Libro Simulacion Mikroc

    43/289

    43

    Figura 4-6

  • 5/26/2018 Libro Simulacion Mikroc

    44/289

    44

    5Visualizacin de datosEl diseo de sistemas microcontrolados implican en algunos casos la visualizacin de datos alusuario, para este fin se pueden usar display 7 segmentos, display LCD de caracteres y displaygrficos LCD. En este captulo se estudia y se ejemplarizan estos dispositivos.

    5.1Display de 7 segmentosUn display 7 segmentos es un dispositivo que permite visualizar un nmero limitado decaracteres esencialmente numricos, sin embargo es posible visualizar unos pocos caracteres mascomo: b, d, E, A, o, F, C, -. Los display 7 segmentos son un arreglo de diodos LED, organizadosde tal forma que permiten visualizar los caracteres segn los segmentos que estn activos. Losdisplays de 7 segmentos tienen una designacin estndar de cada segmento que es consecutiva dela a hasta la g. Est designacin y la apariencia fsica de estos displays se pueden apreciar enlas siguientes figuras:

    Figura 5-1

    Los display de 7 segmentos son fabricados en dos formatos; de nodo comn y de ctodo comn,los display de 7 segmentos tambin existen en un formato dinmico, estos ltimos usan dos o msdgitos en un solo encapsulado conectando todos los segmentos en paralelo pero con losterminales comunes por separado. Las siguientes figuras muestran displays de 7 segmentos en suformato dinmico:

    Figura 5-2

  • 5/26/2018 Libro Simulacion Mikroc

    45/289

    45

    La terminal DP, que se puede apreciar en la figura anterior es un octavo segmento que en algunosdisplays es implementado y corresponde al punto decimal, este se usa si la aplicacin as lorequiere.

    5.1.1Control de display de 7 segmentosPara realizar el primer ejemplo con este display se bebe conocer como realizar la asignacin de

    pines del PIC, a cada uno de los segmentos del display se debe conectar un pin del PIC, parahacer un diseo optimo se puede asignar los pines en orden consecutivo de un puerto por ejemploel segmento a se conecta al pin RB0, el segmento b al pin RB1, y as sucesivamente hasta el

    segmento g al pin RB6. Sin embargo la designacin de pines la puede hacer el desarrollador demanera arbitraria. Es importante conocer una herramienta con la que cuenta el paquete desoftware MikroC PRO, que permite editar los dgitos del display, para este fin se pica el temToolsen el men del MikroC PRO, dentro de este nuevo men se pica el tem Seven SegmentEditor. Con est accin emerge una nueva ventana que permite editar de manera simple lossegmentos del display de 7 segmentos. A medida que se edita el display aparece el valorconstante que debe ser usado en las salidas del puerto que se designe para su control. El editorpermite implementar las constantes para un display de nodo o de ctodo comn, de la misma

    forma es posible usar las constantes en formato decimal o hexadecimal. La apariencia visual deleditor es la siguiente:

    Figura 5-3

    El uso de est herramienta, implica que todos los pines del display estn asignados a un mismopuerto, y en orden consecutivo como se coment anteriormente. Para la visualizacin de losdgitos en el display se debe organizar la informacin de los dgitos en orden consecutivo, en elcaso de este ejemplo del 0 al 9. Para este fin la forma de mayor simplicidad es con el uso de unacadena de datos que contenga los 10 cdigos de los dgitos. En el siguiente ejemplo se declararun arreglo constante con los cdigos de cada dgito, para este ejemplo se usar un display de

  • 5/26/2018 Libro Simulacion Mikroc

    46/289

    46

    ctodo comn. Observe la forma de declarar las constantes que deben ser insertadas antes de lafuncin main:

    const unsigned shor tDIGITOS[] ={

    0x3F, //Cdigo del dgito 0

    0x06, //Cdigo del dgito 10x5B, //Cdigo del dgito 20x4F, //Cdigo del dgito 30x66, //Cdigo del dgito 40x6D, //Cdigo del dgito 50x7D, //Cdigo del dgito 60x07, //Cdigo del dgito 70x7F, //Cdigo del dgito 80x6F, //Cdigo del dgito 9

    };

    Para visualizar los dgitos en el display de 7 segmentos, este ejemplo usar el puerto B delmicrocontrolador PIC 16F84A, la visualizacin de los dgitos estr controlada por una rutinaque cambia temporizadamente por medio de la funcin delay_ms que est predefinida por laslibreras del compilador. Est funcin tiene como parmetro de entrada un nmero entero querepresenta el tiempo en milisegundos, durante los cuales el PIC ejecutar un retardo, de la mismaforma se puede usar la funcin delay_us, que es idntica a delay_mspero en micro segundos.

    A continuacin se muestra el cdigo fuente del PIC, para este ejemplo:

    const unsigned shor tDIGITOS[] ={

    0x3F, //Cdigo del dgito 00x06, //Cdigo del dgito 10x5B, //Cdigo del dgito 20x4F, //Cdigo del dgito 30x66, //Cdigo del dgito 40x6D, //Cdigo del dgito 50x7D, //Cdigo del dgito 60x07, //Cdigo del dgito 70x7F, //Cdigo del dgito 80x6F, //Cdigo del dgito 9

    };

    voidmain ( void){

    unsigned shor tCONTADOR=0;TRISB = 0; // Configura el puerto B como salidawhile( 1 ) //Bucle infinito{

    PORTB = DIGITOS[CONTADOR]; //Se visualiza el digito correspondiente al//nmero guardado en la variable CONTADOR.CONTADOR++; //Se incrementa el valor del conteo.

  • 5/26/2018 Libro Simulacion Mikroc

    47/289

    47

    delay_ms(1000); //Se hace un retardo de 1 segundo.}

    }

    El paso siguiente es realizar la simulacin en ISIS, para este fin se buscan los siguientesdispositivos: 16F84A, RES, y 7SEG-COM-CATHODE, para la conexin entre el PIC, y el

    display se deben usar resistencias de 330. Posteriormente se arma e l siguiente circuito:

    Circuito 5-1

    Al correr la simulacin se debe ver un conteo en el display del 0 al 9, con una cadencia de unsegundo entre dgito y dgito.

    5.1.2Control de displays 7 segmentos dinmicosLa implementacin de displays dinmicos usa la misma teora de un solo display, la visualizacindinmica consiste en mostrar un solo dgito al mismo tiempo. Por ejemplo si se muestran cuatrodgitos se activa el display de las unidades, despus se apagan y se activa el dgito de las decenas,posterior mente se apaga y se activa el dgito de las centenas, y por ltimo se hace lo mismo conlas unidades de mil. Este proceso se debe hacer con una velocidad de tal manera que engae alojo humano y as se ver como si todos los dgitos estuvieran activos. Este arreglo minimiza lasconexiones elctricas y el consumo de energa, dado que en realidad solo un dgito est activopara todo tiempo. A la vista del ojo humano los cambios deben ser de 25Hz o ms, por lo tantotodos los dgitos deben verse durante un periodo igual al inverso de 25Hz, en este caso es 40msegundos. Para este ejemplo se usarn 4 displays por lo tanto el tiempo visible de cada dgitodebe ser la cuarta parte del periodo es decir 10m segundos. La forma ms eficiente de mostrar losnmeros en el display es por medio de una funcin. Con 4 dgitos es posible visualizar un nmerode 0 a 9999, por esto el nmero puede ser consignado en una variable de tipo entera. Para vercada dgito por separado se hace necesario calcular cada uno de los dgitos, por ejemplo paradeducir las unidades de mil vasta con dividir el nmero en mil, y luego restr las unidades de mildel nmero completo, este proceso se repite hasta llegar a las unidades. La activacin de losdisplays se debe hacer por medio de otro puerto para este ejemplo se har por el puerto A.Para comprender este proceso observe y analice la siguiente funcin:

  • 5/26/2018 Libro Simulacion Mikroc

    48/289

    48

    // Declaracin de las constantes para el display.const unsigned shor tDIGITOS[] ={

    0x3F, //Cdigo del dgito 00x06, //Cdigo del dgito 10x5B, //Cdigo del dgito 2

    0x4F, //Cdigo del dgito 30x66, //Cdigo del dgito 40x6D, //Cdigo del dgito 50x7D, //Cdigo del dgito 60x07, //Cdigo del dgito 70x7F, //Cdigo del dgito 80x6F, //Cdigo del dgito 9

    };

    //Funcin para visualizar el display dinmico.voidVerDisplay( intNumero ){

    unsigned shor tU; //Variable para guardar las unidades.unsigned shor tD; //Variable para guardar las decenas.unsigned shor tC; //Variable para guardar las centenas.unsigned shor tUM; //Variable para guardar las unidades de mil.UM = Numero/1000; //Clculo de las unidades de mil.C = (Numero-UM*1000)/100; //Clculo de las centenas.D = (Numero-UM*1000-C*100)/10; //Clculo de las decenas.U = (Numero-UM*1000-C*100-D*10); //Clculo de las unidades.

    PORTB = DIGITOS[U]; //Visualiza las unidades.PORTA.F0=1; //Activa en alto el primer displaydelay_ms(10); //Retado de 10m segundosPORTA=0; //Desactiva todos los displays.

    PORTB = DIGITOS[D]; //Visualiza las decenas.PORTA.F1=1; //Activa en alto el segundo displaydelay_ms(10); //Retado de 10m segundosPORTA=0; //Desactiva todos los displays.

    PORTB = DIGITOS[C]; //Visualiza las centenas.PORTA.F2=1; //Activa en alto el tercer displaydelay_ms(10); //Retado de 10m segundosPORTA=0; //Desactiva todos los displays.

    PORTB = DIGITOS[UM]; //Visualiza las unidades de mil.PORTA.F3=1; //Activa en alto el cuarto displaydelay_ms(10); //Retado de 10m segundosPORTA=0; //Desactiva todos los displays.

    }

    Por ltimo se completa el cdigo fuente con la funcin mainde la siguiente forma:

  • 5/26/2018 Libro Simulacion Mikroc

    49/289

    49

    voidmain ( void){

    unsigned shor tN=0; //Variable de conteo.intNumero=0;TRISB = 0; //Configura el puerto B como salida

    TRISA = 0; //Configura el puerto A como salidaPORTA = 0; //Se desactiva todos los displayswhile( 1 ) //Bucle infinito{//Se visualiza el valor de Nmero.VerDisplay( Numero ); //Est funcin dura aproximadamente 40m segundos.//Se cuentan 12 incrementos en N para hacer un incremento//en Nmero aproximadamente cada 500m segundos.N++;i f( N==12 ){

    N=0; //Se reinicia el conteo de N.Numero++; //Se incrementa el valor de Nmero.i f( Numero==10000 ) //Se evala si Nmero vale 10000Numero=0; //y se reinicia en 0 si es 10000.

    }}

    }

    Al terminar y compilar el programa se realiza la simulacin en ISIS, con los siguientedispositivos: 16F84A, RES, 7SEG-MPX4-CC, 7404. Finalmente se construye el siguientecircuito:

    Circuito 5-2

  • 5/26/2018 Libro Simulacion Mikroc

    50/289

    50

    Para fines prcticos los inversores 7404 se pueden remplazar por un arreglo de transistores comose ven en la siguiente imagen:

    Circuito 5-3

    Cuando la simulacin este en marcha el circuito debe mostrar un conteo de 0 a 9999 con una

    cadencia de 500m segundos entre cada incremento.

    5.2Display LCD de caracteresLos display de caracteres LCD, son mdulos prefabricados que contienen controladoresincluidos. Estos displays cuentan con un bus de datos y un bus de control, para el manejo de estosdispositivos el compilador MikroC PRO, tiene una librera predefinida para el control de estosLCD. La apariencia fsica y la vista en ISIS de estos LCD es la que se puede apreciar en lassiguientes grficas:

    Figura 5-4

    Los displays LCD, permiten graficar los caracteres contemplados en el cdigo ASCII. Ademsdel cdigo ASCII, los displays LCD admiten graficar hasta 8 caracteres diseados por eldesarrollador, otra caracterstica fundamental de los LCD, es la conexin del bus de datos,fsicamente tienen 8 bits, pero es posible configurar las conexiones con solo 4 bits. La conexinde 8 bits implica una mayor cantidad de cables para su uso, pero la velocidad de trabajo esmayor, por consiguiente la conexin de 4 bits minimiza las conexiones pero disminuye lavelocidad de trabajo. La librera predefinida en MikroC PRO, funciona con la configuracin de 4bits.

  • 5/26/2018 Libro Simulacion Mikroc

    51/289

    51

    Para ver la librera predefinida para este dispositivo y otros que tiene MikroC PRO, se debe picarla paleta de herramientas ubicada en la parte derecha del programa, est paleta se identifica conuna pesta que tiene el titulo:Library Manager. Al picar est pesta se despliega un men quemuestra las diferentes libreras habilitadas para el microcontrolador que se est trabajando. Eneste nuevo men se identifica el tem Lcd, posteriormente se puede picar cualquiera de las

    funciones que contiene la librera para ver la ayuda correspondiente. La apariencia visual de estpaleta se puede apreciar en la siguiente imagen:

    Figura 5-5

    La implementacin del display LCD, requiere del uso de instrucciones y comandos secuncialespara la configuracin y desempeo del display, sin embargo la librera de MikroC PRO,minimiza este trabajo dado que est se encarga de hacer todas ests configuraciones, haciendomucho ms simple el trabajo del desarrollador. Como primer paso para el uso del LCD, serequiere definir los pines de conexin y la ejecucin de la funcin predefinida de inicio del LCD;Lcd_Init().La definicin de los pines de conexin la asume el desarrollador de forma arbitrariasegn su criterio. Para cumplir este objetivo se usa la siguiente declaracin de constantes:

  • 5/26/2018 Libro Simulacion Mikroc

    52/289

    52

    //Pines de salida para el LCDsbitLCD_RS atRB4_bit;sbitLCD_EN atRB5_bit;sbitLCD_D7 atRB3_bit;sbitLCD_D6 atRB2_bit;sbitLCD_D5 atRB1_bit;

    sbitLCD_D4 atRB0_bit;//Bits de configuracin TRISsbitLCD_RS_Direction atTRISB4_bit;sbitLCD_EN_Direction atTRISB5_bit;sbitLCD_D7_Direction atTRISB3_bit;sbitLCD_D6_Direction atTRISB2_bit;sbitLCD_D5_Direction atTRISB1_bit;sbitLCD_D4_Direction atTRISB0_bit;

    Para cambiar los pines solo se requiere cambiar el nombre de las declaraciones del ejemploanterior. Como se puede ver en la declaracin inicial solo se necesitan 6 pines para gobernar elLCD, con 4 bits de datos y 2 bits de control, el display cuenta con un tercer pin de controldenotado como WR, este pin permite leer si el display est ocupado realizando alguna operacino permite escribir comandos y caracteres. Para fines de la librera este pin no es requerido, ysimplemente se conecta a referencia. Por ltimo se debe invocar la funcin de inicio del displaydentro de la funcin maindespus de la configuracin de puertos. Los pines de la LCD, no sedeben configurar, est tarea ya la realiza la funcin: Lcd_Init().La declaracin de la funcin maindebe quedar de la siguiente forma:

    void main( void){

    Lcd_Init(); //Inicio del LCD.while(1) //Bucle infinito.{}

    }

    Terminada la edicin del cdigo anterior el LCD, se inicializa y debe quedar listo para empezar agraficar caracteres, posicionndose en la primera fila y primera columna, mostrando el cursorparpadeante.

    Los displays de caracteres se fabrican en diversas formas y colores se pueden conseguir conpantallas de color verde, azul, y amarillo. Se fabrican con distribuciones de caracteres de formamatricial como 2 filas, 16 columnas estos se conocen como 2x16, y de la misma forma se puedenencontrar de 1x16, 2x16, 2x8, 2x20, 4x20, entre otros. Para los ejemplos empleados en estecaptulo se usar el display de 4x20. Para iniciar la simulacin del display LCD, se debe buscar eldispositivo LM044L, y el PIC 16F84A en el simulador ISIS. La referencia LM044L en ISIScorresponde a un LCD de 4x20. Finalmente se realizan las conexiones como se muestra en elsiguiente circuito:

  • 5/26/2018 Libro Simulacion Mikroc

    53/289

    53

    Circuito 5-4

    El display LCD cuenta con un pin denominado vee, este pin funciona como controlador decontraste de la pantalla, pero para fines de la simulacin no tiene efecto, este pin puede serconectado a referencia para generar el mayor contraste, algunas pantallas de gran tamaorequieren de un voltaje negativo externo para el control de este contraste, en sntesis, cuanto msnegativo sea el voltaje en Vee ms oscuro ser el contraste en la pantalla. Para fines prcticos elcontraste se puede ajustar por medio de un potencimetro como se ve en la siguiente circuito:

    Circuito 5-5

    El paso siguiente es imprimir en la pantalla informacin, para este objetivo se pueden usar cuatrofunciones. Dos de estas funciones permiten imprimir caracteres, y las otras dos imprimen cadenas

  • 5/26/2018 Libro Simulacion Mikroc

    54/289

    54

    de texto. Para imprimir los caracteres se puede hacer de dos maneras, la primera simplementeimprime los caracteres en el orden consecutivo que asume el display, y la siguiente funcinimprime los caracteres en la fila y columna que se designe por el desarrollador.

    5.2.1Funciones para imprimir caracteresLa primera funcin de impresin de caracteres es: Lcd_Chr_Cp(char out_char); cuando est

    funcin es invocada imprime en la pantalla el carcter correspondiente al cdigo ASCII, que esten el parmetro de entrada out_char.Con la impresin de un nuevo carcter la pantalla LCD,incrementa automticamente el cursor en una posicin. Para contextualizar el funcionamiento deesta funcin observe y analice el siguiente ejemplo:

    void main( void){

    Lcd_Init(); //Inicio del LCD.Lcd_Chr_Cp(H); //Ests funciones imprimen letra a letra la palabra Hola.Lcd_Chr_Cp(o);Lcd_Chr_Cp(l);

    Lcd_Chr_Cp(a);while(1) //Bucle infinito.{}

    }

    Despus de correr la simulacin se debe observar lo siguiente en la pantalla del LCD:

    Figura 5-6

    Para realizar la impresin de caracteres por medio de una coordenada fila, columna, seimplementa la funcin: Lcd_Chr(char row, charcolumn, charout_char);est funcin imprimeel carcter out_char, en la columna columny en la fila row.En el siguiente ejemplo se puede vercmo usar est funcin:

  • 5/26/2018 Libro Simulacion Mikroc

    55/289

    55

    void main( void){

    Lcd_Init(); //Inicio del LCD.Lcd_Chr_Cp(H); //Ests funciones imprimen letra a letra lapalabra Hola.Lcd_Chr_Cp(o);Lcd_Chr_Cp(l);

    Lcd_Chr_Cp(a);Lcd_Chr( 1, 6, 1); //Imprime el carcter 1, en la fila 1, columna 6Lcd_Chr( 2, 7, 2); //Imprime el carcter 2, en la fila 2, columna 7Lcd_Chr( 3, 8, 3); //Imprime el carcter 3, en la fila 3, columna 8Lcd_Chr( 4, 9, 4); //Imprime el carcter 4, en la fila 4, columna 9while(1) //Bucle infinito.{}

    }

    Despus de ejecutar la simulacin se debe tener la siguiente vista en la pantalla del LCD:

    Figura 5-7

    5.2.2Funciones para imprimir cadenas de textoEl uso de cadenas de texto es similar a las dos funciones anteriores, para esto se pueden imprimircadenas de texto en el punto donde est el flujo de la impresin del LCD, o en un punto arbitrariopor medio de las coordenadas de filas y columnas. Para hacer la impresin de una cadena de texto

    en el punto de impresin se utiliza la siguiente funcin:Lcd_Out_Cp(char*text);est cuenta conun nico parmetro de entrada que es un apuntador a la cadena de caracteres en este caso lafuncin la denota como text. Para el uso de est funcin observe y analice el siguiente ejemplo:

    void main( void){

    Lcd_Init(); //Inicio del LCD.Lcd_Out_Cp(Hola Mundo);while(1) //Bucle infinito.

  • 5/26/2018 Libro Simulacion Mikroc

    56/289

    56

    {}

    }

    La implementacin de est funcin puede hacerse con cadenas de caracteres constantes ovariables, las cadenas constantes se denotan por medio de las dobles comillas al inicio y al final

    del texto por ejemplo: Hola Mundo, el formato variable se declara con la forma: charText[20]=Hola Mundo;. Despus de correr la simulacin se bebe ver una vista como la queaparece en la siguiente figura:

    Figura 5-8

    Para imprimir una cadena de caracteres con una coordenada como punto de inicio se implementala funcin:Lcd_Out(charrow, charcolumn, char*text);. Est funcin trabaja de forma similar ala anterior, con la diferencia que se incluyen los datos de row, y column, que hacen referencia alas filas y las columnas respectivamente. Para comprender de forma clara el funcionamiento deesta funcin observe y analice el siguiente ejemplo:

    void main( void){

    Lcd_Init(); //Inicio del LCD.Lcd_Out( 1, 1, Fila 1, Columna 1 );Lcd_Out( 2, 2, Fila 2, Columna 2 );

    while(1) //Bucle infinito.{}

    }

    Despus de compilar y simular este ejemplo se debe observar una vista en la pantalla del LCDcomo la que se puede apreciar en la siguiente figura:

  • 5/26/2018 Libro Simulacion Mikroc

    57/289

    57

    Figura 5-9

    5.2.3Impresin de valores numricosLa impresin de valores numricos es de vital importancia en muchos de los desarrollos. Porejemplo cuando se desea visualizar, el estdo de una variable, un sensor como: temperatura,humedad, presin, o cualquier otro que se est manipulando. Para lograr este objetivo se puederecurrir a funciones de conversin predefinidas por el compilador. Para esto se puede utilizar lalibrera: Conversions, est librera cuenta con funciones que hacen la conversin de un valornumrico a una cadena de caracteres. Si se requiere visualizar un valor entero se usa la funcin:IntToStr(int input, char*output);, est funcin tiene dos parmetros de entrada que son: input,que es un valor entero a visualizar, y output, que es el apuntador a una cadena de caracteresdonde se quiere escribir el forma de texto el valor que contiene el valorintput. Para entender estetipo de conversin observe y analice el siguiente ejemplo:

    void main( void){

    intENTERO=123; //Declaracin de una variable entera con valor inicial 123.charText[20]; //Cadena de caracteres para impresin de datos.Lcd_Init(); //Inicio del LCD.IntToStr(ENTERO,Text ); //Funcin que hace la conversin.Lcd_Out_Cp(Text); //Impresin del texto en la pantalla LCD.while(1) //Bucle infinito.{}

    }

    La impresin de los nmeros enteros en la cadena de texto con est funcin siempre asume uncampo fijo de 7 caracteres, es decir que si el nmero tiene menos de 7 dgitos el resto del texto secompleta con espacios vacos. Despus de compilar y simular el programa se tendr una vista enISIS, como la que se puede ver en la siguiente figura:

  • 5/26/2018 Libro Simulacion Mikroc

    58/289

    58

    Figura 5-10

    La impresin de nmeros con punto decimal se puede hacer con la funcin: FloatToStr(floatfnum, char *str);. La filosofa de funcionamiento de esta funcin es idntica a la anterior quehace las conversiones de nmeros enteros. Para realizar el siguiente ejemplo se debe cambiar lareferencia del microcontrolador, esto se debe a que la capacidad de memoria del PIC 16F84A, noes suficiente para los siguientes ejercicios. A partir de este punto se usara el PIC 16F628A, quetiene la misma distribucin de pines del 16F84A, pero cuenta con una capacidad mayor dememoria y con mdulos integrados superiores como la USART. Para contextualizar sufuncionamiento observe el siguiente ejemplo:

    void main( void){

    intENTERO=123; //Declaracin de una variable entera con valor inicial 123.floatDECIMAL=12.76543; //Declaracin de una variable con punto decimal//inicializada en 12,76543.charText[20]; //Cadena de caracteres para impresin de datos.Lcd_Init(); //Inicio del LCD.IntToStr(ENTERO,Text ); //Funcin que hace la conversin entera.Lcd_Out(1,1,Text); //Impresin del texto en la pantalla LCD.FloatToStr(DECIMAL,Text ); //Funcin que hace la conversin decimal.

    Lcd_Out(2,1,Text); //Impresin del texto en la pantalla LCD.while(1) //Bucle infinito.{}

    }

    Terminada la simulacin se de tener una vista como la que se aprecia en la figura siguiente:

  • 5/26/2018 Libro Simulacion Mikroc

    59/289

    59

    Circuito 5-6

    El mismo proceso se puede seguir para otros tipos de variables como son: shortcon la funcin:ShortToStr(shortinput, char*output);Las variables longcon la funcin:LongToStr(longinput, char*output);Las variables unsigned shortcon la funcin:ByteToStr(unsigned shor tinput, char*output);Las variables unsigned longcon la funcin:LongWordToStr(unsigned longinput, char*output);Las variables unsigned int con la funcin:WordToStr(unsigned intinput, char*output);

    5.2.4Creacin de caracteres propiosLas pantallas de caracteres LCD, cuentan con la capacidad de almacenar hasta 8 caracteresdiseados por el desarrollador. Los valores ASCII, para los caracteres diseados por el usuariocorresponde a los valores numricos del 0 al 7. Por ejemplo, si se desea imprimir el primercarcter diseado por el usuario se hace con las funciones de impresin de caracteres:Lcd_Chr_Cp(0);o Lcd_Chr(1,1,0);. La creacin de caracteres propios creados por el usuario se

    guardan en un campo de memoria RAM, de la pantalla LCD, por est razn deben serreprogramados cada vez que se inicializa la pantalla LCD. Los caracteres son un conjunto devalores binarios que forman un mapa de bits, y dan como resultado la imagen en la pantalla conuna resolucin de 5 x 7 pxeles. La edicin y programacin de estos datos resulta dispendioso ycuidadoso con las rdenes de bajo nivel que se beben dar a la pantalla LCD. Sin embargo elcompilador MikroC PRO, cuenta dentro de sus herramientas con un editor para los caracteresdiseados por el desarrollador. En este editor de forma simple se edita el mapa de bits delcarcter y este genera la fraccin de cdigo en lenguaje C, requerida para programar el carcteren la pantalla. En conclusin se edita el carcter y posteriormente se pega el cdigo en la fuente

  • 5/26/2018 Libro Simulacion Mikroc

    60/289

    60

    del proyecto que se est desarrollando. Para usar este editor se busca el tem Tools dentro delmen superior del programa MikroC PRO, y dentro de este se pica el submen: LCD Customcharacter,est accin despliega la ventana del editor que tiene la apariencia que se puede ver enla siguiente figura:

    Figura 5-11

    En este editor el usuario pica los cuadros de la cuadricula de color verde y al terminar la edicindel carcter, se selecciona el valor ASCII que se asignar al carcter por medio de la casillaChar:, este valor debe ser un nmero entre 0 y 7. Terminado este proceso se pulsa el botnGENERATE, y con est accin el editor mostrar la fraccin de cdigo para usar en el programaque se est desarrollando. Las siguientes grficas muestran la vista del editor cuando se hace uncarcter en la direccin ASCII 0:

    Figura 5-12

    Como ltimo paso se debe integrar la informacin entregada por el editor y el programa deldesarrollador, para este fin observe el siguiente ejemplo:

  • 5/26/2018 Libro Simulacion Mikroc

    61/289

    61

    //Constantes creadas por el editor, est contiene el mapa de bits del carcter.const charcharacter[] = {17,14,21,14,31,4,27,0};

    //Pines de salida para el LCDsbitLCD_RS atRB4_bit;

    sbitLCD_EN atRB5_bit;sbitLCD_D7 atRB3_bit;sbitLCD_D6 atRB2_bit;sbitLCD_D5 atRB1_bit;sbitLCD_D4 atRB0_bit;

    //Bits de configuracin TRISsbitLCD_RS_Direction atTRISB4_bit;sbitLCD_EN_Direction atTRISB5_bit;sbitLCD_D7_Direction atTRISB3_bit;

    sbitLCD_D6_Direction

    atTRISB2_bit;

    sbitLCD_D5_Direction atTRISB1_bit;sbitLCD_D4_Direction atTRISB0_bit;

    //Funcin para guardar en la memoria RAN del LCD//el carcter del editor.voidCustomChar(charpos_row, charpos_char){

    chari;LCD_Cmd(64); //Direccin del carcter 0.//Bucle for para guardar el mapa de bits.for (i = 0; i

  • 5/26/2018 Libro Simulacion Mikroc

    62/289

    62

    Figura 5-13