Guía de Iniciación a PIC

download Guía de Iniciación a PIC

of 54

Transcript of Guía de Iniciación a PIC

  • 7/31/2019 Gua de Iniciacin a PIC

    1/54

    11

    Manual de Laboratorio

    para Electronica Digital 2en base a PIC, ccs y Proteus

    Luis Alberto Vargas Tijerino

  • 7/31/2019 Gua de Iniciacin a PIC

    2/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 1

    Contenido

    Laboratorio 1: Introduccin a CCS y Proteus..................................................................................................... 5

    1.1 Objetivo. ................................................................................................................................................... 5

    1.2 Introduccin. ............................................................................................................................................ 5

    1.3 ISIS-PROTEUS VSM ................................................................................................................................... 5

    1.4 Compilador PIC-C de CCS. ........................................................................................................................ 5

    1.5 Estructura de un Programa ...................................................................................................................... 6

    1.6 Procedimiento. ......................................................................................................................................... 7

    1.6.1 Crear el Proyecto en CCS .................................................................................................................. 7

    1.6.2 Crear el circuito en Proteus .............................................................................................................. 9

    1.6.3 Cargar el Archivo fuente ................................................................................................................. 10

    1.6.4 Realizar la simulacin y depuracin. ............................................................................................... 10

    1.6.5 Abrir la ventana de observacin y Agregar los Registros ............................................................... 11

    Laboratorio 2: Puertos de Entrada y Salida. .................................................................................................... 13

    2.1 Objetivo. ................................................................................................................................................. 13

    2.2 Trabajo Previo. ....................................................................................................................................... 13

    2.3 Introduccin. .......................................................................................................................................... 13

    2.4 Puertos de Entradas/Salidas. ................................................................................................................. 13

    2.4.1 Lectura del puerto........................................................................................................................... 13

    2.4.2 Lectura del pin de Entrada .............................................................................................................. 13

    2.4.3 Escritura del puerto. ....................................................................................................................... 14

    2.4.4 Escritura de un pin. ......................................................................................................................... 14

    2.4.5 Configuracin rpida de los pines I/O. ........................................................................................... 14

    2.4.6 Manejo a travs de la RAM ............................................................................................................. 15

    2.5 Procedimiento. ....................................................................................................................................... 15

    2.6 Trabajo Extra Clase ................................................................................................................................. 16

    Laboratorio 3: Pantalla LCD. ............................................................................................................................ 17

    3.1 Objetivo. ................................................................................................................................................. 17

    3.2 Introduccin. .......................................................................................................................................... 17

    3.3 Pantalla LCD. ........................................................................................................................................... 17

    3.3.1 Configuracin del Puerto para el LCD. ............................................................................................ 17

    3.3.2 Fichero o Librera LCD.C .................................................................................................................. 18

    3.3.3 Inicializacin del LCD. ...................................................................................................................... 18

  • 7/31/2019 Gua de Iniciacin a PIC

    3/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 2

    3.3.4 Ubicacin del cursor en una posicin. ............................................................................................ 18

    3.3.5 Escribir caracteres en el LCD ........................................................................................................... 18

    3.4 Procedimiento ........................................................................................................................................ 20

    3.5 Trabajo Extra Clase ................................................................................................................................. 22

    Laboratorio 4: Convertidor Analgico a Digital. .............................................................................................. 23

    4.1 Objetivo. ................................................................................................................................................. 23

    4.2 Introduccin. .......................................................................................................................................... 23

    4.3 Conversor Analgico Digital. .................................................................................................................. 23

    4.3.1 Formato del resultado de la conversin. ........................................................................................ 24

    4.3.2 Configuracin de las entradas analgicas del ADC. ........................................................................ 24

    4.3.3 Configuracin del ADC. ................................................................................................................... 25

    4.3.4 Lectura del Valor de la conversin ADC. ......................................................................................... 25

    4.4 Procedimiento. ....................................................................................................................................... 26

    4.5 Trabajo Extra clase ................................................................................................................................. 27

    Laboratorio 5: Interrupcin por Lectura de Entradas. .................................................................................... 28

    5.1 Objetivo. ................................................................................................................................................. 28

    5.2 Introduccin. .......................................................................................................................................... 28

    5.3 Interrupciones. ....................................................................................................................................... 28

    5.3.1 Configuracin de las interrupciones. .............................................................................................. 28

    5.4 Interrupcin Externa INT. ....................................................................................................................... 28

    5.4.1 Configuracin de la interrupcin externa INT. ............................................................................... 28

    5.5 Interrupcin por cambio en PORTB. ...................................................................................................... 29

    5.5.1 Configuracin de la interrupcin por cambio en PORTB. ............................................................... 29

    5.6 Procedimiento. ....................................................................................................................................... 30

    5.7 Trabajo Extra Clase ................................................................................................................................. 31

    Laboratorio 6: Interrupcin por Desbordamiento del TMR0. ......................................................................... 32

    6.1 Objetivo. ................................................................................................................................................. 32

    6.2 Introduccin. .......................................................................................................................................... 32

    6.3 Temporizadores...................................................................................................................................... 32

    6.4 Mdulo TIMER0. ..................................................................................................................................... 32

    6.4.1 Configuracin de la interrupcin por TIMER0. ............................................................................... 32

    6.4.2 Configuracin del TMR0.................................................................................................................. 33

    6.4.3 Modificacin y obtencin del valor de TIMER0. ............................................................................. 33

  • 7/31/2019 Gua de Iniciacin a PIC

    4/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 3

    6.4.4 Clculo de la temporizacin. ........................................................................................................... 33

    6.5 Procedimiento. ....................................................................................................................................... 34

    6.6 Trabajo Extra Clase ................................................................................................................................. 36

    Laboratorio 7: Generador de seal PWM. ...................................................................................................... 37

    7.1 Objetivo. ................................................................................................................................................. 37

    7.2 Introduccin. .......................................................................................................................................... 37

    7.3 Modulacin por ancho de pulsos ........................................................................................................... 37

    7.4 Mdulo CCP. ........................................................................................................................................... 37

    7.4.1 Configuracin del Mdulo CCP en Modo PWM. ............................................................................ 38

    7.4.2 Configuracin del ciclo de trabajo. ................................................................................................. 38

    7.5 Mdulo TIMER2. ..................................................................................................................................... 38

    7.5.1 Configuracin de la frecuencia PWM. ............................................................................................ 38

    7.5.2 Calculo de la Frecuencia PWM........................................................................................................ 39

    7.5.3 Resolucin del Ciclo de Trabajo. ..................................................................................................... 40

    7.6 Procedimiento. ....................................................................................................................................... 41

    7.7 Trabajo Extra Clase. ................................................................................................................................ 43

    Laboratorio 8: USART ...................................................................................................................................... 44

    8.1 Objetivo .................................................................................................................................................. 44

    8.2 Introduccin ........................................................................................................................................... 44

    8.3 Mdulo USART. ...................................................................................................................................... 44

    8.4 Modo Sncrono ....................................................................................................................................... 44

    8.5 Modo Asncrono ..................................................................................................................................... 45

    8.6 Niveles lgicos RS232 ............................................................................................................................. 45

    8.7 El mdulo USART en C. ........................................................................................................................... 46

    8.7.1 Configuracin del Mdulo USART................................................................................................... 46

    8.7.2 Transmisin de datos: ..................................................................................................................... 47

    8.7.3 Recepcin de datos: ........................................................................................................................ 47

    8.8 Procedimiento. ....................................................................................................................................... 47

    8.9 Configuracin del Hyperterminal de Windows ...................................................................................... 50

    8.10 Trabajo Extra Clase ............................................................................................................................. 53

  • 7/31/2019 Gua de Iniciacin a PIC

    5/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 4

  • 7/31/2019 Gua de Iniciacin a PIC

    6/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 5

    Laboratorio 1: Introduccin a CCS y Proteus.1.1Objetivo.Familiarizar al estudiante con el compilador CCS y el simulador de circuitos Proteus.

    1.2Introduccin.A continuacin se mostrarn los pasos necesarios para crear un nuevo proyecto en CCS y luego se mostrarn

    los pasos necesarios para simular nuestro proyecto en Proteus.

    1.3ISIS-PROTEUS VSMEl entorno de diseo electrnico PROTEUS VSM de LABCENTER ELECTRONICS (www.labcenter.co.uk) ofrece la

    posibilidad de simular cdigo de alto (lenguaje C) y bajo nivel (lenguaje ensamblador) para los

    microcontroladores y, simultneamente, con la simulacin en modo mixto de SPICE. Esto permite el diseo

    tanto a nivel de hardware como software y realizar la simulacin en un mismo y nico entorno. Para ello se

    suministra tres potentes entornos como son el ISIS para el diseo grfico, VSM (Virtual System Modelling) para

    la simulacin y el ARES para el diseo de circuitos impresos en tarjetas.

    Figura 1.1 Entorno de trabajo PROTEUS

    1.4Compilador PIC-C de CCS.El Compilador C de CCS ha sido desarrollado especficamente para PIC MCU, obteniendo la mxima

    optimizacin del compilador con estos dispositivos. Dispone de una amplia librera de funciones predefinidas,

    comandos de preprocesado y ejemplos. Adems existe gran cantidad de informacin y soporte tcnico en

    espaol en los foroswww.todopic.com.ar/forosywww.ucontrol.com.ar/foros.

    http://www.labcenter.co.uk/http://www.labcenter.co.uk/http://www.labcenter.co.uk/http://www.todopic.com.ar/foroshttp://www.todopic.com.ar/foroshttp://www.todopic.com.ar/foroshttp://www.ucontrol.com.ar/foroshttp://www.ucontrol.com.ar/foroshttp://www.ucontrol.com.ar/foroshttp://www.ucontrol.com.ar/foroshttp://www.todopic.com.ar/foroshttp://www.labcenter.co.uk/
  • 7/31/2019 Gua de Iniciacin a PIC

    7/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 6

    Tambin suministra los controladores (drivers) para diversos dispositivos como LCD, convertidores AD, relojes

    en tiempo real, EEPROM serie, etc.

    Otra caracterstica sumamente importante es que puede ser utilizado conjuntamente con ISIS-PROTEUS para

    depurar el cdigo paso a paso, lo que permite a los diseadores encontrar errores de algoritmizacin sin la

    necesidad de tener una herramienta fsica para probar el circuito.

    1.5Estructura de un ProgramaPara escribir un programa en C se deben tener en cuenta una serie de elementos bsicos de su estructura.

    LIBRERAS A INCLUIR: Contienen funciones, instrucciones, definiciones, variables y constantes quepueden ser utilizadas por el cdigo principal.

    BITS DE CONFIGURACIN O FUSES: Estos se utilizan para configurar ciertos parmetros del PICdurante la primera vez que son quemados, por ejemplo: el tipo de oscilador que se utilizar, si el PIN

    MCLR puede ser utilizado como Entrada digital, si deseamos proteger el cdigo contra lectura, etc

    DIRECTIVAS #USE: Se utilizan para configurar algunos perifricos y para controlar como el compiladorgenerar los cdigos de retardos.

    DEFINICIONES: Se utilizan para modificar fcilmente algunos valores que se utilizan con muchafrecuencia en el cdigo.

    DECLARACIONES DE VARIABLES Y CONSTANTES: indican los nombres y caractersticas de las variablesy constantes que utilizaremos en el cdigo.

    PROGRAMAS o FUNCIONES: son un conjunto de instrucciones que pueden ser llamadas para evitarrepetir el cdigo. Puede haber uno o varios, en cualquier caso siempre debe haber uno definido como

    principal mediante la inclusin de la llamada main().

    INSTRUCCIONES: Indican cmo debe comportarse el PIC en cada momento. COMNTARIOS: permiten describir lo que significa cada lnea del programa ya sea para recordarlo ms

    tarde o para mostrar el cdigo a otras personas que trabajan en el grupo.

  • 7/31/2019 Gua de Iniciacin a PIC

    8/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 7

    Figura 1.2 Estructura de un programa

    1.6Procedimiento.1.6.1 Crear el Proyecto en CCS

    1. Abrir el Compilador PIC C de CCS2. Presionar el botn close Project para cerrar todos los archivos anteriormente abiertos.3. Dar click en el botn inicio.4. Crear un nuevo archivo dando click en New Source File a como se muestra en la siguiente figura

    Bits de configuracin

    Librera

    Directiva #USE

    Instrucciones

    Funcin main

    Comentarios

  • 7/31/2019 Gua de Iniciacin a PIC

    9/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 8

    5. Crear una Nueva carpeta llamada Lab1 en la ubicacin que consideres necesaria (Ejemplo: Carpeta MisDocumentos).

    6. Abrir la carpeta Lab1 y guardar el proyecto con el nombre de Led_Blink1.7. Copiar elCdigo 1.1 Led_blink

    Cdigo 1.1 Led_blink

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 8-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled

    #FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz

    ///PROGRAMAvoid main(void){

    setup_adc_ports(NO_ANALOGS|VSS_VDD); //Todas las entradas del PIC Seran Digitales.setup_comparator(NC_NC_NC_NC); //Los comparadores Analogicos estaran apagados.while(TRUE){ //bucle infinito

    output_low(PIN_B0); //led offdelay_ms(500); //Retardo de 500ms = 0.5soutput_high(PIN_B0); //led on

    delay_ms(500); //Retardo de 500ms = 0.5s}

    }

    8. Dar clic en el botn Build All de la pestaa Compile o presionar la tecla F9.

  • 7/31/2019 Gua de Iniciacin a PIC

    10/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 9

    1.6.2 Crear el circuito en Proteus1. Abrir el simulador ISIS 7 de Proteus .2. Presionar la tecla P del teclado.3. Escribir PIC16F887 en la caja de bsqueda y darle doble clic al dispositivo en la lista de resultados para

    que aparezca en la ventana de dispositivos seleccionados.

    4. Escribir LOGICPROBE en la caja de bsqueda y darle doble clic al dispositivo en la lista de resultadospara que aparezca en la ventana de dispositivos seleccionados.

    5. Escribir LOGICTOGGLE en la caja de bsqueda y darle doble clic al dispositivo en la lista de resultadospara que aparezca en la ventana de dispositivos seleccionados.

    6. Cerrar la ventana de Pick Devices.7. En la ventana de dispositivos seleccionados darle un clic al dispositivo y luego dar un clic en la ventana

    de trabajo para que aparezca el dispositivo y finalmente ubicar los dispositivos como aparece en la

    siguiente figura.

    a.

    Si se desea rotar el dispositivo en sentido horario se debe presionar la tecla + del tecladonumrico.

    b. Si se desea rotar el dispositivo en sentido anti-horario presionar la tecla - del tecladonumrico.

    c. Si se desea rotar el dispositivo en espejo se debe presionar la combinacin de teclas ctrl+m.

    Ventana de

    dispositivos

    seleccionado

    Lista deResultados

    Caja deBusqueda

  • 7/31/2019 Gua de Iniciacin a PIC

    11/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 10

    8. Conectar el Pin del LOGICPROBE con el pin RB0 del PIC16F887.9. Guardar el Archivo.

    1.6.3 Cargar el Archivo fuente1. Darle doble clic al PIC16F887 ubicado en la ventana de trabajo2. Darle clic al botn de la caja de texto Program File y seleccionar el archivo fuente Led_Blink1.cof3. Cambiar la frecuencia de reloj a 8MHz.

    4. Luego presionar el botn Ok.1.6.4 Realizar la simulacin y depuracin.Con ayuda de la simulacin mixta podemos observar cmo se modifican las variables internas del PIC y cmo

    estas interactan con variables externas que pueden ser analgicas o digitales. Por otro lado, la depuracin

    nos permite ver paso a paso el desarrollo del cdigo que hemos cargado en el PIC con el objetivo de encontra

    errores de lgica o de secuencia.

    Ventana de

    dispositivos

    seleccionados

    Ventana de

    Trabajo.

    PIC16F887

    LOGICPROBEBarra de

    Simulacin

  • 7/31/2019 Gua de Iniciacin a PIC

    12/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 11

    1. Dar clic en el botn Play de la barra de simulacin y observar lasimulacin.

    2. Dar clic en el botn stop de la barra de simulacin.3. Dar clic en el botn step de la barra de simulacin para iniciar la simulacin paso a paso o

    presionar la combinacin de teclas Ctrl+F12.

    4. A continuacin se mostraran la ventana del cdigo fuente y la ventana de variables.

    5. En la ventana de Cdigo aparecen 4 botones .a. Step over o tecla F10: La simulacin se realiza paso a paso pero al encontrar la llamada a

    una funcin el depurador la realiza toda la funcin de una sola vez sin entrar a ella.

    b. Step into o tecla F11:La simulacin se realiza paso a paso y al encontrar la llamada a una

    funcin el depurador la realiza entra a la funcin realizndola paso a paso.

    c. Step out o combinacin Ctrl+F11: Si el depurador se encuentra en el cdigo interno de unafuncin al presionar este botn saldr del cdigo interno de la funcin y se mostrar la lnea

    siguiente a la llamada a la funcin.

    d. Run to Source Line o combinacin Ctrl+F10: Ubica al depurador en la lnea seleccionada poel usuario.

    6. Una vez que se presione uno de los botones anteriores se puede observar el cambio en la ventana decdigo y en la ventana de variables.

    1.6.5 Abrir la ventana de observacin y Agregar los Registros1. Dar clic en men debug>watch window.

    Ventana de

    Cdi o

    Ventana de

    Variables

  • 7/31/2019 Gua de Iniciacin a PIC

    13/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 12

    2. Dar clic derecho en la ventana de observacin y seleccionar Add Items (By Name)

    3. Luego dar doble clic a los registros TRISB y PORTB en la ventana Add Memory Item.

  • 7/31/2019 Gua de Iniciacin a PIC

    14/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 13

    Laboratorio 2: Puertos de Entrada y Salida.2.1Objetivo.Familiarizarse con los Puertos de Entrada y Salida mediante la implementacin prctica del ejemplo.

    2.2Trabajo Previo.Contestar las siguientes Preguntas:

    1. Mencione los puertos de entrada/salida tiene el PIC16F887.2. Cuntos pines de entrada/salida tiene el PIC16F887 en total?3. Por qu es necesario utilizar resistencias para conectar resistencias a los LED?4. Por qu es necesario utilizar resistencias de pull-up pull-down para conectar los interruptores?5. Cmo se eliminan los rebotes de los botones?

    2.3Introduccin.En casi todos los proyectos es necesario leer alguna entrada de tipo digital conectada a pulsadores

    interruptores, sensores digitales o similares; tambin es necesario escribir datos por medio de una salida de

    tipo digital conectada a LED, pantallas LCD, display de siete segmentos o similares. Este laboratorio trata de

    explicar cmo realizar la configuracin de los puertos del PIC para utilizarlos como entradas o salidas digitales.

    2.4Puertos de Entradas/Salidas.Los Microcontroladores PICtienen terminales de entrada/salida (I/O, Input/Output) divididos en puertos, que

    se encuentras nombrados alfabticamente A, B, C, D, etc. Cada puerto puede tener hasta 8 terminales que se

    pueden comportar como una I/O digital.

    El PIC16F887 tiene hasta 35 I/O digitales de propsito general, y en dependencia de la configuracin de sus

    perifricos pueden estar disponibles como I/O de propsito general. Por ejemplo si utilizamos el mduloUSART (Transmisin Serial) los pines correspondientes a este perifrico sern utilizados para atender las

    operaciones del mismo y no podrn ser utilizados como I/O de propsito general.

    2.4.1 Lectura del puerto.La siguiente funcin configura el puerto como entrada y realiza su lectura:

    input_x( )

    Sintaxis value = input_x()

    Parametros value es el valor booleano que se lee de la entradax.

    2.4.2 Lectura del pin de EntradaLa siguiente funcin configura el PIN como entrada y realiza su lectura:

    input( )

    Sintaxis value = input(pin)

    Parametros value es el valor que se lee delpin x.

  • 7/31/2019 Gua de Iniciacin a PIC

    15/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 14

    2.4.3 Escritura del puerto.La siguiente funcin configura el puerto como salida y realiza su escritura:

    output_x( )

    Sintaxis output_x (value)

    Parametros value es el valor de 8 bits que se escribe en la salidax.

    2.4.4

    Escritura de un pin.Las siguientes funciones configuran el pin como salida y realizan su escritura:

    output_low( ), output_high( ) y output_bit( )

    Sintaxis output_low(pin ) Pone a 0 el pinoutput_high(pin) Pone a 1 el pinoutput_bit(pin,value) Le da el valor de value al pin.

    2.4.5 Configuracin rpida de los pines I/O.Una configuracin rpida genera cdigo ms eficiente, ya que el compilador asume que los pines de I/O sern

    cambiados solo si es especificado por el usuario. A continuacin se muestra la funcin para decidir si los pinesde un puerto son de entrada o salida:

    set_tris_x( )

    Sintaxis set_tris_x(value)

    Parametros value es un valor de 8 bits, cada bit determina si el pin correspondiente es de entrada o salidaPor ejemplo: si el bit 0 es igual a 0 entonces el pin 0 ser salida y si el bit 4 es 1 entonces el bit

    4 ser una entrada.

    Al utilizar la funcin anterior siempre es necesario utilizar la siguiente directiva:

    #USE FAST_IO

    Sintaxis #use fast_io (port)

    Parametros portpuede ser:

    A solo el puerto A B solo el puerto B C solo el puerto C D solo el puerto D E solo el puerto E F solo el puerto F G solo el puerto G H solo el puerto H I solo el puerto I J solo el puerto J ALL. Todos los puertos

  • 7/31/2019 Gua de Iniciacin a PIC

    16/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 15

    2.4.6 Manejo a travs de la RAMLa siguiente etiqueta nos permite manipular los puertos directamente como un dato:

    #byte PORTx=getenv(SFR:PORTx)

    2.5Procedimiento.1. Repetir los pasos del 1 al 4 enCrear el Proyecto en CCS.2. Crear una Nueva carpeta llamada Lab2 y una subcarpeta llamada LED_Botones en la ubicacin que

    consideres necesaria (Ejemplo: Carpeta Mis Documentos).

    3. Abrir la carpeta LED_Botones y guardar el proyecto con el nombre de LED_Botones.4. Copiar elCdigo 2.1 Led_botones

    Cdigo 2.1 Led_botones

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 8-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz

    #use FAST_IO(D)#byte PORTD=getenv("SFR:PORTD")

    ///PROGRAMAvoid main(void){

    setup_adc_ports(NO_ANALOGS|VSS_VDD); //Todas las entradas del PIC Seran Digitales.setup_comparator(NC_NC_NC_NC); //Los comparadores Analogicos estaran apagados.set_tris_d(0x0F); //Configura PORTD como salidas y PORTD como entradas.while(TRUE){ //bucle infinitooutput_b(input_a()); //El PORTB se configura como salida y es igual a PORTAoutput_low(PIN_C0); //El PIN_C0 se configura como salida y se pone en bajooutput_high(PIN_C0); //El PIN_C0 se configura como salida y se pone en altooutput_bit(PIN_C1,0); //El PIN_C1 se configura como salida y se pone en bajooutput_bit(PIN_C1,1); //El PIN_C1 se configura como salida y se pone en altooutput_bit(PIN_C2,input(PIN_A0)); //El PIN_C2 se configura como salida y se le asigna el

    //valor del PIN_A0 configurado como entrada.PORTD=input_a(); //El valor del nibble superior de PORTA se transferira al de PORTD

    }}

    5. Presionar F9 para compilar el proyecto.6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICE el PIC16F887, el LOGICSTATE y el LOGICPROBE.

  • 7/31/2019 Gua de Iniciacin a PIC

    17/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 16

    7. Cargar el Archivo fuenteLed_Botones.cof,Realizar la simulacinyAbrir la ventana de observacin yAgregar los Registros TRISA, TRISB, TRISC, TRISD, PORTA, PORTB, PORC y PORTD.

    a. Cul es el valor del registro TRISD despus de la lnea 32?b. Cul es el valor de los registros TRISB, TRISA, PORTB y PORTA despus de la lnea 34?c. Cul es el valor de los registros TRISC y PORTC despus de las lneas 35, 36, 37, 38 y 39?d. Cul es el valor del registro PORTD despus de la lnea 41?e. Hacia dnde se realiza el salto despus de la lnea 42?f. Cambia los valores de los LOGICSTATES y contesta de nuevo las preguntas a hasta f.g. Cul es el valor de PORTD despus de la lnea 41 si PORTA es mayor a 0b00001111?h. Cul es el valor de PORTD despus de la lnea 41 si PORTA es menor a 0b00001111?

    2.6Trabajo Extra Clase1. Elabore un programa en CCS que encienda los LED conectados a PORTB (1 a la vez) cada 1 segundo.2. Elabore un programa que muestre en PORTD el valor ingresado a PORTB.3. Explique si es posible elaborar un programa que combine las dos tareas de los problemas 1 y 2.

    LOGICSTATE

    LOGICPROBE

    PIC16F887

  • 7/31/2019 Gua de Iniciacin a PIC

    18/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 17

    Laboratorio 3: Pantalla LCD.3.1Objetivo.Familiarizarse con la conexin y utilizacin de la pantalla LCD 16x2 mediante la implementacin prctica del

    ejemplo LCD_HolaMundo.

    3.2Introduccin.Existe una gran cantidad de proyectos en las que es necesario visualizar informacin a travs de una pantalla

    de bajo costo. En este laboratorio explicaremos cmo realizar la comunicacin y configuracin entre el PIC y e

    LCD de 16 caracteres por 2 lneas que posee un controlador del tipo HD44780.

    3.3Pantalla LCD.Las Pantallas LCD tienen la capacidad de mostrar cualquier carcter alfanumrico, permitiendo presentar la

    informacin que genera cualquier equipo electrnico de forma fcil y econmica. Cada carcter consta de una

    matriz de puntos (generalmente 5x7), que se distribuyen en una, dos, tres o cuatro lneas de 16 hasta 40

    caracteres. Estas pantallas incorporan un microcontrolador HD44780 que gobierna su funcionamiento.

    Estas pantallas tienen la posibilidad de mostrar letras griegas y caracteres elaborados por el usuario.

    3.3.1 Configuracin del Puerto para el LCD.Existen dos maneras de configurar el puerto que se conectara al LCD, la primera realiza la conexin mediante

    el puerto completo para ello se realiza lo siguiente.

    #define use_portx_lcd TRUE

    O

    #define LCD_DATA_PORT getenv("SFR:PORTx")

    Donde x es el puerto a utilizar, este debe tener 8 bits.La desventaja de utilizar esta instruccin es que los

    pines quedan configurados por defecto de la siguiente manera:

    PIN_X0 ENABLEPIN_X1 RSPIN_X2 RWPIN_X4 D4PIN_X5 D5PIN_X6 D5PIN_X7 D5

    La segunda forma de configurar el puerto del LCD es ms flexible, ya que nos permite seleccionar la conexin

    de cada pin. A continuacin se muestra cmo hacerlo.

  • 7/31/2019 Gua de Iniciacin a PIC

    19/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 18

    ...#define LCD_ENABLE_PIN PIN_X5#define LCD_RS_PIN PIN_X4#define LCD_RW_PIN PIN_X6#define LCD_DATA4 PIN_X0#define LCD_DATA5 PIN_X1#define LCD_DATA6 PIN_X2#define LCD_DATA7 PIN_X3...

    Nota: El usuario puede variar el orden de los pines que se muestra en la configuracin anterior.

    3.3.2 Fichero o Librera LCD.CEl archivo LCD.C es un fichero (driver) propio del compilador PIC-C, para utilizarlo es necesario realizar la

    llamada de las siguiente manera.

    ...//Configuracin del Puerto.#include ...

    3.3.3 Inicializacin del LCD.El primer paso para utilizar el LCD es inicializarlo, con esto ocurre lo siguiente:

    1. Se borra el LCD.2. Se configura en el formato de 4 bits y con caracteres de 5x8 puntos3. El LCD se pone en modo encendido4. El cursor se apagado y se configura para que no parpadee.

    Para inicializar el LCD es necesario utilizar la siguiente funcin.

    Lcd_init()

    3.3.4 Ubicacin del cursor en una posicin.Para ubicar el cursor en una ubicacin especificada por el usuario se utiliza la siguiente funcin:

    Lcd_gotoxy( )

    Sintaxis Lcd_gotoxy(x , y)

    Parametros xes la fila en que se ubicar el cursor.yes la columna en que se ubicar el cursor.

    3.3.5 Escribir caracteres en el LCDPara escribir caracteres en el LCD es posible utilizar dos funciones, la primera funcin es la siguiente:

    Lcd_putc( )

    Sintaxis Lcd_putc(c)

    Parametros cpuede ser el carcter que se escribir en el LCD o puede ser una cadena de caracteres.

    La segunda funcin que nos permite escribir en el LCD es la siguiente:

  • 7/31/2019 Gua de Iniciacin a PIC

    20/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 19

    Printf( )

    Sintaxis printf(fname,string,values),

    Parametros String es la cadena de caracteres que se escribir en el LCD.Fname es el nombre de la funcin que utilizar printf, en este caso ser lcd_putc.

    Values es la lista de variables que sern impresas separadas por comas.

    El formato es %nt, donde n es opcional y puede ser:1-9: para especificar cuantos caracteres se deben especificar.

    01-09: para indicar cantidad de ceros a la izquierquierda.1.1-9.9: para coma flotante.

    t puede indicar:c Carcter.s Cadena de caracteres.u Entero sin signo.d Entero con signo.Lu Entero largo sin signo.Ld Entero largo con signo.x Entero Hexadecimal con letras en minsculas.X Entero Hexadecimal con letras en maysculas.Lx Entero Largo Hexadecimal (minsculas).LX Entero largo Hexadecimal (maysculas).f Flotante con truncado.g Flotante en formato exponencial.w Entero sin signo con decimales insertados. La 1 cifra indica el total, la 2 el

    nmero de decimales.

    La Tabla 3.1 ejemplos de los distintos formatos:

    Tabla 3.1

    Formato Valor = 0x12 Valor = 0xFE%03u 018 254

    %u 18 254%2u 18 *%5 18 254%d 18 -2%x 12 Fe%X 12 FE

    %4X 0012 00FE%3.1w 1.8 25.4

    A continuacin se muestran los caracteres especiales que se utilizan en el LCD:

    \f: Se utiliza para borrar el LCD y se ubica al inicio de cada lnea. \n: Se utiliza para realizar un salto de lnea. \b: Se utiliza para mover el cursor un espacio hacia atrs.

    La Tabla 3.2 muestra los caracteres que se pueden escribir en el LCD.

  • 7/31/2019 Gua de Iniciacin a PIC

    21/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 20

    Tabla 3.2

    3.4Procedimiento1. Repetir los pasos del 1 al 4 enCrear el Proyecto en CCS.2. Crear una Nueva carpeta llamada LCD_HolaMundo.3. Abrir la carpeta LCD_HolaMundo y guardar el proyecto con el nombre de LCD_HolaMundo.4. Copiar elCdigo 3.1 LCD_HolaMundo

    Cdigo 3.1 LCD_HolaMundo

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.

  • 7/31/2019 Gua de Iniciacin a PIC

    22/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 21

    //Fecha: 12-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled

    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=4Mhz

    //Definir Pines de conexion al LCD#define LCD_ENABLE_PIN PIN_B0#define LCD_RS_PIN PIN_B1#define LCD_RW_PIN PIN_B2#define LCD_DATA4 PIN_B3#define LCD_DATA5 PIN_B4#define LCD_DATA6 PIN_B5#define LCD_DATA7 PIN_B6

    #include //Llamada a la libreria lcd.c

    int a=135; //Declaramos e iniciamos along b=0x1234; //Declaramos e iniciamos bint32 c=12345678; //Declaramos e iniciamos cfloat d=3.98;

    void main(){setup_adc_ports(NO_ANALOGS|VSS_VDD); //Todas las entradas del PIC Seran Digitales.setup_comparator(NC_NC_NC_NC); //Los comparadores Analogicos estaran apagados.lcd_init(); //Inicializamos el LCD.while(1){

    lcd_putc("\f Hola Mundo\n"); //Se escribe en el LCD la cadena Hola mundo.lcd_putc(0b11100000); //Escribe el caracter alfaprintf(lcd_putc,"\f %03u %u",a,a); //Escribe a en 4 formatosprintf(lcd_putc,"\n %x %d",a,a); //Escribe a en 4 formatos en la segunda lineaprintf(lcd_putc,"\f %X %2.1w",a,a); //Escribe a en formatos hexadecimal y con flotante

    printf(lcd_putc,"\f %Lu \n %Ld",b,b); //Escribe b en formato unsigned y formato decimalprintf(lcd_putc,"\f %Lu \n%Ld",c,c); //Escribe b en formato unsigned y formato decimal

    //! printf(lcd_putc,"\f %f \n %g",d,d); //Escribe c en formato flotante truncado y con exponencial}

    }

    5. Presionar F9 para compilar el proyecto.6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICE el PIC16F887y el LM016L.

  • 7/31/2019 Gua de Iniciacin a PIC

    23/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 22

    7. Cargar el Archivo fuenteLCD_HolaMundo.cofyRealizar la simulacin.8. Conteste:

    a. Qu ocurre en las lneas 45 a la 53?b. Comente la lnea 53 y descomente la lnea 54 y explique que ocurre en la lnea 54?

    3.5Trabajo Extra Clase1. Elabore un programa en CCS que muestre en la primera lnea del LCD PORTB= y en la segunda lneamuestre el valor de PORTB en formato unsigned int.

    LM016

    PIC16F88

  • 7/31/2019 Gua de Iniciacin a PIC

    24/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 23

    Laboratorio 4: Convertidor Analgico a Digital.4.1Objetivo.Familiarizarse con el mdulo de conversin analgico digital mediante la implementacin prctica del ejemplo

    Leer_ADC.

    4.2Introduccin.Existe una gran cantidad de proyectos en las que es necesario que nuestros dispositivos digitales realicen

    operaciones de control de variables analgicas tales como temperatura, presin, flujo, caudal, peso, distancia

    velocidad o similares. Este laboratorio trata de explicar cmo realizar la configuracin del mdulo ADC del PIC

    para realizar las mediciones antes mencionadas.

    4.3Conversor Analgico Digital.Un conversor analgico-digital (ADC, Analog-to-Digital Converter) es un dispositivo electrnico capaz de

    convertir una entrada analgica de voltaje en un valor binario, Se utiliza en equipos electrnicos como

    ordenadores, grabadores de sonido y de vdeo, y equipos de telecomunicaciones. La seal analgica, que vara

    de forma continua en el tiempo, se conecta a la entrada del dispositivo y se somete a un muestreo a unavelocidad fija, obtenindose as una seal digital a la salida del mismo. [Wikipedia]

    El convertidor Analgico-digital del PIC16F887 permite la conversin de una seal de entrada analgica a un

    valor en representacin binaria de 10 bits o de 8 bits. Este dispositivo usa 13 entradas analgicas que son

    multiplexadas hacia un circuito de muestreo y retencin (Sample and Hold). La salida del muestreo y retencin

    es conectada a la entrada del convertidor. El convertidor genera un resultado binario de 10 bits o de 8 bits

    mediante aproximaciones sucesivas y almacena el resultado de la conversin en dos registros (ADRESL y

    ADRESH). La Figura 4.1 muestra el diagrama en bloques del mdulo ADC y la Figura 4.2 muestra el modelo de

    la Entrada Analgica.

    Figura 4.1 Diagrama en Bloque del ADC

  • 7/31/2019 Gua de Iniciacin a PIC

    25/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 24

    Figura 4.2 Modelo de una Entrada Analgica

    Como se observa en la Figura 4.1 es posible seleccionar el voltaje de referencia del ADC mediante software.

    A continuacin se muestra la funcin de transferencia del ADC.

    4.3.1 Formato del resultado de la conversin.Para especificar el formato del resultado de la conversin se escribe arriba de todas las funciones lo siguiente:

    #device adc=valor

    Donde el valor que se le asigna aADCpuede ser de 8 10 bits.

    4.3.2 Configuracin de las entradas analgicas del ADC.Para realizar la configuracin de los puertos ADC se utiliza la siguiente funcin:

    setup_adc_ports(value)

    Sintaxis setup_adc_ports(value)

    Parametros value podra ser una o ms de las siguientes constantes:

    sAN0 Selecciona AN0 analgica sAN1 Selecciona AN1 analgica sAN2 Selecciona AN2 analgica sAN3 Selecciona AN3 analgica

  • 7/31/2019 Gua de Iniciacin a PIC

    26/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 25

    sAN4 Selecciona AN4 analgica sAN5 Selecciona AN5 analgica sAN6 Selecciona AN6 analgica sAN7 Selecciona AN7 analgica sAN8 Selecciona AN8 analgica sAN9 Selecciona AN9 analgica sAN10 Selecciona AN10 analgica sAN11 Selecciona AN11 analgica sAN12 Selecciona AN12 analgica sAN13 Selecciona AN13 analgica NO_ANALOGS Selecciona ninguna analgica ALL_ANALOG Selecciona todas analgica VSS_VDD Seleccionamos Vss como Vref- y Vdd como Vref+ VSS_VREF Seleccionamos Vss como Vref- y Vref+ como Vref+ VREF_VREF Seleccionamos Vref- como Vref- y Vref+ como Vref+ VREF_VDD Seleccionamos Vref- como Vref- y Vdd como Vref+

    Ejemplo setup_adc_ports(sAN0|sAN1|VSS_VDD);//Seleccionamos AN0 y AN1 como analgicas, Vss y Vdd como Vref.

    4.3.3 Configuracin del ADC.Para realizar la configuracin del ADC se utiliza la siguiente funcin:

    setup_adc()

    Sintaxis setup_adc(value)

    Parametros mode podra ser una o ms de las siguientes constantes:

    ADC_OFF Apagamos el ADC. ADC_CLOCK_DIV_2 Utiliza Fosc/2 (ej. Fosc=1MHz) ADC_CLOCK_DIV_8 Utiliza Fosc/8 (ej. Fosc=1MHz) ADC_CLOCK_DIV_32 Utiliza Fosc/32 (ej. Fosc=20MHz y 8MHz) ADC_CLOCK_INTERNAL Utiliza el reloj RC interno.

    Ejemplo setup_adc_ports(sAN0|sAN1|VSS_VDD);//Seleccionamos AN0 y AN1 como analgicas, Vss y Vdd como Vref.

    4.3.4 Lectura del Valor de la conversin ADC.Para realizar la lectura del valor de la conversin ADC se utiliza la siguiente funcin:

    read_adc( )

    Sintaxis value = read_adc ([mode])

    Parametros mode es un parmetro opcional. Si es usado puede ser uno de los siguientes valores:

    ADC_START_AND_READ Toma lecturas continuamente. Este est por defecto. ADC_START_ONLY Inicia la conversin y no retorna valor. ADC_READ_ONLY Lee el ltimo valor de conversin.

    Ejemplo read_adc(); //Se inicia la conversin y retorna el valor del//ADC.

    read_adc(ADC_START_ONLY); //Inicia la conversion AD....otras tareasValue=read_adc(READ_ONLY); //Lee el valor del ADC.

  • 7/31/2019 Gua de Iniciacin a PIC

    27/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 26

    4.4Procedimiento.1. Repetir los pasos del 1 al 4 enCrear el Proyecto en CCS.2. Crear una Nueva carpeta llamada Lab3 en la ubicacin que consideres necesaria (Ejemplo: Carpeta Mis

    Documentos).

    3. Abrir la carpeta Lab3 y guardar el proyecto con el nombre de Leer_ADC.4. Copiar el Cdigo 4.1 Leer_ADC

    Cdigo 4.1 Leer_ADC

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 16-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #device adc=10

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)

    #FUSES NOPUT //No Power Up Timer#FUSES NOMCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz

    //Definir Pines de conexion al LCD#define LCD_ENABLE_PIN PIN_B5

    #define LCD_RS_PIN PIN_B4#define LCD_RW_PIN PIN_B6#define LCD_DATA4 PIN_B0#define LCD_DATA5 PIN_B1#define LCD_DATA6 PIN_B2#define LCD_DATA7 PIN_B3

    #include //Llamada a la libreria lcd.c

    ///PROGRAMAvoid main(void){

    long val;setup_comparator(NC_NC_NC_NC); //Los comparadores Analogicos estaran apagados.setup_adc_ports(sAN0|VSS_VDD); //AN0 sera analogica las demas Digitales.SETUP_ADC(ADC_CLOCK_INTERNAL); //La fuente de reloj para la conversion sera

    //El circuito RC interno del PIC, su TAD tipico//es de 4us.

    //! SETUP_ADC(ADC_CLOCK_DIV_32); //La fuente de reloj para la conversion sera//Fosc externa entre 32, por lo tanto TAD=4us.

    SET_ADC_CHANNEL(0); //Seleccionamos canal 0 para leerlo.lcd_init(); //Inicializamos el LCD.lcd_putc("\fValor Leido="); //Se muestra en el LCD la cadena "Valor Leido="while(TRUE){ //Inicia el ciclo Infinito.

    val=READ_ADC(); //Se lee y guarda el valor del ADCprintf(lcd_putc,"%4Lu",val); //Se imprime en el LCD el valor leido del ADClcd_gotoxy(13,1); //Se envia el cursor a la columna 13 fila 1.

    }}

  • 7/31/2019 Gua de Iniciacin a PIC

    28/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 27

    5. Compilar el proyecto.6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICEel PIC16F887, el LCD 16x2 y el POT-HG.

    7. Cargar el Archivo fuenteLeer_ADC.cofyRealizar la simulacin.8. Conteste:

    a. Cunto es el tiempo que transcurre para que el ADC realice la adquisicin del dato en la lnea53?

    b. Comente la lnea 44, descomente la lnea 46 y conteste la pregunta anterior.4.5Trabajo Extra clase

    1. Conteste:a. Elabore una lista de algunos sensores de temperatura, presin, luz y nivel.b. Cmo funciona un LM35?

    2. Realice un programa en CCS que muestre la temperatura medida por un sensor LM35.

    LCD 16x2

    PIC16F887

    POT-HG

  • 7/31/2019 Gua de Iniciacin a PIC

    29/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 28

    Laboratorio 5: Interrupcin por Lectura de Entradas.5.1Objetivo.Familiarizarse con la utilizacin de la interrupcin por cambio en las Entradas digitales mediante la

    implementacin prctica de esta gua de laboratorio.

    5.2Introduccin.En casi todos los proyectos es necesario leer alguna entrada de tipo digital conectada a pulsadores

    interruptores, sensores digitales o similares. Este laboratorio trata de explicar cmo realizar esto de la manera

    ms eficiente.

    5.3Interrupciones.Una Interrupcin consiste en un mecanismo por el cual un evento interno o externo puede interrumpir la

    ejecucin de un programa en cualquier momento. Esto produce un salto automtico a una subrutina de

    atencina la interrupcin, sta atiende inmediatamente el evento y retoma luego la ejecucin del programa

    exactamente donde estaba en el momento de ser interrumpido.

    Las fuentes de interrupcin dependen del PIC utilizado. Por ejemplo, el PIC16F84 tiene 4 fuentes de

    interrupcin mientras que la familia PIC16F88X tiene entre 13 y 14.

    Los PIC de gama baja y media tienen un nico vector de interrupcin situado en la direccin 04h de programa

    mientras que los de gama alta tienen dos vectores de interrupcin de distinta prioridad, alta y baja, situados

    en la posicin 08h y 18h de la memoria.

    5.3.1 Configuracin de las interrupciones.A continuacin se describen un conjunto de funciones que se utilizan para configurar las interrupciones:

    disable_interrupts(level) Desabilita la interrupcin Especificada.

    enable_interrupts(level) Habilita la interrupcin especificada.

    clear_interrupt(level) Limpia el flag de interrupci especificado. Esto puede ser utilizado durante una

    interrupcin global, o para prevenir la utilizacin de una interrpupcin.

    5.4Interrupcin Externa INT.La fuente de interrupciones externa INT se utiliza para atender eventos externos en tiempo real, por ejemplo

    detectar el cruce por cero de una seal. La interrupcin se puede producir si y slo si el cambio en RB0/INT es

    durante el flanco ascendente o si y slo si es durante el flanco descendente.

    5.4.1 Configuracin de la interrupcin externa INT.Para realizar la configuracin de la interrupcin externa INT es necesario realizar lo siguiente:

    1. Escribir la rutina de interrupcin y sobre ella su directiva a como se muestra a continuacin:#INT_EXTVoid int_ext_isr(){

  • 7/31/2019 Gua de Iniciacin a PIC

    30/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 29

    Cdigo de la interrupcion

    }

    2. Dentro de la rutina principal habilitar las interrupciones globales y Habilitar la interrupcin INT a comose muestra a continuacin:

    Void main(){enable_interrups(GLOBAL); //Habilita las interrupciones Globales.enable_interrups(INT_EXT); //Habilita las interrupcion INT_EXT.}

    5.5Interrupcin por cambio en PORTB.La fuente de interrupciones por cambio en PORTB se utiliza para atender eventos externos en tiempo real,

    tales como manejo de botones o interruptores. La interrupcin se puede producir si el cambio en alguno de

    los Pines en RB es durante el flanco ascendente o si es durante el flanco descendente.

    Todos los pines del PORTB estn configurados como pines de Interrupcin-en-cambio. Para que se habilite la

    interrupcin el valor presente es comparado con el valor almacenado en la ltima lectura para determinar

    cul bit ha sido cambiado o cual no coincide.

    Esta interrupcin puede despertar al dispositivo del modo sleep. Para salir de la rutina de interrupcin el

    usuario debe leer el PORTB para eliminar la condicin de error.

    5.5.1 Configuracin de la interrupcin por cambio en PORTB.Para realizar la configuracin de la interrupcin por es necesario realizar lo siguiente:

    1. Escribir la rutina de interrupcin y sobre ella su directiva a como se muestra a continuacin:#INT_RBxVoid RBx_isr(){

    Cdigo de la interrupcion

    }

    2. Dentro de la rutina principal habilitar las interrupciones globales y Habilitar la interrupcin TMR0 acomo se muestra a continuacin:

    Void main(){enable_interrups(GLOBAL); //Habilita las interrupciones Globales.enable_interrups(INT_RBx); //Habilita las interrupcion INT_RBx.}

  • 7/31/2019 Gua de Iniciacin a PIC

    31/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 30

    5.6Procedimiento.1. Repetir los pasos del 1 al 4 enCrear el Proyecto en CCS.2. Crear una Nueva carpeta llamada Lab4 y una subcarpeta llamada LED_Botones2 en la ubicacin que

    consideres necesaria (Ejemplo: Carpeta Mis Documentos).

    3. Abrir la carpeta LED_Botones2 y guardar el proyecto con el nombre de LED_Botones2.4. Copiar el Cdigo 5.1 Led_botones2

    Cdigo 5.1 Led_botones2

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 8-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset

    #FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz///PROGRAMA#INT_RBvoid RB_ISR(void){ //Inicio de la interrupcion por cambio de PORTB

    int aux; //Declaracion de la variable aux.output_bit(PIN_A0,input(PIN_B0)); //Hacemos que RA0 sea igual a RB0.aux=input_B(); //Leemos el valor del PORTB para eliminar la condicion

    } //de error y que sea posible salir de la interrupcion.

    void main(void){setup_adc_ports(NO_ANALOGS|VSS_VDD); //Todas las entradas del PIC Seran Digitales.setup_comparator(NC_NC); //Los comparadores Analogicos estaran apagados.ENABLE_INTERRUPTS(GLOBAL); //Habilitamos las interrupciones GlobalesENABLE_INTERRUPTS(INT_RB0); //Habilitamos las interrupciones por cambio en PIN_B0while(TRUE){ //bucle infinito

    SLEEP(); //Ponemos el PIC en modo de bajo consumo.}

    }

    5. Compilar el proyecto.6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICE el PIC16F887, el LOGICSTATE y el LOGICPROBE.

  • 7/31/2019 Gua de Iniciacin a PIC

    32/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 31

    7. Cargar el Archivo fuenteLed_Botones2.cofyRealizar la simulacin.8. Conteste:

    a. Qu ocurre en la lnea 39?b. De doble clic en la lnea 29 para generar un break point y explique cundo ocurre el salto hacia

    la lnea 29.

    c. Comente la lnea 36 y conteste la pregunta anterior de nuevo.5.7Trabajo Extra ClaseElabore un programa en CCS que muestre una secuencia de LED conectados al PORTC (1 a la vez) cada 1

    segundo y que muestre en PORTC el valor ingresado por PORTB (utilizar interrupcin por cambio en PORTB).

    PIC16F887

    LOGICSTATE

    LOGICPROBE

  • 7/31/2019 Gua de Iniciacin a PIC

    33/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 32

    Laboratorio 6: Interrupcin por Desbordamiento del TMR0.6.1Objetivo.Utilizar la interrupcin por desbordamiento del TMR0 mediante la implementacin de esta prctica de

    laboratorio para comprender su funcionamiento.

    6.2Introduccin.En el Laboratorio anterior se estudi el concepto de interrupcin, especficamente las interrupciones

    producidas por cambio en las entradas. En este laboratorio estudiaremos la interrupcin por desbordamiento

    del TMR0 en el cual realizaremos un ejemplo prctico.

    6.3Temporizadores.Los TIMERs o Temporizadores son mdulos integrados en el PIC que permiten realizar cuentas tanto de

    eventos internos como externos. Cuando la cuenta es interna se habla de temporizacin y cuando la cuenta es

    externa se habla de contador.

    Los Temporizadores son tiles en caso de requerir que los eventos ocurran en tiempos exactas, ya que sin

    ellos hay que tener en cuenta el tiempo de ejecucin de las instrucciones y de los saltos.

    Por lo general se comete el error de realizar las temporizaciones mediante retardos pero esto se hace

    imposible si necesitamos que el PICrealice otra tarea mientras se est ejecutando la temporizacin.

    La manera ms eficiente de realizar una temporizacin es cargar el valor en uno de los TIMER, luego se espera

    a que ocurra la interrupcin cuando este se desborde y finalmente se realizan ajustes finos mediante retardos

    pequeos para aumentar la precisin de la temporizacin.

    6.4Mdulo TIMER0.El mdulo TIMER0 es un Temporizador/Contador con las siguientes caractersticas:

    Temporizador/Contador de 8bits. Prescaler de 8 bits (compartido con el Watchdog Timer). Fuente de reloj externa o interna programable. Interrupcin por desbordamiento.

    6.4.1 Configuracin de la interrupcin por TIMER0.Para realizar la configuracin de la interrupcin por TIMER0 es necesario realizar lo siguiente:

    1. Escribir la rutina de interrupcin y sobre ella su directiva a como se muestra a continuacin:#INT_TMR0Void TMR0_isr(){

    Cdigo de la interrupcion

    }

  • 7/31/2019 Gua de Iniciacin a PIC

    34/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 33

    2. Dentro de la rutina principal habilitar el FLAG de interrupcin TMR0 y habilitar el FLAG de interrupcionglobal, si no se habilita este FLAG no se realizar ninguna interrupcin.

    Void main(){enable_interrups(GLOBAL); //Habilita las interrupciones Globales.enable_interrups(INT_TMR0);//Habilita las interrupcion INT_RBx.}

    6.4.2 Configuracin del TMR0.La funcin que se encarga de realizar la configuracin del mdulo TIMER0 es la siguiente:

    setup_timer_0 (mode)

    Sintaxis setup_timer_0 (mode)

    Parametros mode podra ser dos de las siguientes constantes:

    T0_INTERNAL T0_EXT_L_TO_H T0_EXT_H_TO_L T0_DIV_1 T0_DIV_2 T0_DIV_4 T0_DIV_16 T0_DIV_32 T0_DIV_64 T0_DIV_128 T0_DIV_256

    periodes un int de 0-255 que determina cuando el valor del reloj se reinicia.

    postscale es un numero de 1-16 que determina cuantos desbordes del timer antes de una

    interrupcin. (1 significa una vez, 2 significa 2 veces, etc.).

    Ejemplo Setup_timer_0(T0_INTERNAL|T0_DIV_1); //utiliza reloj interno y lo divide entre 1

    6.4.3 Modificacin y obtencin del valor de TIMER0.Las funciones que se encargan de realizar la obtencin y modificacin del mdulo TIMER0 son las siguientes:

    set_timer0() y get_timer0()

    Sintaxis set_timer_0 (value) y get_timer0()

    Parametros value es el valor que tendr TIMER0 en ese instante

    6.4.4 Clculo de la temporizacin.Las temporizaciones se pueden calcular de la siguiente manera:

    4 0 256 0T DIV TMRTemporizacion

    Fosc

  • 7/31/2019 Gua de Iniciacin a PIC

    35/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 34

    6.4.4.1 EjemploSe desea calcular una temporizacin de 20 ms para un PIC16F887 conectado a un CRYSTAL de 8MHz.

    Sabemos que este PIC posee 9 prescaler para TIMER0, escogeremos T0DIV=256. Lo siguiente sera calcular e

    valor de TMR0.

    0 2564 0

    20 80 256 994 256

    OSCTemporizacion FTMRT DIV

    ms MHzTMR

    6.5Procedimiento.1. Repetir los pasos del 1 al 4 enCrear el Proyecto en CCS.2. Crear una Nueva carpeta llamada Lab5 y una subcarpeta llamada LED_Blink2 en la ubicacin que

    consideres necesaria (Ejemplo: Carpeta Mis Documentos).

    3. Abrir la carpeta LED_Blink2 y guardar el proyecto con el nombre de LED_Blink2.4. Copiar elCdigo 6.1 Led_blink2

    Cdigo 6.1 Led_blink2

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 24-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection

    #FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz#use fast_io(A)#use fast_io(B)

    //Interrupcion por TMR0.//La interrupcion ocurrira (256-TMR0)*256*4/Fosc=(256-0)*256*4/8MHz=32.768msint1 aux;#INT_TIMER0

    void TIMR0_ISR(){output_bit(PIN_B0,~input_state(PIN_B0)); //Si RB0 es igual a 1 entoneces el valor siguiente sera 0.

    } //Si RB0 es igual a 0 entoneces el valor siguiente sera 1.

    ///PROGRAMA Principal.void main(void){

    set_tris_B(0);set_tris_A(255);setup_adc_ports(NO_ANALOGS|VSS_VDD); //Todas las entradas del PIC Seran Digitales.setup_comparator(NC_NC_NC_NC); //Los comparadores Analogicos estaran apagados.setup_timer_0(T0_INTERNAL|T0_DIV_256); //La entrada de Reloj para TIMER0 sera interna.

    //Se dividira el reloj interno entre 256.setup_timer_1(T1_DISABLED); //Desabilitamos el TIMER1.setup_timer_2(T2_DISABLED,0,1); //Desabilitamos el TIMER2.

  • 7/31/2019 Gua de Iniciacin a PIC

    36/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 35

    enable_interrupts(INT_TIMER0); //Habilitamos la interrupcion por desborde del TIMER0.enable_interrupts(GLOBAL); //Habilitamos la interrupciones globales.while(TRUE){ //bucle infinito

    output_bit(PIN_B1,input(PIN_A1)); //RB1 sera igual a RA1.}

    }

    5. Presionar F9 para compilar el proyecto.6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICE el PIC16F887, el LOGICSTATE y el LOGICPROBE.

    7. Para insertar el OSCILLOSCOPE ser necesario dar clic en el botn Virtual Instrument del cinta debotones izquierda y luego se debe dar clic en la opcin OSCILLOSCOPE del panel lateral a como se

    muestra en la siguiente figura.

    OSCILLOSCOPE

    PIC16F88

    LOGICSTATE

    LOGICPROBE

    Botn Virtual

    Instruments

    PanelInstruments

  • 7/31/2019 Gua de Iniciacin a PIC

    37/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 36

    8. Cargar el Archivo fuenteLed_Blink2.cofyRealizar la simulacin.6.6Trabajo Extra ClaseElabore un programa en CCS que muestre una secuencia de LEDs conectados al PORTC (1 a la vez) cada 1

    segundo y que muestre en PORTC el valor ingresado por PORTB (utilizar interrupcin por cambio en PORTB y

    por desbordamiento de TMR0).

  • 7/31/2019 Gua de Iniciacin a PIC

    38/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 37

    Laboratorio 7: Generador de seal PWM.7.1Objetivo.Familiarizarse con la utilizacin del mdulo CCP en modo PWM mediante la implementacin prctica de

    ejemplo prcticoGen_PWM

    7.2Introduccin.Este laboratorio trata de mostrar la teora y el procedimiento utilizado para generar una seal PWM mediante

    el mdulo CCP1 del PIC16F887.

    7.3Modulacin por ancho de pulsosLa modulacin por ancho de pulsos (PWM, pulse-width modulation) de una seal o fuente de energa es una

    tcnica en la que se modifica el ciclo de trabajo de una seal peridica (una senoidal o una cuadrada, por

    ejemplo), ya sea para transmitir informacin a travs de un canal de comunicaciones o para controlar la

    cantidad de energa que se enva a una carga.

    El ciclo de trabajo de una seal peridica es el ancho relativo de su parte positiva en relacin con el perodo.

    Expresado matemticamente:

    D es el ciclo de trabajo

    es el tiempo en que la funcin es positiva (ancho del pulso)

    Tes el perodo de la funcin [Wikipedia]

    [wikipedia]

    7.4Mdulo CCP.Los mdulos CCP (Capture/Compare/PWM) permiten realizar las siguientes Funciones:

    Captura: obtiene el valor del temporizador en un momento dato, fijado por la accin de un terminadel PIC.

    Comparacin: compara el valor del temporizador con el valor de un registro y provoca una accin en ePIC.

  • 7/31/2019 Gua de Iniciacin a PIC

    39/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 38

    PWM: genera una seal modulada por ancho de pulso.Los PIC de gama media pueden tener hasta 2 mdulos CCP.

    7.4.1 Configuracin del Mdulo CCP en Modo PWM.La funcin que se encarga de realizar la configuracin del mdulo CCP es la siguiente:

    setup_ccpX( )

    Sintaxis setup_ccp1 (mode) o setup_ccp2 (mode)

    Parametros mode es una constant. Las constantes vlidas se encuentran en los archivos .h del dispositivo yson las siguientes:

    Deshabilita el mdulo CCP

    CCP_OFF

    Configuracin del CCP para modo PWM:

    CCP_PWM Habilita el Pulse Width Modulator

    7.4.2 Configuracin del ciclo de trabajo.La funcin que se encarga de configurar el ciclo de trabajo es la siguiente.

    Set_pwm_dutyX( )

    Sintaxis set_pwm1_duty (value) set_pwm2_duty (value)

    Parametros value podra ser una variable o una constante de 8 o 16 bits.

    7.5Mdulo TIMER2.Es un temporizador de 8 bits, similar al TIMER0, con las siguientes caractersticas:

    1. Registro TIMER2 de 8 bits.2. Registro PR2 de 8 bits.3. Interrupcin al coincidir TIMER2 con PR2.4. Prescaler programable por software (1:1, 1:4, 1:16).5. Postcaler programable por software (1:1 hasta 1:16). [hoja de datos].

    7.5.1 Configuracin de la frecuencia PWM.El Perodo de la seal se obtiene al configurar TIMER2 y el valor del registro PR2, para ello se utiliza la

    siguiente funcin:

    setup_timer_2( )

    Sintaxis setup_timer_2 (mode,period,postscale)

    Parametros mode podra ser:

    T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4

  • 7/31/2019 Gua de Iniciacin a PIC

    40/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 39

    T2_DIV_BY_16periodes un int de 0-255 que determina cuando el valor del reloj se reinicia.

    postscale es un numero de 1-16 que determina cuantos desbordes del timer antes de una

    interrupcin. (1 significa una vez, 2 significa 2 veces, etc.).

    [ayuda ccs]

    A continuacin se describe el funcionamiento del mdulo.

    En la figura anterior podemos observar que cuando el valor del registro PR2 coincide con el valor del TIMER2

    ocurre lo siguiente.

    1. Se reinicia TMR2.2. El pin CCPx se pone a 1 (excepto cuando el Ciclo de trabajo es 0%).3. El valor del Registro principal del Ciclo de Trabajo (CCPRxL y CCPxCON) se carga en el registro

    auxiliar del Ciclo de trabajo (CCPRxH mas 2bits).

    El Registro principal del Ciclo de Trabajo (CCPRxL y CCPxCON) puede ser escrito en cualquier momento

    pero no se cargan en el registro auxiliar (CCPRxH mas 2bits) hasta que finalice el Perodo.

    Cuando el valor de TIMER2 coincide con el valor del Ciclo de Trabajo (CCPRxH mas 2bits) el pin CCPx se pone a

    0 hasta que PR2 coincida de nuevo con TIMER2 y se inicie el nuevo Perodo.

    7.5.2

    Calculo de la Frecuencia PWM.Con lo dicho anterior mente podemos determinar que la frecuencia PWM depende del valor del prescaler del

    TIMER2 T2DIV(valor de mode) y PR2 (valor deperiod), a continuacin se muestra la ecuacin para calcular e

    Perodo PWM que nos brinda Microchip.

    4 2 2 1PWM OSC T T T DIV PR

    Es decir:

  • 7/31/2019 Gua de Iniciacin a PIC

    41/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 40

    4 2 2 1OSC

    PWM

    FF

    T DIV PR

    7.5.2.1 Ejemplo:Deseamos que Fpwm=1khz para un PIC16F887 al que se le conecta un cristal de 8MHz.

    Sabemos que este PIC posee 3 prescaler T2DIV=1, 4 y 16, por lo tanto el primer paso ser despejar el valor de

    PR2 de la formula anterior.

    2 14 2

    OSC

    PWM

    FPR

    F T DIV

    El segundo paso ser sustituir valores y probar con T2DIV = 1.

    82 1 1999

    4 1 1

    MHzPR

    kHz

    Como el valor anterior es mayor al valor mximo de PR2, es decir 255, debemos aumentar el valor de T2DIV.

    82 1 499

    4 1 4

    MHzPR

    kHz

    Como an el valor anterior es mayor al valor mximo de PR2, es decir 255, debemos aumentar el valor de

    T2DIV y finalmente encontramos que:

    82 1 124

    4 1 16

    MHzPR

    kHz

    Por lo tanto, para configurar la frecuencia PWM debemos ingresar la siguiente funcin:

    Setup_timer_2(T2_DIV_16,124,1)

    7.5.3 Resolucin del Ciclo de Trabajo.La resolucin determina el nmero de posibles ciclos de trabajo para un perodo dado. Por ejemplo, una

    resolucin de 10 bits resultar en 1024 ciclos de trabajo discretos, mientras que una resolucin de 8 bits

    resultar en 256 ciclos de trabajo discretos.

    La mxima resolucin es 10 bits cuando PR2 es 255. La resolucin es funcin del valor del registro PR2 a como

    se muestra en la siguiente ecuacin.

    7.5.3.1 EjemploCalcule la resolucin del ciclo de trabajo del ejemplo anterior.

    En el ejemplo anterior el valor de PR2 fue 124 por lo tanto su resolucin ser:

  • 7/31/2019 Gua de Iniciacin a PIC

    42/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 41

    log 4 124 18

    log 2Resolucion bits

    7.6Procedimiento.1. Crear el Proyecto en CCS.2. Copiar elCdigo 7.1 Gen_PWM

    Cdigo 7.1 Gen_PWM

    /////////////////////////////////////////////////////////////////////////////////Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 24-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection#FUSES NOBROWNOUT //No brownout reset

    #FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz#use fast_io(B)

    void main(){signed int sel_Fpwm=0;unsigned int Duty=127;set_tris_B(0XFF); //Todos los pines de PORTB seran entradas.setup_comparator(NC_NC); //Desconectamos los comparadores AnalogicosSETUP_ADC_PORTS(NO_ANALOGS); //Solo AN0 sera analogico los demas digitales.

    SETUP_ADC(ADC_OFF); //Apagamos el ADCsetup_ccp1(CCP_PWM); //Configuramos CCP1 en modo PWM simple.while(TRUE){ //Inicio del ciclo Infinito

    while(!input_B()); //Espera a que se active un pin del PORTB.delay_ms(10); //Retardo de 10ms para eliminar rebotes.if(input(PIN_B0)) //Si se activa PIN_B0

    if(++sel_Fpwm>3) //preincrementamos sel_Fpwm y si es mayor que 3sel_Fpwm=0; //igualamos sel_Fpwm a 0.

    if(input(PIN_B1)) //Si se activa PIN_B1if(--sel_Fpwm

  • 7/31/2019 Gua de Iniciacin a PIC

    43/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 42

    }}

    3. Presione F9 para compilar el proyecto.4. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la

    ventana PICK DEVICE el PIC16F887 y el LOGICPROBE.

    5. Para insertar el OSCILLOSCOPE ser necesario dar clic en el botn Virtual Instrument de la cinta debotones izquierda y luego se debe dar clic en la opcin OSCILLOSCOPE del panel lateral a como se

    muestra en la siguiente figura.

    6. Cargar el Archivo fuenteGEN_PWM.cofyRealizar la simulacin.7. Conteste:

    LOGICPROBE

    PIC16F887

    OSCILLOSCOPE

    Botn Virtual

    Instruments

    Panel

    Instruments

  • 7/31/2019 Gua de Iniciacin a PIC

    44/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 43

    a. Cunto es la resolucin para cada una de las frecuencias escogidas?b. Cunto debera ser la frecuencia PWM si utilizamos resolucin mxima?c. Qu ocurre cuando el ciclo de trabajo es mayor a la resolucin PWM?d. Qu ocurre en la lnea 36 al no presionar ningn botn?e. Qu ocurre en la lnea 38, 39 y 40 si se presiona el botn RB0?f. Qu ocurre en la lnea 41, 42 y 43 si se presiona el botn RB1?g. Qu ocurre en la lnea 44 si se presiona el botn RB0?h. Qu ocurre en la lnea 45 si se presiona el botn RB1?

    7.7Trabajo Extra Clase.1. Investigue y conteste:

    a. Cmo funciona una fuente Conmutada?b. Cmo funciona un servomotor?c. Cmo funciona un Amplificador Clase D?d. Cul es la frecuencia PWM mxima que se puede generar con un PIC16F887 y un cristal de

    20MHz?

    2. Elabore un programa en CCS que genere una seal PWM de 1kHz y que se module mediante unaresistencia conectada a una entrada analgica.

  • 7/31/2019 Gua de Iniciacin a PIC

    45/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 44

    Laboratorio 8: USART8.1ObjetivoComprender el funcionamiento del mdulo USART mediante un ejemplo prctico que transmite datos entre

    un PIC y una PC u otro PIC.

    8.2IntroduccinExiste una gran cantidad de proyectos en los que ser necesario tomar un conjunto de seales fsicas,

    convertirlas en tensiones elctricas y digitalizarlas de manera que se puedan transmitir y procesar en una

    computadora. A este tipo de sistemas se les conoce como Sistemas de Adquisicin de datos ( DAQ, Data

    Acquisition por sus siglas en ingls).

    Por otro lado los PIC tambin deben comunicarse con otros PIC o con otros dispositivos que se encuentra

    alejados para controlar motores, calderas, nivel de tanques etc

    Por lo cual en este laboratorio estudiaremos la comunicacin Serie con la computadora y con otros PIC.

    8.3Mdulo USART.El mdulo USART (Universal Synchronous Asynchronous Receiver Transmitter) permite la transmisin y

    recepcin de datos en serie ya sea con un ordenador trabajando en modo full-duplex asncrono o con

    perifricos trabajando en modo half-duplex.

    Bsicamente, la transmisin serie consiste en enviar los datos bit a bit a travs de una lnea comn en

    periodos de tiempo fijos, dando lugar a la llamada velocidad de transmisin o nmero de bits enviados por

    segundo (baudios). Tanto el emisor como el receptor poseen registros de desplazamiento para realizar la

    comunicacin. Los bit estn codificados en NRZ (Not Return to Zero, nivel alto: 1, nivel bajo: 0), NRZI (Not

    Return to Zero Inverted, cambio de nivel: 1, sin cambio de nivel: 0), etc.

    8.4Modo SncronoEn el modo sncrono (ver Figura 8.1) se permite la transmisin continua de datos y no existe un lmite de

    tamao, es un modo semi-duplex(la comunicacin serie se establece a travs de una nica lnea, en ambos

    sentidos, pero no se puede transferir informacin en ambos sentidos de forma simultnea). En este modo de

    transmisin se puede trabajar de dos formas:

    En modo Maestro, donde el microcontrolador maestro genera la seal de reloj e inicia o finaliza lacomunicacin.

    En modo Esclavo, donde el microcontrolador esclavo recibe la seal de reloj y depende demicrocontrolador para recibir o enviar informacin.

    Figura 8.1 Transmisin sincrona

  • 7/31/2019 Gua de Iniciacin a PIC

    46/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 45

    8.5Modo AsncronoEn el modo asncrono (ver Figura 8.2) se emplean relojes tanto en el emisor como en el receptor. Ambos

    relojes deben ser de igual frecuencia y deben estar en fase o sincronizados. La frecuencia de reloj se acuerda

    antes de la transmisin configurando la velocidad mientras que la sincronizacin se realiza durante la

    transmisin. Cada trama de datos tiene un tamao fijo y poseen un bit inicial o de arranque (star) y un bit fina

    o de parada (stop) que permiten realizar dicha sincronizacin. La transmisin es en modo full-duplex (se

    utilizan dos lneas, una transmisora TX y otra receptora RX, transfiriendo informacin en ambos sentidos de

    forma simultanea).

    Figura 8.2 Transmisin asncrona

    El modo ms habitual de transmisin por el USART es el modo asncrono, puesto que permite comunicaciones

    en largas distancias. Existen distintas normas de transmisin serie asncrona, como la RS232, la RS485, etc. Los

    niveles de tensin empleados en estas normas son diferentes al empleado por el PIC. Por ello, suele ser

    necesaria la utilizacin de drivers externos de adaptacin tal cmo el MAX232 de Dallas Semiconductor-

    MAXIM que se muestra en la Figura 8.3.

    Figura 8.3 MAX232

    8.6Niveles lgicos RS232La Figura 8.4 ilustra los requisitos en cuanto a niveles lgicos que debe cumplir una transmisin serie segn la

    norma RS232.

  • 7/31/2019 Gua de Iniciacin a PIC

    47/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 46

    Figura 8.4 Byte segn normas RS232

    Los datos se transmiten con lgica negativa, es decir, un voltaje positivo en la conexin representa un0, mientras que un voltaje negativo representa un .

    Para garantizar un 0 lgico una lnea debe mantener un voltaje entre +3V y +5V. Del mismo modo para lgico garantizado debe estar entre -3V y -15V. Los voltajes ms usados son +2V para el 0 y -2V para . Es importante resaltar que cuando un puerto serie no est transmitiendo mantiene el terminal de

    transmisin a lgico a -12V, normalmente.

    La banda muerta entre +3V y -3V se conoce como la regin de transicin donde los niveles lgicos noestn definidos. Es decir estos valores pueden interpretarse ambiguamente como 0 .

    Si se aumenta la velocidad de transmisin las seales de datos se vuelven susceptibles a prdidas de voltaje

    causadas por la capacidad, resistencia e inductancia del cable. Estas prdidas son conocidas como efectos dealta frecuencia y aumentan con la longitud del cable.

    Estos valores de tensin proporcionan un amplio margen de seguridad que es de gran utilidad cuando los

    cables deben pasar por zonas cercanas a elementos que generan interferencias elctricas: motores,

    transformadores, equipos de comunicacin, etc. Estos elementos, unidos a la longitud del cable, pueden hacer

    disminuir la seal hasta en varios voltios, sin que afecte adversamente al nivel lgico de la entrada. [mic16F84

    p308]

    8.7El mdulo USART en C.8.7.1 Configuracin del Mdulo USART.Para configurar el mdulo USART es necesario utilizar la siguiente directiva:

    #USE RS232(opciones)

    Sintaxis #USE RS232(opciones)

    Parametros Las opciones para realizar la comunicacin RS232 son las siguientes:

  • 7/31/2019 Gua de Iniciacin a PIC

    48/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 47

    STREAM=idAsocia una identificador con su puerto RS232. El identificador podra ser

    usado en funciones como fputc.

    BAUD=x Configura la taza de baudios con el valor de x

    XMIT=pin Pin de Transmisin

    RCV=pin Pin de recepcin

    FORCE_SW Usa un UART mediante software.

    STOP=x Nmero de bits de stop (por defecto 1)

    PARITY=x Donde x es N (Ninguna), E (par), u O (impar).

    BITS=x Donde x es 5-9 (no puede usarse 5-7 con el USART interno).

    Ver ayuda de CCS para utilizar las dems opciones.

    8.7.2

    Transmisin de datos:La siguiente funcin enva datos a travs del pin XMIT RS232. Debe aparecer #USE RS232 antes de su llamada

    para determinar el baud rate y el pin usado.

    Sintaxis putc(cdata), putchar(cdata), fputc(cdata,stream)

    Parametros cdata es un carcter u entero de 8 bits.Stream es un identificador (un byte constante).

    Tambin es posible utilizar la funcin printfque utilizamos para Escribir caracteres en el LCD.

    8.7.3 Recepcin de datos:Para recibir un dato de 8 bits (entero o carcter) se utiliza la siguiente funcin:

    Sintaxis value = getc(), value = fgetc(stream), value=getch() o value=getchar()

    Parametros Stream es un identificador (un byte constante).Retorna Valuees un dato de 8 bits (entero o carcter).

    La siguiente funcin sirve para recibir un dato de 8 bits (1 byte).

    Sintaxis gets(string) o value = fgets(string,stream)

    Parametros String es un puntero del arreglo de caracteres donde ser almacenada la cadena recibida.Stream es un identificador (un byte constante).

    Retorna Valuees un dato de 8 bits (entero o carcter).

    8.8Procedimiento.8. Crear el Proyecto en CCS.9. Copiar elCdigo 8.1 Trans_serie

    Cdigo 8.1 Trans_serie

    ///////////////////////////////////////////////////////////////////////////////

  • 7/31/2019 Gua de Iniciacin a PIC

    49/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 48

    //Autor: Luis Alberto Vargas Tijerino.//Alias: Bigluis.//Pais: Nicaragua.//Fecha: 24-Nov-10.///////////////////////////////////////////////////////////////////////////////#include //pic a utilizar

    #FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES MCLR //Master Clear pin enabled#FUSES NOPROTECT //Code not protected from reading#FUSES NOCPD //No EE protection

    #FUSES NOBROWNOUT //No brownout reset#FUSES IESO //Internal External Switch Over mode enabled#FUSES FCMEN //Fail-safe clock monitor enabled#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NODEBUG //No Debug mode for ICD#FUSES NOWRT //Program memory not write protected#FUSES BORV40 //Brownout reset at 4.0V#FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay (clock=8M) //Fosc=8Mhz

    #use RS232(baud=9600, UART1) //Configuramos USART con 9600 baudios y EUSART interno.

    #define LCD_ENABLE_PIN PIN_B5#define LCD_RS_PIN PIN_B4#define LCD_RW_PIN PIN_B6#define LCD_DATA4 PIN_B0

    #define LCD_DATA5 PIN_B1#define LCD_DATA6 PIN_B2#define LCD_DATA7 PIN_B3#include

    //Declaraciones:int valor; //valor como enterochar cadena1[10]; //cadena1 como arreglo de 10 caractereschar const cadena2[]="hola"; //cadena2 como arreglo constante de caracteres

    void main(){setup_comparator(NC_NC); //Desconectamos los comparadores AnalogicosSETUP_ADC_PORTS(NO_ANALOGS); //Solo AN0 sera analogico los demas digitales.SETUP_ADC(ADC_OFF); //Apagamos el ADClcd_init(); //Inicializa el LCD.lcd_putc("\fTx:\nRx:"); //Escribe "Tx:" en pos. 1,1 y "Rx:" en pos. 1,2while(1){

    lcd_gotoxy(5,1); //Ubicar el cursor en la posicion 5,1

    while(!input_a()); //Espera hasta que se activen los pines de PORTAdelay_ms(10); //Retardo de 10ms para eliminar rebotesif(input(PIN_A0)){ //Si se activa el PIN_A0

    lcd_putc('U'); //Escribir en el LCD la letra 'U'putc('U'); //Enviar por USART la letra 'U'

    }if(input(PIN_A1)){ //Si se activa el PIN_A1

    lcd_putc("FEC "); //Escribe en el LCD "FEC "puts("FEC "); //Envia por usart la cadena "FEC "

    }if(input(PIN_A2)){ //Si se activa el PIN_A2

    printf(lcd_putc,"%s",cadena2); //Escribe en el LCD el contenido de cadena2printf("%s",cadena2); //Envia por USART el contenido de cadena2

    }if(input(PIN_A3)){ //Si se activa el PIN_A3

    lcd_gotoxy(5,2); //Posicion del cursor del LCD es 5,2valor=getc(); //Almacena el dato recibido del USART en valor

    lcd_putc(valor); //Escribe el contenido de valor en el LCD}if(input(PIN_A4)){ //Si se activa el PIN_A4

    lcd_gotoxy(5,2); //Envia cursor a pos. 5,2.gets(cadena1); //Almacena la cadena recibida en cadena1printf(lcd_putc,"%s",cadena1); //Escribe en el LCD el contenido de cadena1

    }while(input_a()); //Espera hasta que se desactiven los pines de PORTA

    }}

    Error! No se encuentra el origen de la referencia.

    10.Presionar F9 para compilar el proyecto.

  • 7/31/2019 Gua de Iniciacin a PIC

    50/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 49

    11.Crear el circuito en Proteus que se muestra en la Figura 8.5. Para ello ser necesario buscarmediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887, LOGICTOGGLE, COMPIN y

    LM016L.

    Figura 8.5

    12.Para insertar el VIRTUAL TERMINAL ser necesario dar clic en el botn Virtual Instrument de la cintade botones izquierda y luego se debe dar clic en la opcin VIRTUAL TERMINAL del panel lateral a

    como se muestra en la siguiente figura.

    13.Cargar el Archivo fuenteGEN_PWM.cofyRealizar la simulacin.14.Contestar las siguientes preguntas:

    a. Presione el botn conectado a RA0 y explique qu ocurre en las lneas 52 y 53.

    COMPIN

    Virtual

    Terminal

    PIC16F887LM016L

    LOGICTOGGLE

    Botn Virtual

    Instruments

    Panel

    Instruments

  • 7/31/2019 Gua de Iniciacin a PIC

    51/54

    Autor: Luis Alberto Vargas Tijerino. Pgina 50

    b. Presione el botn conectado a RA1 y explique qu ocurre en las lneas 56 y 57.c. Presione el botn conectado a RA2 y explique qu ocurre en las lneas 61 y 62.d. Presione el botn conectado a RA3, escriba la letra f en el Virtual Terminal y explique qu

    ocurre en las lneas 65 y 66.

    e. Presione el botn conectado a RA4, escriba PIC en el Virtual Terminal y explique qu ocurre enlas lneas 70 y 71.

    15.Crear el circuito en Proteusque se muestra en la Figura 8.6. Para ello copie y pegue el circuito anterior.Figura 8.6

    16.Contestar las siguientes preguntas:a. Presione el botn RA3 de U2, luego presione el botn RA0 de U1 y explique qu ocurre.b. Presione el botn RA4 de U2, luego presione el botn RA2 de U1 y explique qu ocurre.c. Presione el botn RA4 de U2, luego presione el botn RA3 de U1 y explique qu