Vous êtes sur la page 1sur 18

CAPTULO 5

EL MICROCONTROLADOR PIC Es un chip (Circuito integrado) que contiene un computador completo junto a diversos recursos auxiliares con prestaciones y capacidades limitadas, de muy bajo costo y tamao reducido. Es un sistema digital cerrado RAM de poca capacidad interna (bytes Kb) Memoria de programa pequea (algunos Kb) No se requiere de decodificadores de E/S o de memoria Velocidad de operacin de algunos MIPS Orientados a operaciones de E/S Costo de desarrollo e implementacin reducido Muy fciles y sencillos de utilizar Circuitos simples y tendencia a la modularidad Por lo general dan cabida a un slo programa y el soporte de tareas mltiples (de existir), es limitado Dos o tres modos de direccionamiento Casi todos son RISC Tiempo de aprendizaje/desarrollo reducido Para el Ao 2002 se haban vendido 49.000 Millones de piezas. En el ao 2008 la empresa Microchip fue lder mundial en Ventas 5.1. Clasificacin de los microcontroladores segn el bus de datos (bits) Microcontroladores de 4 bits: Son los ms sencillos en todos los aspectos tcnicos y prestaciones asociadas, de muy bajo costo. Se fabrican en grandes volmenes y sus aplicaciones tpicas: pequeos automatismos y juguetera Microcontroladores de 8 bits: Son los ms utilizados en la actualidad, gran diversidad y versatilidad. Los PIC son los microcontroladores de 8 bits ms usados por el mercado mundial, con ms de 2000 millones de unidades vendidas/ao. Se aplican generalmente en todos los automatismos modernos y sistemas simples de control, electrodomsticos, mquinas y herramientas y en las reas de la instrumentacin digital entre otras. Microcontroladores de 16 bits: Prestaciones superiores a los microcontroladores de 8 bits. Se aplican tpicamente en el procesamiento digital de seales. La casa microchip fbrica las series PIC24xx y los dsPIC33xxx. Microcontroladores de 32 bits: Mas complejos y costosos. Algunas caractersticas similares a un microprocesador. Se dedican a proyectos muy avanzados. Aplicaciones tpicas: inteligencia artificial, aplicaciones militares y almacenamiento masivo de datos. 5.2. Lenguajes de programacin ms utilizados con los microcontroladores Ensamblador, asembler Lenguaje C, C++ Basic, MBASIC, PBASIC PASCAL JAVA

Figura 5.1. Familia de microcontroladores fabricados por Microchip. Fuente: Tomado del site del fabricante www.microchips.com

Figura 5.2. Compiladores ms utilizados en la actualidad. Fuente: Tomado de la pginas web de los fabricantes.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 16

5.3. Microcontroladores Boot Loaders 5.4. Caractersticas Principales del PIC 16F876 Como se explic en la seccin 4.8. de este manual, los microcontroladores PIC16F87x(A) y PIC18Fxxx(x) pueden escribir su propia memoria de programa (Flash) sin necesidad de utilizar un programador externo, esto es sin duda una ventaja, sin embargo, a estos microcontroladores inicialmente hay que cargarles un pequeo cdigo de programa denominado boot loader, el cual, permite que tanto el cdigo del programa de usuario como el valor de los registros en EEprom transmitidos al microcontrolador desde un puerto de comunicacin serial y/o USB, sean efectivamente almacenados en dicho microcontrolador. Existen en el mercado actual diferentes fabricantes de Microcontroladores Boot Loader como: Parallax, Basic Micro ATOM, BASICX, PicAXE. Bsicamente un microcontrolador boot loador constituye un contrato de servicio entre el fabricante y el usuario. El usuario compra al fabricante el microcontrolador con el firmware boot loador precargado y el fabricante le permite utilizar a cambio, toda la plataforma de hardware y software desarrollada para este microcontrolador. Entre los programas generalmente disponibles por el fabricante se encuentran: editores de texto, compiladores, rutinas grficas y de comunicacin serial entre otras. El iBOARD III, tambin utiliza un microcontrolador tipo boot loador. El PIC16F876 que viene incluido en el sistema iBOARD III, fue inicialmente preprogramado con un firmware, el cual, le permite a usted, cargar sus programas infinitas veces sin necesidad de que tenga que comprar un costoso programador. Por otra parte, todos los programas actuales y futuros que realice el fabricante estarn disponibles sin costo adicional para ser utilizados sin limitaciones por el iBOARD III. Actualmente el fabricante est desarrollando una completa plataforma de programacin denominada iLOADER, la cual, le permitir adems de programar, leer, escribir y verificar sus programas en el microcontrolador, utilizar un interfaz grfico denominado UART/SCOPE y un servidor de datos OPC herramienta de avanzada prestaciones que le permitir realizar intercambio de informacin entre el microcontrolador PIC y cualquier programa con capacidad de comunicacin OPC, tales como: Excel, VB6, Visual Studio.NET, Delphi y Java. Una ventaja de la iBOARD III, es que el fabricante entrega, sin costo adicional, el cdigo boot loador para el PIC16F876 utilizado. As, si usted llegara a cambiar el PIC16F876 que viene incluido en la unidad por otro virgen, no necesitar pagar por ste firmware, sin embargo, necesitar un programador para PIC a fin de que pueda programar inicialmente el firmware boot loador al nuevo PIC. Para realizar sta actividad, el fabricante recomienda utilizar los programadores de la casa matriz tanto por puerto serial iP3 iP3B como por puerto USB como el iPROG18. Procesador RISC de slo 35 instrucciones Toda las instrucciones tienen la misma duracin (1 ciclo) salvo los saltos que demoran dos ciclos 1 ciclo = 4 pulsos reloj Velocidad de operacin mxima 20 MHz Hasta 8K x 14 words de FLASH Program Memory Hasta 368 x 8 bytes de Data Memory (RAM) Hasta 256 x 8 bytes de EEPROM para datos 14 fuentes de interrupcin seleccionables en forma independiente Stack de ocho niveles Tres modos de direccionamiento: Directo, indirecto y relativo Power-on Reset (POR) Power-up Timer (PWRT) Oscillator Start-up Timer (OST) Watchdog Timer (WDT) con oscilador interno RC Proteccin de cdigo programable medio cdigo o completo Modo SLEEP para ahorro de energa Fuente de reloj seleccionada por software Programacin en circuito In-Circuit Serial Programming (ICSP) In-Circuit Debugging utilizando dos pines de conexin Acceso a la memoria de programa desde el procesador en tiempo de ejecucin para una lectura y/o escritura de datos Voltaje de operacin desde 2.0V to 5.5V Capacidad de drenar/sumir corriente de 25 mA (FAN OUT/FAN IN) Consumo de energa: < 2 mA @ 5V, 4 MHz 20 uA @ 3V, 32 kHz < 1 uA en modo de reposo (sleep)

Figura 5.3. Fotografa del PIC16F876 28 pines Dip 0.3. Fuente: Tomado de www.microchip.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 17

5.5. Anatoma de un microcontrolador PIC En la figura 5.4., se muestra el diagrama funcional interno de un microcontrolador PIC. Bsicamente el corazn del microcontrolador lo constituye la unidad central de procesamiento CPU y el bloque de memorias tanto RAM como memoria de programa donde se almacena el cdigo del programa a ejecutar. En el bloque de memoria, se encuentra un sub-bloque denominado SFR, el cual, representa a los registros internos del microcontrolador. Todo, absolutamente todo lo que queremos que el microcontrolador haga, se realiza a travs de la modificacin de los registros internos SFR. El bloque de alimentacin por su parte, se encarga de suplir la energa utilizada por el sistema, mientras que el bloque de osciladores, se encarga de suplir la seal de reloj sincrnica al CPU para la ejecucin secuencial de las instrucciones contenidas en el bloque de memoria de programa. Dentro de los perifricos de un microcontrolador se encuentran: Timers T0, T1 y T2 Convertidor analgico a digital (ADC) Mdulo de captura y comparacin (CCP) Mdulo de PWM Mdulo de comunicacin serial SPI, I2C y UART

Figura 5.4. Anatoma de un microcontrolador PIC16F886/887. Fuente: Tomado de www.mikroe.com

La entrada salida entre el microcontrolador y el mundo exterior se realiza a travs de los puertos (E/S) en el caso particular del microcontrolador mostrado en la figura 5.4., existen cinco puertos denominados PORTA, B, C, D y E. Los puertos de entrada salida representan los pines de conexin del microcontrolador con el mundo exterior. Internamente el microcontrolador posee perifricos con funciones especficas, estos perifricos son autnomos, lo que significa, que no necesitan utilizar ciclos de reloj del CPU para su funcionamiento, sin embargo, el CPU es el encargado de inicializarlos y de acceder a su lgica y valores internos mediante la lectura y/o escritura de sus registros, los cuales, como se indic anteriormente, se encuentran representados en el bloque de memoria SFR.

Figura 5.5. Arquitectura de un microcontrolador PIC. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 18

5.6. Arquitectura del PIC16F876 A fin de poder entender en forma rpida el funcionamiento del PIC, se har referencia a la arquitectura del mismo mostrada en la Figura 5.5. El PIC16F876 posee una arquitectura tipo HARVARD, lo cual, supone una independencia entre el bus de cdigo y el bus de datos. Ahora bin, un bus es un canal de comunicaciones que puede tener muchas lneas, en nuestro caso hablamos de una lnea por bits. Se podra hacer una analoga elctrica entre un bus y un cable, ya que ambos se utilizan como medios de interconexin. En el PIC16F876 el bus de cdigo tiene una longitud de 14 bits mximo, sin embargo, el contador de programa que direcciona a la memoria de programacin es de tan slo 13 bits, razn por la cual, no existirn PIC de la serie 16F que puedan tener una memoria de programa superior a 213 = 8192 Bytes. El bus de datos por su parte, es siempre de 8 bits (al menos en los PIC 16Fxx) y es el bus representado en color rojo en la Figura 5.5. Todos los perifricos se conectan al CPU slo a travs del bus de datos. 5.7. Organizacin de la memoria de programacin del PIC16F876 La Memoria FLASH es donde se almacena el programa de aplicacin del microcontrolador y tiene las siguientes caractersticas:

Memoria Flash
Posee una capacidad de 8K palabras de 14 bits cada una. Est dividida en pginas (bloques) de 2K cada uno. Se direcciona a travs del Program Counter PC. Tiene asociado un Stack o pila que funciona en forma automtica, no hay instrucciones disponibles para guardar o sacar informacin del Stack, el cual, tiene ocho niveles de profundidad. La primera direccin de la memoria FLASH (0000h), la ocupa el vector de RESET. La siguiente direccin disponible la (0004h) la ocupa el vector de interrupciones. El espacio entre la direccin 0005h y 1FFFh est disponible para los cdigos del programa.

Figura 5.6. Organizacin de la memoria de Programa de un microcontrolador PIC16F876. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 19

5.8. Organizacin de la memoria de datos del PIC16F876 La Memoria de datos utiliza registros implementados en la RAM. En la RAM se alojan todos los registros destinados al funcionamiento del procesador, manejo de los perifricos, E/S y registros de propsito general, los cuales, pueden ser utilizados por el programador como memoria de uso general.

Memoria RAM
La Memoria RAM costa de cuatro bancos con 128 bytes cada uno. Para seleccionar el banco que se desee acceder de la RAM, se emplean los Bits No. 6 y 5 del Registro de Estatus, los cuales se denominan <RP1><RP0>. La seleccin del banco se realiza segn el cdigo siguiente:

Cada bloque de memoria RAM posee una longitud fija de 128 registros de 8 bits cada uno. Todos los registros especiales y perifricos tienen una localidad especfica e invariable dentro de la memoria RAM. En cada ciclo de ejecucin estos registros se actualizan de esta forma el usuario puede consultar en cada momento cual es el valor de los mismos. Importante, como se ha mencionado anteriormente: TODO lo que se realiza en el microcontrolador, todo sin excepcin queda reflejado en estos registros. Al mismo tiempo, cualquier cosa que el usuario desee hacer sobre el microcontrolador tendr que hacerlo leyendo o escribiendo en estos registros.
Figura 5.7. Representacin de los cuatro bloques de la memoria RAM, cada bloque contiene los registros SFR y existe un espacio de propsito general disponible al usuario de 384 Bytes. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 20

5.9. El registro de Estatus

Fuente: Fuente: Tomado de www.mikroe.com

Contiene los bits de status de la ALU (Unidad Aritmtica y Lgica), del RESET y los bits de seleccin <RP1><RP0> de los bancos de memoria. Es el registro ms utilizado de todos y sus bits estn destinados a controlar las funciones esenciales del microcontrolador, por ello, se encuentra ubicado en las cuartas posiciones de cada banco de memoria. (03h, 83h, 103h y 183h). ALU: Referido a operaciones aritmticas y lgicas. Z: Sealizacin de cero (0) DC: Acarrero y dbito del 4to. Bit C: Acarreo y dbito del 8vo. bit RESET: Referido al tipo de re-inicializacin BANCOS MEMORIA: Los ltimos tres bits del registro de Status de mayor peso, se utilizan para seleccionar el banco de memoria al cual se quiere acceder. Los bits 6 y 5 del registro de status pueden tener la codificacin mostrada en la siguiente tabla.

Figura 5.8. Descripcin de los bits independientes del registro de estatus. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 21

5.10. El registro de Opciones Es uno de los registros ms utilizados, como su nombre lo indica, ste registro permite seleccionar una serie de opciones disponibles para la configuracin del hardware en el microcontrolador PIC. Es un registro de 8 bits y cada bit controla una funcin en el microcontrolador. Por ejemplo: Bit 7, RBPU: Habilita o no las resistencias de pull_up internas del puerto B del microcontrolador. Bit 6, INTEDG: Selecciona el flanco para la ocurrencia de una interrupcin. Bit 5, T0CS: Selecciona la fuente de reloj para el TMR0 (interna y/o externa). Bit 4, T0SE: Selecciona el flanco para el incremento del TMR0. Bit 3, PSA: Selecciona si el pre-escalador ser aplicado al TMR0 o al WDT. Bit2 al Bit0: Selecciona la magnitud del pre-escalador.

Figura 5.9. Registros de opciones de un PIC16F876. Fuente: Tomado de www.mikroe.com Sistema de desarrollo para microcontroladores PIC, iBOARD III. 22

5.11. El registro de Interrupciones INTCON: Es un registro de lectura y escritura, el cual, contiene varios bits de habilitacin y bandera para el TMR0, cambios de estado en el puerto B e interrupciones externas por el pin RB0/EXT. Se encuentra duplicado en los cuatro bancos de memoria, ocupando las direcciones: 0Bh, 8Bh, 10Bh y 18Bh.
Fuente: Fuente: Tomado de www.mikroe.com

INTERRUPCIN: Ante una interrupcin, se guardar el valor del program counter PC en el Stack o pila y se cargar el PC con el valor 0004h, que es el vector de interrupcin. La mayora de los perifricos incluidos en el microcontrolador son capaces de interrumpir al CPU, cuando ello ocurre, se desencadenan los siguientes eventos: 1. 2. 3. 4. 5. 6. El microcontrolador termina de ejecutar la instruccin en curso (actual). Se para la secuencia de ejecucin regular del programa. El contenido del Program Counter se almacena en el stack. Se carga en el Program Counter la direccin de la rutina de interrupcin. Se ejecuta la rutina de interrupcin y se disminuye en un nivel el contenido del stack Se carga de nuevo en el Program Counter el valor de retorno guardado anteriormente en el stack. 7. Se contina con la ejecucin normal del programa antes de la interrupcin.

Figura 5.10. Eventos desencadenados ante la ocurrencia de una interrupcin. Fuente: Tomado de www.mikroe.com

Figura 5.11. Funcin de los bits independientes del registro de interrupciones. Fuente: Manual tcnico del PC16F876.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 23

5.12. Interrupciones en el microcontrolador PIC16F887

Figura 5.12. Diferentes fuentes de interrupciones para el PIC16F886/887. Fuente: Fuente: Tomado de www.mikroe.com

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 24

5.13. Entrada Salida Digital Introduccin. Para intercambiar informacin con el mundo exterior, un microcontrolador necesita de un conjunto de perifricos que sean capaces de traducir un evento en una seal elctrica de niveles lgicos entendibles, es decir, binarias. Este tema muestra algunos de los componentes ms simples del sistema de desarrollo, ensendole a trabajar con entradas y salidas digitales por medio de los perifricos ms utilizados en aplicaciones basadas en microcontroladores. De acuerdo a la naturaleza de una seal, esta puede ser analgica o discreta. El microcontrolador PIC16F876 es capaz de interpretar ambas, sin embargo, el estudio de las seales analgicas se ver ms adelante. Los microcontroladores PIC16F876 disponen de tres (03) puertos de entrada/salida (A,B y C) todas las lneas de estos puertos realizan diversas funciones segn estn programadas, sin embargo, todas ellos tienen la capacidad de trabajar como entradas/salidas binarias.

Seal analgica
Es aquella seal que puede tomar infinitos valores posibles entre dos lmites, por lo cual, se denominan continuas.

Seal digital
Es aquella seal que puede tomar un nmero finito de valores entre dos lmites. Si utilizamos lgica booleana ser Cero (0) y el Uno (1).

Figura 5.13. Representacin grfica de una seal analgica y digitales.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 25

5.14. Puertos de Entrada/Salida (E/S): Los microcontroladores PIC16F876 disponen de tres (03) puertos de entrada/salida (A,B y C) todas las lneas de estos puertos realizan diversas funciones segn su programacin, sin embargo, todos ellos tienen la capacidad de trabajar como entradas/salidas digitales y/o binarias. En la figura 5.14, se observan los tres puertos mencionados.

Puerto B, bit 7 -> como salida digital Puerto B, bit 6 -> como salida digital Puerto B, bit 5 -> como salida digital Puerto B, bit 4 -> como salida digital Puerto B, bit 3 -> como entrada digital Puerto B, bit 2 -> como entrada digital Puerto B, bit 1 -> como entrada digital Puerto B, bit 0 -> como entrada digital La nomenclatura utilizada por Microchip es: TRISB <7:4> = 0; TRISB <3:0> = 1, mientras que la nomenclatura utilizada por el compilador Basic Proton es: PORTB = %00001111 para configurar todos los bits del puerto: TRISB.7 = 0; TRISB.6 = 0; TRISB.5 = 0; TRISB.4 = 0; TRISB.3 = 1; TRISB.2 = 1; TRISB.1 = 1; TRISB.0 = 1, para configurar los bits individuales del registro TRIS.

Figura 5.14. Puertos de entrada salida digital de un PIC16F876. Fuente: Fuente: Tomado de www.mikroe.com

microcontrolador, se tiene que realizar a travs de la modificacin de los valores de los registros. En el caso especfico de la entrada salida digital, existen un

Ahora bien, Como podemos tener acceso a estos puertos A,B y C?. La respuesta ya la hemos dado anteriormente. Todo lo que queremos hacer con el par de registros asociados a cada puerto, ellos son como se muestran en la Figura 5.15. El registro TRIS y el registro PORT. El registro TRIS es el encargado de configurar al puerto como entrada salida digital, por ejemplo: TRISA = 0; TRISB = 0; TRISC = 0 -> configurar a los puertos A,B y C como salidas digitales, mientras que TRISA = $FF, TRISB = $FF y TRISC = $ FF -> configurar a los puertos A, B y C como entradas digitales.

Figura 5.15. Registros asociados a la entrada salida digital en un PIC16F876.

El registro PORT, es el encargado de establecer el valor lgico y elctrico de salida de cada pin en el puerto del microcontrolador. Cuando el registro PORTB = 0; todos los pines del puerto B tomarn el valor lgico cero, lo que significa que la tensin de salida en cada pin estar cercana a los cero voltios. Si por el contrario PORTB = $FF, todos los pines del puerto B tomarn el valor lgico 1, lo que significa que la tensin de salida en cada pin estar cercana a la tensin de alimentacin del microcontrolador. Los bits que conforman al registro PORT son independientes entre si, lo cual, permite que tengan valores lgicos diferentes en cualquier momento. Si el puerto se configura como una entrada digital, por ejemplo TRISB = $FF, entonces el registro PORTB contendr el valor lgico de entrada en cada pin del puerto B asociado en cada momento.

Tambin podemos configurar en forma aleatoria los bits individuales de cada puerto; Esto se logra asignando al registro TRIS valores diferentes para cada bits. Por ejemplo: TRISB = %00001111 configurar al puerto B como:

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 26

CAP_05_Ejemplo_01.bas (Entrada Salida Digital). Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita encender el LED L0 al presionar el pulsador S0 .

Segundo Paso: Ubicar en que puerto est conectado el pulsador S0. Para ello hacemos referencia a la figura 5.18, en la cual, se observa que los pulsadores del sistema de desarrollo S3, S2, S1 y S0 estn conectados al puerto A del microcontrolador PORTA<3:0>. Se puede deducir de la figura 5.18. que el pulsador S0 efectivamente est conectado a PORTA<0>. Adicionalmente se observa que cuando el pulsador esta en estado inactivo (abierto) el nivel de tensin aplicado a PORTA<0> es cercano a los cero voltios, mientras que cuando el pulsador se presiona (estado activo) el nivel de tensin aplicado a PORTA<0> estar cercano al voltaje de alimentacin del microcontrolador 5 Vdc.

Figura 5.16. Sistema de desarrollo iBOARd III.

Primer Paso: Ubicar en que puerto est conectado el LED L0. Para ello hacemos referencia a la figura 1.3., donde se muestra el diagrama de conexiones electrnicas entre los LEDs y los puertos del microcontrolador. La figura 5.17. es una sntesis de la conexiones entre los LEDs y el puerto C. Efectivamente el LED L0 est conectado al puerto C bit2. Podemos entonces decir que el LED L0 esta ubicado en PORTB<2>, en serie con una resistencia limitadora de corriente de 220 OHM y un mini switch normalmente abierto (SW1-4), el cual, previamente tendremos que cerrar para conectar el ctodo del led a tierra y de esta forma cerrar el circuito elctricamente.

Figura 5.18. Conexin de pulsadores del sistema de desarrollo iBOARD III.

Este tipo de conexin de los pulsadores se denomina Activa Alta, lo que significa que cuando se activa el pulsador, el nivel de tensin obtenido en el punto de conexin al microcontrolador, es un voltaje con un nivel lgico alto. Tercer Paso: Crear un algoritmo. Por ejemplo: Si el pulsador S0 est presionado entonces el led L0 deber estar encendido Si el pulsador S0 no est presionado entonces el led L0 deber estar apagado Estas variables lingsticas se pueden asociar a valores del puerto, por ejemplo: est presionado no est presionado encendido apagado es equivalente a: PORTA<0> = 1 y es equivalente a: PORTA<0> = 0, al mismo tiempo es equivalente a: PORTC<2> = 1 y es equivalente a: PORTC<2> = 0

Figura 5.17. Conexin de LEDs al iBOARD III.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 27

Cuarto Paso: Codificacin. Utilizaremos el Basic PROTON para escribir nuestro programa:
' ' ' ' CAP_05_Ejemplo_01.bas Ejemplo bsico de utilizacin del sistema iBOARD III Encender el led L0 al presionar el pulsador S0 ------------------------------------------------------------------Device = 16F876 ' Define el microcontrolador utilizado ALL_DIGITAL = True ' Define todos los puertos como digitales XTAL = 20 ' Define la velocidad del resonador TRISA.0 = 1 TRISC.2 = 0 Main: PORTC.2 = PORTA.0 DelayMS 100 GoTo Main End ' Configura a PORTA.0 como Entrada Digital ' Configura a PORTC.2 como Salida Digital ' Asigna al puerto PORTC.2 de Salida el ' valor de entrada al puerto PORTA.0 ' Retardo de 100 ms

CAP_05_Ejemplo_02.bas (Entrada Salida Digital). Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita encender los LED L0 a L3 cuando se presionan los pulsadores correspondientes S0 a S3. Este es una extensin del programa anterior. Veamos su codificacin:
' ' ' ' CAP_05_Ejemplo_02.bas Ejemplo bsico de utilizacin del sistema iBOARD III Encender el led L0 a L3 al presionar el pulsador S0 al S3 ------------------------------------------------------------------Device = 16F876 ' Define el microcontrolador utilizado ALL_DIGITAL = True ' Define todos los puertos como digitales XTAL = 20 ' Define la velocidad del resonador TRISA.0 TRISA.1 TRISA.2 TRISA.3 TRISC.2 TRISC.3 TRISC.4 TRISC.5 = = = = = = = = 1 1 1 1 0 0 0 0 = = = = PORTA.0 PORTA.1 PORTA.2 PORTA.3 ' ' ' ' ' ' ' ' ' ' ' ' Configura Configura Configura Configura Configura Configura Configura Configura Asigna Asigna Asigna Asigna a a a a a a a a a a a a PORTA.0 PORTA.1 PORTA.2 PORTA.3 PORTC.2 PORTC.3 PORTC.4 PORTC.5 el el el el como como como como como como como como valor valor valor valor Entrada Entrada Entrada Entrada Salida Salida Salida Salida de de de de Digital Digital Digital Digital Digital Digital Digital Digital

Quinto Paso: Pruebas Operativas.

Main: PORTC.2 PORTC.3 PORTC.4 PORTC.5

PORTC.2 PORTC.3 PORTC.4 PORTC.5

PORTA.0 PORTA.1 PORTA.2 PORTA.3

DelayMS 100 GoTo Main End End

' Retardo de 100 ms

Figura 5.19. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_01.bas

Figura 5.20. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_02.bas

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 28

5.15. Comandos en alto nivel para el manejo de puertos de E/S HIGH: Configura el puerto y/o el pin especificado como salida y lo coloca a uno lgico. Es equivalente a hacer un TRIS del puerto y luego un PORT. Sintaxis: HIGH pin, donde pin es cualquier bit de los puertos A,B C. LOW: Configura el puerto y/o pin especificado como salida y lo coloca a cero lgico. Es equivalente a hacer un TRIS del puerto y luego un PORT. Sintaxis: LOW pin, donde pin es cualquier bit de los puertos A,B C. TOGGLE: Configura el pin especificado como salida y lo cambia de estado lgico. Sintaxis: TOGGLE pin, donde pin es cualquier bit de los puertos A,B C. No se acepta Toggle de un puerto completo, slo de un Pin. INPUT: Configura el puerto y/o pin especificado como entrada. Es equivalente a hacer un TRIS del puerto. Sintaxis: INPUT pin, donde pin es cualquier bit de los puertos A,B C. OUTPUT: Configura el puerto y/o pin especificado como salida. Es equivalente a hacer un TRIS del puerto. Sintaxis: OUTPUT pin, donde pin es cualquier bits de los puertos A,B C. COUNTER: Cuenta el nmero de ciclos (0-1-0) que ocurren en un pin de entrada/salida durante un perodo de tiempo especificado. Se utiliza para determinar frecuencias de seales, trenes de pulsos generalmente de onda cuadrada. Sintaxis: Variable = COUNTER Pin, Perodo PULSIN: Mide el ancho de un pulso presente en un pin y su valor en tiempo lo almacena en una variable: Sintaxis: Variable = PULSIN Pin, Estado

Pin: Es una variable constante que indica cual pin de E/S ser utilizado, el mismo ser convertido en entrada. Estado: (0,1) (Low/High) es el flanco requerido para empezar la cuenta. Variable: Variable que almacena el resultado de la operacin.
Nota: Para un resonador de 20 MHz, el conteo de PULSIN se realizar en intervalos de 2us. El rango de PULSIN ser entre 1 y 65535. PULSEOUT: Genera un pulso de una duracin especificada en un terminal de E/S. Sintaxis: PULSOUT Pin, Perodo, Estado Inicial

Pin: Es una variable constante que indica cual pin de E/S ser utilizado, el mismo ser convertido en salida. Perodo: Es una variable, constante o expresin de (4 65535) us que especifica la cantidad de tiempo en micro-segundos que durar el pulso.

Pin: Variable, constante o expresin que indica cual pin de E/S ser utilizado, el mismo ser convertido en entrada. Perodo: Variable, constante o expresin de (0-65535)ms que especifica el tiempo durante el cual, se har el conteo. Variable: Variable que
almacena el resultado de la cuenta.

Figura 5.21. Representacin grfica del comando COUNT.

Figura 5.22. Representacin grfica del comando PULSOUT.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 29

FREQOUT: Genera uno o dos tonos sinusoidales de un periodo de tiempo especfico, usando un algoritmo de modulacin de ancho de pulso. En caso de ser dos tonos, estos se mezclaran a travs del pin especificado, para de esta forma, generar un nico tono. Sintaxis: FREQOUT Pin, Perodo, Freq1 {,Freq2}

SOUND2: Genera uno dos tonos por los pines seleccionados, es ms completa que la instruccin sound. Sintaxis: SOUND2 Pin1, Pin2, [Nota1\ Nota\ Duracin]

Pin: Variable, constante o expresin que especifica el pin de E/S usado. Este ser configurado como salida. Perodo: Variable, constante o expresin de 0 a 65535. Especifica el periodo de tiempo que dura el tono generado. Freq1: Variable, constante o expresin de 0 a 32767. Especifica la frecuencia en Hz del primer tono generado. Freq2:
Variable, constante o expresin de 0 a 32767. Especifica la frecuencia en Hz del segundo tono generado.

Pin1,2: Variable, constante o expresin que especifica los pines de E/S. Estos sern configurados como salida. Nota1,2: Una variable o constante que especifica su valor en Hz en el rango de (0..16000) Hz. Duracin: Variable, constante o expresin de 16 bits que especifica la duracin de la nota en intervalos de 1ms.
RCIN: Se utiliza generalmente para medir perodos de tiempos muy cortos como la carga / descarga de un circuito RC a travs de un pin de E/S. Sintaxis: Variable = RCIN Pin, Estado

Los tonos son generados en forma matemtica a travs de la modulacin del ancho de pulso sinusoidal que veremos ms adelante, sin embargo, con la utilizacin de un pequeo filtro pasa bajo usted podr general ondas sinusoidales por cualquier pin de E/S. Esta conexin se puede visualizar a travs de la figura 5.23.

Pin: Es una variable constante que indica cual pin de E/S ser utilizado. Estado: Es una variable constante de 1 bit (0 1) que especifica el estado en el cual terminar el perodo de tiempo, nivel lgico cero nivel lgico uno. Variable: Es una variable que almacena el tiempo en micro segundos, en el cual, ocurri el cambio de estado de nivel del pin especificado. Resolucin para 20 MHz igual a 2us.
Cuando RCIN se ejecuta, se comienza a incrementar un contador. El contador se parar tan pronto el estado del pin cambie de valor con respecto al valor especificado (0,1). RCIN retornar un valor que ser almacenado por la variable .

Figura 5.23. Esquema de conexiones de un filtro pasa bajos utilizado por el comando FREQOUT para la generacin de ondas sinusoidales.

SOUND: Genera uno tono o ruido blanco por el pin seleccionado. Sintaxis: SOUND Pin, [Nota, Duracin]

Figura 5.24. Esquema de conexiones utilizado con el comando RCIN.

(1) Equivale a 78 Hz y el (127) Equivale a 10KHz y entre (128..255) se obtendr ruido blanco. Duracin: Variable, constante o expresin de 8 bits que especifica la duracin de la nota en intervalos de 10ms.

Pin: Variable, constante o expresin que especifica el pin de E/S usado. Este ser configurado como salida. Nota: Un valor de 8 Bits (0..127) el (0) equivale a silencio, el

RCIN, puede ser utilizado para medir el valor de resistencias y/o condensadores. Un uso muy comn es leer el valor de un potencimetro resistivo. Cuando se desee utilizar este comando, se debern realizar las siguientes acciones: (1) Colocar el pin de E/S como salida y con un nivel lgico alto. (2) Esperar suficiente tiempo para que el condensador se cargue, aprox. 4 constantes de tiempo = (4xRxC) seg. (3) Ejecutar el comando RCIN. El cual, configurar al pin seleccionado como una entrada y medir el voltaje del condensador sobre el pin, el cual, se estar descargando a travs de la resistencia. El tiempo en que demora el pin de pasar de un estado lgico (1) al estado lgico (0) se almacenar en la variable resultado, as conociendo este tiempo podemos decir: RCIN (units) = 600 x R (Kohm) x C (uF)

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 30

5.16. Comandos en alto nivel para el manejo de Interrupciones ENABLE, DISABLE: Habilita o deshabilita una todas las interrupciones. Sintaxis: Enable Disable Estos comandos actuarn sobre la habilitacin y/o des-habilitacin global del registro INTCON bit <GIE>. ON INTERRUPT Label: Salta la ejecucin del programa a la rutina de interrupcin especificada por la etiqueta Label. RESUME: Finalizacin de la rutina de interrupcin, devuelve el programa al punto de ejecucin previa antes de que ocurriera la interrupcin. Antes de hacer un ejercicio prctico, vamos a definir algunos conceptos utilizados con las interrupciones: Fuente de interrupcin: Recurso, elemento o dispositivo que est en capacidad de producir una interrupcin. Interrupcin: Es el evento ocasionado y que debe ser atendido. Rutina de interrupcin (ISR): Es el segmento de cdigo que se ejecuta al ocurrir la interrupcin y que debe observar el manejo de la misma. Por ejemplo, guardar algunas variables, efectuar una accin de correccin, emitir algn tipo de indicacin o alarma, etctera. Habilitacin de la interrupcin: Para que la interrupcin pueda ocurrir, hay que asegurarse que la habilitacin de la interrupcin deseada este activa. Interrupciones recurrentes: Son aquellas que pueden ocurrir dentro de su propia ISR. El microcontrolador PIC no permite este tipo de interrupciones, de ocurrir, conducen a que se quede colgado teniendo que producirse un Reset para salir de esta condicin. Interrupciones anidadas: Dos fuentes de interrupcin pueden, de forma simultanea o no, producir una interrupcin.

CAP_05_Ejemplo_ 03.bas (Interrupcin externa por RB0/EXT). Utilizando el sistema de desarrollo iBOARD III, desarrolle un programa que permita utilizar interrupciones en el microcontrolador. El programa principal har que un LED conectado en PORTC<5> encienda en forma intermitente, mientras que la rutina de interrupcin har que un LED conectado en PORTC<2> encienda y apague cada vez que presione un pulsador externo, el cual, ser colocado en el pin PORTB.0 que es precisamente el pin de activacin de interrupcin externa. No se haba hasta ahora hecho un programa que mostrara como trabajan las interrupciones, sin embargo, ya que conocemos las herramientas bsicas del manejo de entrada salida digital, es hora de desarrollar nuestro primer programa con interrupciones. Para el montaje electrnico se necesitar de un pulsador normalmente abierto adicional a los que vienen incluidos en el sistema de desarrollo iBOARD III. Este pulsador deber conectarse entre el pin PORTB<0> y tierra (GND), tal como es mostrado en la Figura 5.26.

Pulsador N . conectado A entre PO TB R <0> y G D N

Figura 5.25. Mecanismo de activacin ante la ocurrencia de una interrupcin. Fuente: Tomado de www.mikroe.com

Figura 5.26. Fotografa de las conexiones necesarias para la colocacin del pulsador NA, el cual, ser utilizado como generador de una interrupcin externa.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 31

REGISTRO DE INTERRUPCIONES: INTCON


' ' ' ' ' ' CAP_05_Ejemplo_03.bas Ejemplo bsico de utilizacin de interrupciones El LED conectado en PORTC<5> parpadear en forma intermitente, mientras que el LED conectadoen PORTC<2> cambiar de estado cuando se presiona el pulsador que est colocado en PORTB<0>. ------------------------------------------------------------------Device = 16F876 ' Define el Micro a Utilizar ALL_DIGITAL = True ' Configura Puertos como digitales XTAL = 20 ' Define velocidad resonador

Fuente: Fuente: Tomado de www.mikroe.com

' DEFINICIN DE CONSTANTES Y SIMBOLOS ' ------------------------------------------------------------------Symbol INTE = INTCON.4 ' Bit Habilit. Interrupciones por RB0 Symbol INTF = INTCON.1 ' Bit Flag Interrupciones por RB0 Symbol PULL = OPTION_REG.7 ' Bit Habilit. Resist. Pull_Up Pto. B Symbol L3 = PORTC.5 ' Asigna el LED L3 al PORTC.5 Symbol L0 = PORTC.2 ' Asigna el LED L0 al PORTC.2 ' DEFINICIN DEL MANEJADOR DE INTERRUPCIONES ' ------------------------------------------------------------------On Interrupt GoTo SUB_INT ' Cuando ocurre una interrupcin va a la ' subrrutina "SUB_INT" PULL = 0 ' Habilita las resist. de Pull_UP Pto. B INTE = 1 ' Habilita la Interrupcin por RB0 ' PROGRAMA PRINCIPAL. ' ------------------------------------------------------------------Main: Toggle L3 ' Hace parpadear el L3 cada 100 ms DelayMS 100 GoTo Main Disable ' Esta instruccin debe siempre ir al ' final del programa principal y antes ' de la sub_rutina de interrupcin.

REGISTRO DE OPCIONES Bit 7, OPTION<7>

' RUTINA DE INTERRUPCIN ' ------------------------------------------------------------------SUB_INT: Toggle L0 ' Cambia el estado del LED L0 INTF = 0 ' Limpia el Flag de Interrup, por RB0 Resume ' Retorna de la interrupcin

Figura 5.27. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_03. bas (Interrupciones).

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 32

CAP_05_Ejemplo_ 04 (Comando SOUND).


' ' ' ' ' ' ' ' ' ' CAP_05_Ejemplo_04.bas Ejemplo bsico de utilizacin del comando SOUND....... ........... Star Trek The Next Generation .......... Es necesario colocar un buzzer piezoelctrico - entre el pin PORTB<3> y tierra a travs de una resistencia de 220 ohm en serie con el buzzer .................... 220 PORTB.3 -----/\/\/\-----(Buz)---+ | GND ------------------------+ Device = 16F876 ALL_DIGITAL = True XTAL = 20 Dim LOOP As Byte Dim Freq1 As Word Dim Freq2 As Word Symbol Symbol Symbol Symbol Symbol Symbol C = D = E = G = R = PIN 2092 2348 2636 3136 0 = PORTB.3 ' Define el Micro a Utilizar ' Configura Puertos como digitales ' Define velocidad resonador ' Declaracin de variable LOOP ' Declaracin de variable Frecuencia 1 ' declaracin de variable Frecuencia 2 ' ' ' ' ' ' frecuencia nota musical C frecuencia nota musical D frecuencia nota musical E frecuencia nota musical G Pausa - Silencio Pin de conexin al Buzzer

THEME: Sound PIN, [50,60,70,20,85,120,83,40,70,20,50,20,70,20,90,120,90,_ 20,98,160] DelayMS 500 For LOOP = 128 To 255 ' Ruido blanco ascendente Sound PIN, [LOOP,2] Next Sound PIN, [43,80,63,20,77,20,71,80,51,20,_ 90,20,85,140,77,20,80,20,85,20,_ 90,20,80,20,85,60,90,60,92,60,87,_ 60,96,70,0,10,96,10,0,10,96,10,0,_ 10,96,30,0,10,92,30,0,10,87,30,0,_ 10,96,40,0,20,63,10,0,10,63,10,0,_ 10,63,10,0,10,63,20] LOOP = 0 Repeat Freq1 = LookUpL LOOP , [E,D,C,D,E,E,E,R,D,D,D,R,E,G,G,R,E,D,C,D,_ E,E,E,E,D,D,E,D,C] If Freq1 = 0 Then Freq2 = 0 : Else Freq2 = Freq1 - 8 FreqOut PIN , 225 , Freq1 , Freq2 Inc LOOP Until LOOP > 28 DelayMS 5000 GoTo THEME

Figura 5.28. Fotografa de la iBOARD III ante la ejecucin del programa CAP_05_Ejemplo_04.bas Comando Sound. Se escuchar a travs del buzzer Un extracto de la cancin: Star Trek The Next Generation.

Sistema de desarrollo para microcontroladores PIC, iBOARD III. 33

Vous aimerez peut-être aussi