Está en la página 1de 82

INTRODUCCIN A LOS MICROCONTROLADORES ............................................

3
Q UE ES UN MICROCONTROLADOR? ................................................................................. 3
APLICACIN DE LOS MICROCONTROLADORES ................................................................... 3
INTRODUCCIN A LOS MICROCONTROLADORES PIC ......................................................... 4
El procesador o CPU .................................................................................................. 5
Memoria ROM ............................................................................................................. 5
Memoria RAM............................................................................................................. 7
Registros y Bits............................................................................................................ 7
Lneas de Entrada/Salida (E/S)................................................................................. 12
UTILIZANDO UN MICROCONTROLADOR ........................................................................... 12
NIPLE: PROGRAMACIN VISUAL DE MICROCONTROLADORES PIC ................................. 14
Niple como herramienta didctica ............................................................................ 16
EL MICROCONTROLADOR PIC 16F84 ................................................................... 17
ESTRUCTURA DEL PIC 16F84 ......................................................................................... 17
CARACTERSTICAS TCNICAS DEL PIC 16F84 ................................................................ 17
CONEXIONADO DEL PIC 16F84 ...................................................................................... 18
LOS PUERTOS DEL PIC 16F84......................................................................................... 19
COMENZANDO A PROGRAMAR CON NIPLE ...................................................... 20
EJERCICIO 1 - BALIZA ELECTRNICA ................................................................ 20
OBJETIVO ....................................................................................................................... 20
PROCEDIMIENTO ............................................................................................................. 20
DESARROLLO .................................................................................................................. 20
Asignar un nombre a los pines del puerto................................................................. 21
Configurar los puertos del PIC ................................................................................. 24
Utilizando el puerto................................................................................................... 26
Realizar temporizaciones .......................................................................................... 29
Temporizacin por bucles ......................................................................................... 30
Cambiar el estado de los diodos Led ........................................................................ 33
Generar el cdigo assembler..................................................................................... 37
Pgina 1

Compilar el programa ............................................................................................... 38


Grabar el programa al micro .................................................................................... 38
ESQUEMA ELECTRNICO ................................................................................................. 39
LISTA DE MATERIALES .................................................................................................... 40
EJERCICIO 2 BALIZA ELECTRNICA PROGRAMABLE............................... 41
OBJETIVO ....................................................................................................................... 41
PROCEDIMIENTO ............................................................................................................. 41
DESARROLLO .................................................................................................................. 41
El Dip-Switch............................................................................................................. 41
Configurar el Puerto B.............................................................................................. 44
Declarar un registro de usuario ................................................................................ 46
Leer el puerto B ......................................................................................................... 47
Comparacin de un Registro..................................................................................... 49
ESQUEMA ELECTRNICO ................................................................................................. 60
EJERCICIO 3 CONTADOR DIGITAL .................................................................... 61
OBJETIVO ....................................................................................................................... 61
PROCEDIMIENTO ............................................................................................................. 61
DESARROLLO .................................................................................................................. 61
El Transmisor-Receptor infrarrojo ........................................................................... 61
El display de 7 segmentos.......................................................................................... 62
El proceso de multiplexado ....................................................................................... 65
Desarrollando el contador digital............................................................................. 67

Pgina 2

Introduccin a los microcontroladores


Que es un microcontrolador?
Los microcontroladores hicieron su aparicin a principio de los 80 y se trata de un
circuito integrado programable que contiene toda la estructura (arquitectura) de una
microcomputadora. Es decir que, dentro de un microcontrolador podemos encontrar:

una CPU (Unidad Central de Proceso)

Memoria RAM

Memoria ROM

Memoria EEPROM (Memoria de lectura y escritura no voltil, es decir, que no se


pierden los datos cuando el circuito es desconectado)

Puertos de Entrada/Salida (Pines de E/S)

e incluso muchos modelos de microcontroladores incorporan distintos mdulos


perifricos, como pueden ser; conversores analgico/digital (A/D), mdulos
PWM (control por ancho de pulso), mdulos de comunicaciones seriales o en
paralelo, y ms.

Todo esto contenido dentro del mismo circuito integrado.

Aplicacin de los microcontroladores


Cada vez existen ms productos que incorporan microcontroladores con el fin de
aumentar sustancialmente sus prestaciones, reducir su tamao y costo, mejorar su confiabilidad y
disminuir el consumo de energa.
Existen varios fabricantes de microcontroladores entre los cuales podemos nombrar a las
empresas Motorola, Microchip, Atmel, Paralax, etc.
En este proyecto utilizaremos los microcontroladores de la marca Microchip, a los cuales
se los llama PIC (Peripheral Interface Controller).

Pgina 3

Introduccin a los microcontroladores PIC


Existe una gran cantidad de modelos de microcontroladores cuyas caractersticas y
prestaciones varan de un modelo a otro. De esta manera los desarrolladores pueden seleccionar
el modelo que mejor se ajuste a sus necesidades.

Los distintos modelos de microcontroladores se agrupan por familia. Una familia puede
estar formada por un conjunto de modelos de microcontroladores cuyas caractersticas y
prestaciones son bastante similares.

Cuando compramos un microcontrolador, la memoria del mismo encuentra en blanco,


es decir, que el microcontrolador no sabe hacer nada. Para que un microcontrolador funcione
es necesario que sea programado. Esto se realiza mediante un lenguaje de programacin
llamado assembler cuya principal caracterstica es su alta complejidad ya que se trata de un
lenguaje de bajo nivel, es decir, que se encuentra ms cercano al lenguaje de la mquina que
del lenguaje humano.

Esto significa que slo personas altamente capacitadas estn en condiciones de realizar
desarrollos electrnicos que incluyan microcontroladores e incluso a stos especialistas les
implica un gran esfuerzo intelectual y mucho tiempo de desarrollo.
Bsicamente, un microcontrolador esta compuesto por los siguientes componentes:

Procesador o CPU (del ingls Central Prossesing Unit o Unidad Central de


Proceso).

Memoria para el programa tipo ROM.

Memoria RAM para Contener los datos.

Lneas de E/S para comunicarse con el exterior.

Diversos mdulos para el control de perifricos (temporizadores, Puertas Serie y


Paralelo,

CAD:

Conversores

Analgico/Digital,

CDA:

Conversores

Digital/Analgico, etc.).

Pgina 4

El procesador o CPU
Es el elemento ms importante del microcontrolador y determina sus principales caractersticas,
tanto a nivel hardware como software.
La CPU se encarga la decodificacin y ejecucin del programa.

Actualmente, existen 3 tipos de arquitectura de procesadores:

CISC (Computadores de Juego de Instrucciones Complejo): Disponen de ms de 80


instrucciones en su repertorio, algunas de las cuales son muy sofisticadas y potentes,
requiriendo muchos ciclos para su ejecucin. Una ventaja de los procesadores CISC es
que ofrecen instrucciones complejas que actan como macros.

RISC (Computadores de Juego de Instrucciones Reducido): En estos procesadores el


repertorio de instrucciones es muy reducido y las instrucciones son simples y
generalmente se ejecutan en un ciclo. La ventaja de stos es que la sencillez y rapidez
de las instrucciones permiten optimizar el hardware y el software del procesador. El
microcontrolador PIC 16F84 que utilizamos en este proyecto cuenta con este tipo de
arquitectura.

SISC (Computadores de Juego de Instrucciones Especfico): En los microcontroladores


destinados a aplicaciones muy concretas, el juego de instrucciones, adems de ser
reducido, es "especfico", o sea, las instrucciones se adaptan a las necesidades de la
aplicacin prevista.

Memoria ROM
La memoria ROM es una memoria no voltil, es decir, que no se pierden los datos al
desconectar el equipo y se destina a contener el programa de instrucciones que gobierna la
aplicacin. Los microcontroladores disponen de capacidades de ROM comprendidas entre 512
bytes y 8 k bytes.
Existen distintos tipos de memorias ROM, la cual determinar la aplicacin del
microcontrolador.

Pgina 5

ROM con mscara: Es una memoria no voltil de slo lectura cuyo contenido se
graba durante la fabricacin del chip. El elevado costo del diseo de la mscara
slo hace aconsejable el empleo de los microcontroladores con este tipo de
memoria cuando se precisan cantidades superiores a varios miles de unidades.

OTP: El microcontrolador contiene una memoria no voltil de slo lectura


"programable una sola vez" por el usuario. OTP (One Time Programmable). Es el
usuario quien puede escribir el programa en el chip mediante un sencillo grabador
controlado por un programa desde una PC. La versin OTP es recomendable
cuando es muy corto el ciclo de diseo del producto, o bien, en la construccin de
prototipos y series muy pequeas. Tanto en este tipo de memoria como en la
EPROM, se suele usar la encriptacin mediante fusibles para proteger el cdigo
contenido.

EPROM: Los microcontroladores que disponen de memoria EPROM (Erasable


Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La
grabacin se realiza, como en el caso de los OTP, con un grabador gobernado
desde un PC. Si, posteriormente, se desea borrar el contenido, disponen de una
ventana de cristal en su superficie por la que se somete a la EPROM a rayos
ultravioleta durante varios minutos. Las cpsulas son de material cermico y son
ms caros que los microcontroladores con memoria OTP que estn hechos con
material plstico.

EEPROM: Se trata de memorias de slo lectura, las cuales se puede escribiri y


borrar elctricamente. EEPROM (Electrical Erasable Programmable Read OnIy
Memory). Tanto la programacin como el borrado, se realizan elctricamente
desde el propio grabador y bajo el control programado de un PC. Es muy cmoda
y rpida la operacin de grabado y la de borrado. No disponen de ventana de
cristal en la superficie. Los microcontroladores dotados de memoria EEPROM
una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se
quiera sin ser retirados de dicho circuito. Para ello se usan "grabadores en
Pgina 6

circuito" que confieren una gran flexibilidad y rapidez a la hora de realizar


modificaciones en el programa de trabajo. El nmero de veces que puede grabarse
y borrarse una memoria EEPROM es finito, por lo que no es recomendable una
reprogramacin continua. Son muy idneos para la enseanza y la Ingeniera de
diseo. Se va extendiendo en los fabricantes la tendencia de inc luir una pequea
zona de memoria EEPROM en los circuitos programables para guardar y
modificar cmodamente una serie de parmetros que adecuan el dispositivo a las
condiciones del entorno. Este tipo de memoria es relativamente lenta.

FLASH: Se trata de una memoria no voltil, de bajo consumo, que se puede


escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es
ms pequea. A diferencia de la ROM, la memoria FLASH es programable en el
circuito. Es ms rpida y de mayor densidad que la EEPROM. La alternativa
FLASH est recomendada frente a la EEPROM cuando se precisa gran cantidad
de memoria de programa no voltil. Es ms veloz y tolera ms ciclos de escritura
y borrado.

Memoria RAM
La memoria RAM es una memoria voltil, es decir, que se pierden los datos al
desconectar el equipo, y se destina a guardar las variables y los datos. Los microcontroladores
disponen de capacidades de RAM comprendidas entre 20 y 512 bytes.

Registros y Bits
Un registro es una posicin de memoria en la cual se puede almacenar un dato. Es decir
que la memoria esta dividida en pequeas partes llamadas Registros.
Dentro de la memoria, cada registro es identificado mediante un nmero, el cual se
denomina Direccin de memoria y generalmente est expresado en formato Hexadecimal. El
primer registro de una memoria corresponde a la direccin 00H.
Dado que identificar a cada registro mediante un nmero hexadecimal resulta muy
complejo para el programador, existe la posibilidad de asignar un nombre para cada registro.

Pgina 7

En general, ste nombre est directamente relacionado con la funcin que cada registro cumple
dentro del sistema.
Los registros no slo son utilizados por el programador (usuario) para almacenar los
datos que la aplicacin debe procesar, sino que, adems, sirven para controlar todo el
funcionamiento del microcontrolador en su conjunto. Esta funcin, la cumple un conjunto de
registros que ya vienen Predefinidos desde la fabrica. Es decir, que el fabricante asigna las
funciones de configuracin y control del microcontrolador en un grupo de registros y el usuario
no puede modificar la funcin que cumple cada uno de stos registros.

Cada Registro est dividido en 8 casilleros a los cuales se los denomina Bits.
Entonces podemos decir que un Registro esta formado por un conjunto de 8 bits.
El Bit es la menor unidad de informacin que un sistema digital puede procesar y solo
puede contener los valores lgicos 0 y 1.

La palabra BIT proviene de la abreviatura de las palabra Binary Digit.

Los sistemas digitales representan la informacin en forma de bits porque sus circuitos
slo pueden tener 2 estados: encendido o apagado.

En general podemos decir que:


1 = Encendido = Verdadero = SI = +5V
0 = Apagado = Falso = NO = 0V

Cada Bit se identifica por la posicin que ocupa dentro del registro, siendo el primer Bit
el nmero 0, que es el que se encuentra en el extremo derecho del registro.

Al igual que los registros, se puede asignar un nombre a cada Bit para facilitar su
identificacin.

Pgina 8

En un registro podemos almacenar una combinacin 8 ceros y unos. Esto nos da una
cantidad de 28 combinaciones, es decir, 256 posibles combinaciones de ceros y unos.
Esto significa que un registro puede procesar valores entre 0 y 255.

Esta caracterstica de procesar nmeros (Dgitos) es lo que da el nombre a la


Electrnica Digital. La electrnica digital procesa nmeros formados por combinaciones de
ceros y unos. Cualquier seal analgica debe ser digitalizada, es decir, convertida a nmeros,
para poder ser procesada en un sistema digital.

Podemos decir que el conjunto de ceros y unos almacenado en un registro se trata de un


nmero entre 0 y 255, expresado en sistema Binario, esto es, en base 2. Para interpretar dicho
numero debemos realizar el clculo de base para poder expresarlo en sistema decimal.

El siguiente ejemplo muestra el desarrollo de un clculo de conversin de sistema binario


(base 2) a sistema decimal (base 10):

Se llama Peso Binario al valor que representa un Bit segn la posicin que ocupa
dentro del registro. El Bit que esta ubicado ms a la derecha es el Bit menos significativo (LSB,
Least Significant Bit) y tiene un peso de 20 =1. El bit del extremo izquierdo del registro el Bit
ms significativo (MSB, Most Significant Bit) y tiene un peso de 27 =128. Los pesos binarios
crecen de derecha a izquierda en potencias de 2.

Pgina 9

Una manera de simplificar el clculo de conversin de binario a decimal, es directamente


sumar los valores de los pesos binarios de los bits cuyo valor sea 1.

El sistema hexadecimal es un sistema en base 16 y consta de 16 dgitos diferentes que


son: del 0 al 9 y luego de la letra A a la F, es decir, 10 dgitos numricos y seis caracteres
alfabticos.
El sistema hexadecimal se usa como forma simplificada de representacin de nmeros
binarios y debido a que 16 es una potencia de 2 (24 =16), resulta muy sencilla la conversin de
los nmeros del sistema binario al hexadecimal y viceversa.

Mediante el sistema hexadecimal podemos representar un valor numrico de 8 bits


utilizando slo 2 dgitos. De sta manera estamos dividiendo el registro de 8 bits en 2 partes de 4
bits cada una llamada Nibble. Al nibble correspondiente a los 4 bits menos significativos, se lo
denomina Nibble Bajo y al nibble correspondiente a los 4 bits ms significativos se lo
denomina Nibble Alto.
Pgina 10

100010002 = 136 = 8816


El sistema hexadecimal es utilizado para identificar las direcciones de registros de las
memorias en sistemas digitales porque nos permite representar el valor de un Nibble con slo 1
digito, ya que:
11112 => (8+4+2+1) = 15 = F16
Esto nos permite representar nmeros grandes utilizando unos pocos dgitos.
Por ejemplo: FF FF16 = 11111111 111111112 = 65535

En la programacin de microcontroladores, es habitual utilizar los 3 sistemas de


numeracin (Binario, Decimal y Hexadecimal) dependiendo del proceso que deseamos realizar.
Por eso es fundamental tener claros estos conceptos.

Pgina 11

Lneas de Entrada/Salida (E/S)


Los microcontroladores cuentan con una serie de pines destinados a entrada y salida de
datos o seales digitales. A estos pines se les denomina Puerto.
Como mencionamos anteriormente, todo el funcionamiento del microcontrolador est
controlado a travs de los registros. Los puertos no son la excepcin, tambin estn controlados
por los registros. Por esto, un puerto no puede estar formado por ms de 8 pines; 1 Pin por cada
Bit de un registro. Un puerto si puede estar formado por menos de 8 pines.
Un microcontrolador puede contener varios puertos dependiendo del modelo de micro.
Cada puerto se lo identifica con una letra. Por ejemplo; Puerto A, Puerto B, etc.

Para poder utilizar un puerto, primero el mismo debe ser configurado. Cada pin de un
puerto puede ser configurado como entrada o salida independientemente del resto de los pines
del mismo puerto.

Utilizando un microcontrolador
Como mencionamos anteriormente, el microcontrolador tiene una memoria de programa,
de tipo Flash, donde grabamos las instrucciones necesarias para que el micro realice el trabajo
que necesitamos. Cuando compramos un microcontrolador, la memoria flash viene vaca, es
decir, que el microcontrolador No sabe hacer nada.
Para que un microcontrolador funcione es necesario programarlo.
Los microcontroladores se programan en un lenguaje de programacin llamado
Ensamblador (en ingls Assembler) cuya principal caracterstica es su altsima complejidad.

Los lenguajes de programacin se clasifican segn el Nivel de programacin en:

Lenguaje de Alto Nivel: permite que los algoritmos se expresen en un nivel y


estilo de escritura fcilmente legible y comprensible por el hombre. En la
actualidad se trata de lenguajes de tipo visual.

Pgina 12

Lenguaje de Bajo Nivel: el usuario se acerca un poco ms al lenguaje de


maquina. Permiten un acceso ms amplio al control fsico de la maquina
(hardware).

Lenguaje Ensamblador: Podramos considerarlo el lenguaje de ms bajo nivel. El


usuario escribe cdigo en el mismo idioma del procesador. Se tiene control total
del sistema. Es necesario un conocimiento de la arquitectura mecnica del
procesador para realizar una programacin efectiva. El lenguaje de programacin
es muy especifico para cada modelo de procesador, incluso puede varia de un
modelo a otro de procesador dentro de un mismo fabricante.

Podemos decir que los lenguajes de alto Nivel se asemejan mas al lenguaje humano y que
los lenguajes de bajo Nivel se asemejan ms al lenguaje de mquina y en el lenguaje
ensamblador el usuario debe programar en el propio idioma del procesador.

El microcontrolador slo entiende de nmeros, es decir que, el cdigo assembler (texto)


no puede ser procesado directamente por el PIC. Para poder grabar el programa en el micro,

Pgina 13

primero debemos convertir el texto del cdigo assembler a nmeros, en general, en formato
hexadecimal. A este proceso se le llama Compilacin.

Una vez desarrollado el cdigo assembler, debemos compilarlo. Esto se realiza con un
software compilador el cual se puede obtener de manera gratuita desde la pgina web del
fabricante del microcontrolador en www.microchip.com .
El archivo compilado tiene una extensin .hex.

Por ltimo, despus de compilado, el programa est listo para ser grabado al
microcontrolador. Esto realiza mediante una placa programadora. A sta placa programadora,
comnmente se la llama programador. Existen distintos tipos de programadores los cuales
pueden ser para conectar a la PC mediante el puerto Serie (COM) o Paralelo (LPT).
Cada programador trabaja en conjunto con un software, mediante el cual se realiza el
proceso de lectura y escritura de los microcontroladores.

A continuacin se presenta un resumen del proceso de desarrollo del cdigo y grabacin


de un microcontrolador:

1) Escribir el cdigo assembler. Se genera un archivo con extensin ASM.


2) Compilar el cdigo assembler. Se genera un archivo con extensin HEX.
3) Grabar (transferir) el programa desde la PC al microcontrolador mediante un
programador.

De estos 3 pasos, el primero insume el 95 % de tiempo y esfuerzo.

Niple: Programacin Visual de Microcontroladores PIC


Como mencionamos anteriormente, la programacin de los microcontroladores resulta
una tarea muy compleja dado que el usuario debe conocer la arquitectura del procesador y
adems debe dominar el lenguaje de programacin Ensamb lador. Si bien existen distintas
versiones del lenguaje C o Basic adaptadas a la programacin de microcontroladores, todava la
programacin resulta muy compleja por el alto grado de abstraccin que implica.
Pgina 14

Por esto, actualmente, la tecnologa de microcontroladores est siendo implementada slo


en las carreras de Ingeniera en Electrnica.

El presente proyecto propone una herramienta de software llamado Niple para


programacin de microcontroladores.

Niple es un entorno de desarrollo visual para programacin de microcontroladores PIC.


Con Niple, el usuario slo disea un diagrama de flujo de manera totalmente visual y en alto
nivel de programacin, en lenguaje humano, y el software genera el cdigo assembler de manera
automtica. Adems, el software controla y supervisa todo el proceso de diseo, advirtiendo al
usuario sobre posibles errores en la lgica del programa que se esta diseando. Esta ventaja no la
tiene ningn otro lenguaje de programacin.

De esta manera Niple ofrece la posibilidad de realizar desarrollo con microcontroladores


con un mnimo de esfuerzo y resulta la herramienta ideal para el aprendizaje sta tecnologa de
ltima generacin.
Pgina 15

El principal objetivo de Niple es facilitar al mximo la programacin de los


microcontroladores. Para esto, el software ofrece un entorno totalmente visual, donde todo el
sistema se adapta a las caractersticas del modelo de microcontrolador seleccionado; es decir
que; carga el mapa de memoria con sus respectivos nombres de registros y bits, asigna las
funciones correspondientes a cada Registro y Bit dentro del sistema, ajusta el tamao de la
memoria EEPROM, activa los mdulos correspondientes, etc. Es decir que, Ud. tendr
disponible slo las caractersticas que corresponden al modelo de micro en uso.
El concepto de la programacin es que el usuario se concentre en qu es lo que quiere
hacer, y Niple sabe cmo hacerlo. Es decir que el usuario slo se dedica a disear la
estructura lgica del proceso que desea realizar y el software se encarga de resolver todo el
desarrollo del cdigo assembler, controlando hasta el ms mnimo detalle.

Niple como herramienta didctica

Explicar que el microcontrolador debe ser programado. Alta complejidad de


programacin.

Comparacin entre la manera tradicional de programacin y la programacin con Niple

Imgenes Presentacin.

Las caractersticas de Niple hacen del mismo, la herramienta ideal para la enseanza de la
tecnologa de microcontroladores en los colegios tcnicos.

Pgina 16

El microcontrolador PIC 16F84


Estructura del PIC 16F84
Inicialmente todos los microcontroladores incorporaron la arquitectura de von Neumann,
la cual se caracteriza por disponer de una sola memoria principal donde se almacenan los datos y
las instrucciones. A esta memoria se accede a travs de un sistema de buses nico (direcciones,
datos y control).
El PIC 16F84, al igual que el resto de los microcontroladores de la actualidad, estn
diseados con la arquitectura Harvard. La arquitectura Harvard dispone de dos memorias
independientes; una que contiene slo instrucciones, y otra donde se almacenan los datos. Ambas
memorias cuentan con sus respectivos sistemas de buses de acceso y es posible realizar
operaciones de acceso (lectura o escritura) simultneamente en ambas memorias.

Caractersticas tcnicas del PIC 16F84

Voltaje de alimentacin: 5VCC.

CPU RISC

Circuito Integrado de 18 pines.

13 Pines de configurables como Entrada o Salida.

Frecuencia operacin mxima: 10 Mhz.

Memoria Flash: 1 KBytes.

Memoria de Datos: 68 Bytes.

Memoria de Datos EEPROM: 64 Bytes.

1 Temporizador interno.

4 Interrupciones.

Como mencionamos anteriormente, para que un microcontrolador funcione es necesario


grabarle un programa en su interior. Este programa ser ledo y ejecutado lnea a lnea por la
CPU. Para que la CPU funcione, debe contar con un Generador de impulsos de reloj externo que
sincroniza el funcionamiento de todo el sistema.

Pgina 17

En este proyecto, para origen de la seal de reloj externa utilizaremos un cristal de 4


MHz. Dado que el microcontrolador ejecuta cada instruccin, es decir, cada lnea de cdigo, a
de la velocidad del cristal, el resultado ser que el microcontrolador estar ejecutando el cdigo a
una velocidad de 1 Mhz. Es decir que, ejecutar 1.000.000 de lneas de cdigo del programa por
segundo. Por lo tanto, cada lnea de cdigo se ejecutar en 1 microsegundo (1/1.000.000 Seg.).

Conexionado del PIC 16F84

Pgina 18

Los puertos del PIC 16F84

El PIC 16F84 dispone de 2 puertos denominados Puerto A y Puerto B.El puerto A


cuenta con 5 pines de Entrada/Salida y el puerto B con 8 pines de Entrada Salida.

Pgina 19

Comenzando a programar con Niple


El presente proyecto consiste en la implementacin del software Niple para programacin
de microcontroladores PIC.
Con Niple, la programacin se realiza mediante un entorno visual y de alto nivel de
programacin y el software genera de manera automtica el cdigo assembler. Adems, el
sistema supervisa cada todo el proceso de diseo del programa, advirtiendo de posibles errores y
facilitando a los alumnos, el desarrollo de proyectos evitando la complejidad del cdigo
assembler.

Ejercicio 1 - Baliza Electrnica


Objetivo
Iniciarse en la metodologa de programacin con Niple.
Conocer los Puertos de comunicacin de los microcontroladores. Su configuracin y uso.
Conocer la manera de realizar temporizaciones con un microcontrolador.

Procedimiento
Desarrollar un programa para que el PIC controle 2 diodos Led de manera intermitente,
encendiendo y apagando cada led durante 1 segundo, de manera alternada. Los leds sern
conectados a los pines de un puerto del puerto A del microcontrolador.

Desarrollo
La baliza estar formada por 2 leds conectados a los pines 0 y 1 del puerto A.

Al crear un nuevo proyecto, Niple inserta de manera automtica el bloque de inicio del
diagrama de flujo. A partir de ste bloque, se ir desarrollando todo el diagrama de flujo.

Pgina 20

Asignar un nombre a los pines del puerto


Para identificar ms fcilmente a los bits 0 y 1 del puerto A, vamos a cambiar el nombre
de cada uno de ellos:

Al Bit A(0) lo llamaremos Led Izquierdo.

Al Bit A(1) lo llamaremos Led Derecho.

Para esto ingresamos al men Declaracin/Bits, seleccionamos en el mapa de memoria,


el Bit RA0. Luego presionamos la tecla Enter.

Pgina 21

Al presionar la tecla Enter, Niple presenta un mensaje donde le informa que se


cambiar el nombre del Bit seleccionado. Ud. debe responder afirmativamente para continuar
con el proceso de renombrar el bit.

Presione el botn SI del cuadro de dilogo.


A continuacin, se presenta la pantalla Renombrar Bit.
Ingrese el nombre del Bit, en este caso led_der y como comentario, Led Derecho.

Pgina 22

Presione le botn Renombrar.

Si el Bit al cual le estamos cambiando el nombre (en este caso RA0) ya est siendo
utilizado por algn bloque o mdulo dentro del diagrama de flujo, Niple le ofrece la posibilidad
de actualizar el diagrama de flujo, actualizando el nombre del Bit de manera automtica tambin
en los textos de bloques del diagrama.

Como en ste caso an no se ha utilizado el Bit RA0 en ningn bloque, no es necesario


realizar la actualizacin del diagrama de flujo, por sto, presionamos el Botn NO.

Pgina 23

De esta manera hemos cambiado el nombre del Bit RA0 a led_der, con lo cual nos
resulta ms fcil identificarlo y recordar la funciona que hemos asignado al mismo.

De la misma manera cambiaremos el nombre del Bit RA1 por led_izq.

Configurar los puertos del PIC


Para poder utilizar los puertos del microcontrolador, primero es necesario configurarlos.
Es decir que, debemos indicarle al micro cules son los pines queremos utilizar como entrada y
cuales son los pines que queremos utilizar como salida.
Como mencionamos anteriormente, los puertos de micro, as como el resto del sistema, se
controlan mediante registros en la memoria cuyas funciones vienen grabados de fbrica
(registros TRISA y TRISB).

Para configurar los pines del Puerto A, ingrese al rbol de herramientas en:
Herramientas/Rutinas Bsicas/Puertos/Configurar Puerto A.

Pgina 24

Al realizar un doble clic se presenta la pantalla de configuracin del puerto A.

Note que se presentan los nombres de los pines led_der y led_izq en los pines 0 y 1
del puerto A respectivamente.

Pgina 25

Configuramos los pines del puerto A como salida.

Utilizando el puerto
Una configurado el puerto A vamos a iniciar la secuencia de encendido de los leds.

Como mencionamos anteriormente, la electrnica digital consiste en procesar


informacin lgica binaria donde el valor lgico 1 corresponde a un nivel de tensin, que en el
caso de los microcontroladores, corresponde a 5V y el valor lgico 0 corresponde a 0V.

De sta manera, si queremos que el micro saque 5V por un pin, deberemos asignar el
valor lgico 1 al Bit correspondiente al pin.

Recordemos que a un Bit slo le podemos asignar los valores lgicos 0 y 1.

Iniciaremos la secuencia de encendido de los leds de nuestra baliza prendiendo el led de


la izquierda y apagando el led de la derecha.
Para esto, asignaremos un 1 al led llamado led_izq y un 0 al led llamado
led_der que corresponden a los pines A(1) y A(0) respectivamente.

Para signar un valor un Bit, ingresamos en el rbol de herramientas a:


Herramientas/Rutinas Bsicas/Asignar valor/ a un Bit

Pgina 26

Al realizar un doble clic, se presenta la pantalla Asignar Valor a un Bit.

Seleccione de la lista, el nombre del Bit al cual quiere asignar un valor, en este caso,
seleccione el Bit llamado led_izq.

Una vez seleccionado el nombre del Bit, debe seleccionar el valor que desea asignar al
mismo. En este caso asignamos el valor 1.

Pgina 27

Podemos incluir un comentario adicional al bloque. Este comentario nos ser de gran
utilidad para interpretar el programa al momento de revisar o corregir el diagrama de flujo en el
futuro. Sobre todo cuando haya transcurrido un largo periodo de tiempo desde el desarrollo del
proyecto.
Observe que debajo de la lista de seleccin del nombre del Bit, Niple le informa a que
registro pertenece y en que posicin se encuentra dentro del mismo. Esto facilita an ms la
identificacin del Bit.
Por ultimo, presione el botn OK para insertar el bloque correspondiente en el
diagrama de flujo.

Pgina 28

Observe que al posicionar el mouse sobre el bloque, se muestra el comentario


correspondiente.
De esta manera se puede ir recorriendo todo el diagrama de flujo consultando los
comentarios.

Realice el mismo procedimiento para asignar el valor lgico 0 al bit led_der.

Hasta el momento el diagrama de flujo debe verse de la siguiente manera.

Una vez que hemos iniciado la secuencia de encendido de los leds, el microcontrolador
debe esperar un tiempo, por ejemplo 1 segundo, antes de cambiar el estado de los leds
(encendido o apagado).

Realizar temporizaciones
Existen bsicamente 2 maneras de realizar temporizaciones en un microcontrolador:
Pgina 29

1. Mediante un bucle tempori zador: es una temporizacin por software, el micro se que
da ejecutando un bucle (repeticiones cclicas durante una determinada cantidad de
veces) hasta completar una cantidad de ciclos de programa. La temporizacin se realiza
calculando la cantidad de ciclos por el tiempo de ejecucin de cada ciclo. El tiempo de
ejecucin de un ciclo es de la velocidad de reloj. Por ejemplo: en el presente proyecto
estamos utilizando un cristal de 4 Mhz. La velocidad de ejecucin interna del
microcontrolador es 1Mhz, es decir, 1.000.000 de ciclos por segundo, con lo cual cada
instruccin se ejecuta en un microsegundo (uS). Como este tipo de temporizacin se
realiza ejecutando una serie de lneas de cdigo, el microcontrolador no puede atender
otras tareas mientras la temporizacin se realiza.

2. Mediante

el

temporizador

interno

del

microcontrolador

(TMR0):

El

microcontrolador PIC 16F84 incluye un modulo temporizador (llamado TMR0) el cual


trabaja de manera autnoma y genera una interrupcin cuando se completa una
temporizacin. El usuario puede configurar el temporizador para realizar distintas
temporizaciones. Como el TMR0 ejecuta la temporizacin de manera independiente a la
ejecucin del cdigo, el microcontrolador puede dedicarse a realizar otras tareas
mientras la temporizacin se realiza.

En este caso utilizaremos el mtodo de temporizacin por bucles ya que el


microcontrolador no debe atender otras tareas mientras la temporizacin se realiza.

Temporizacin por bucles


Para realizar una temporizacin por bucles ingrese a rbol de herramientas en:
Herramientas/Insertar/Rutinas Basicas/Temporizadores/tiempos por bucles

Pgina 30

Al hacer doble clic se presenta la pantalla de Temporizador por bucles.


Niple le permite realizar temporizaciones por bucles de 2 maneras:

1. Tiempos Fijos: Se especifica el tiempo que desea temporizar y el


microcontrolador realiza siempre la misma temporizacin.

2. Tiempos Variables: La temporizacin es controlada por el valor de un registro, el


cual puede ser modificado en cualquier parte del proceso y de esta manera, puede
realizar temporizaciones con distintos periodos de tiempo en la misma parte del
proceso.

En este caso utilizaremos un tiempo fijo.

Seleccione la opcin Tipo Fijo, la base de tiempo es Segundo y por ltimo ingrese el
valor 1 en el cuadro de texto.

Pgina 31

Presione el botn Ingresar para insertar el bloque de temporizacin en el diagrama de


flujo.

Pgina 32

Cambiar el estado de los diodos Led


Hasta el momento los se inicia el programa el programa encendiendo el led izquierdo y
apagando el led derecho, y se mantienen en ese estado durante 1 segundo mediante el
temporizado.
Despus de haber transcurrido un segundo debemos cambiar el estado de los leds,
apagando el led de la izquierda y encendiendo el led de la derecha.
Esto se puede realizar repitiendo los procedimientos de asignacin de valores a los
displays y temporizacin, o duplicar los bloques ya insertados y cambiarles los valores de
asignacin de bits. A continuacin realizaremos este ltimo procedimiento.

Seleccione los bloques a duplicar, los cuales en es caso son, los 2 bloques de asignacin a
Bit y el bloque de temporizacin.
Una vez seleccionados, haga un clic con el botn derecho del mouse y seleccione la
opcin Duplicar del men contextual. De esta manera se realiza un duplicado de los bloques
seleccionados.
La siguiente imagen muestra la secuencia.

Pgina 33

Luego desplazamos los nuevos bloques hacia abajo ubicndolos a continuacin en el


diagrama de flujo y vinculamos los bloques mediante una flecha (vnculo) desde el bloque de la
primer temporizacin hacia la primer asignacin de los bloques recin duplicados, quedando de
sta manera, el diagrama de flujo como lo ilustra la siguiente imagen.

Para cambiar el valor de asignacin del bit led_izq, primero seleccione el bloque y
presione la tecla Enter. Esto le permitir cargar la pantalla del bloque seleccionado para
cambiar el valor de asignacin. A este procedimiento se le llama edicin de un bloque. En
Niple, la mayora de los bloques puede ser editados, permitiendo realizar correcciones o
actualizaciones de manera muy simple, sin necesidad de borrar el bloque e insertarlos
nuevamente.

Pgina 34

Cuando se presenta la pantalla de Asignacin de valor a un Bit, solo cambie el parmetro


del valor asignado de 1 a 0, corrija el comentario y luego presione el botn ingresar.

Repita la operacin con el bloque de asignacin al Bit led_der cambiando el valor 0


por 1. El diagrama de flujo debe quedar como se muestra en la siguiente imagen.

Pgina 35

Por ltimo debemos cerrar el ciclo mediante un vinculo entre el ltimo bloque de
temporizacin y el primer bloque de asignacin al Bit led_izq.

Cabe recordar que las flechas indican el sentido de ejecucin del programa, siempre comenzando
desde el bloque Iniciar.

Despus de realizado el vnculo, el diagrama de flujo debe verse de la siguiente manera.

Pgina 36

Generar el cdigo assembler


Una vez diseado el diagrama de flujo con el proceso que deseamos que el
microcontrolador realice, debemos generar el cdigo assembler, es decir, el programa escrito en
lenguaje ensamblador (assembler).

Para esto ingrese al men Archivo/Arcivo ASM/Generar Cdigo ASM.

Se presenta la pantalla de opciones de generacin del cdigo Assembler.

Pgina 37

Presione el botn Codificar ASM.


Si la generacin del cdigo assembler se realiza correctamente, Niple informa la
finalizacin de la codificacin mediante el siguiente mensaje.

A continuacin se presenta el cdigo Assembler generado.


Dado que se trata de un archivo de texto, el mismo se muestra en el Block de Notas de
Windows, que es un editor de textos.

Compilar el programa

Para poder grabar el programa al microcontrolador antes debemos compilarlo. La


compilacin consiste en traducir el programa en lenguaje Assembler a formato numrico donde a
cada instruccin le corresponde un cdigo numrico.

La compilacin del programa se realiza por medio de un programa Compilador.


Existen distintos programas compiladores. Nosotros utilizaremos el compilador que provee el
fabricante del microcontrolador. Este programa es de distribucin gratuita y se puede descargar
desde el sitio web de Microchip en www.microchip.com.

Grabar el programa al micro

Una vez que el programa ha sido compilado, debemos grabarlo al microcontrolador. Esto
se realiza mediante un programador.
Pgina 38

El programador es una plaqueta electrnica que se conecta a la PC y mediante la cual se


transfiere el programa al microcontrolador.

Esquema electrnico

Pgina 39

Lista de materiales

Pgina 40

Ejercicio 2 Baliza electrnica programable


En este ejercicio desarrollaremos una baliza electrnica programable. Esta baliza
mostrar diferentes combinaciones de destello segn la configuracin seleccionada. De esta
manera se pueden disear diferentes combinaciones de luces para llamar la atencin o alertar a
los conductores de diferente manera segn la situacin o el estado en que se encuentre en
camino.

Objetivo
Conocer la manera de ingresar datos al microcontrolador.
Conocer la manera de comparar un valor y realizar diferentes acciones en funcin del
valor de un dato.
Que el alumno disee sus propias combinaciones de destello, descubriendo el inmenso
potencial de los microcontroladores y estimulando la creatividad y la imaginacin.

Procedimiento
Utilizando como base, el ejemplo Nro. 1, le agregaremos las modificaciones necesarias
para realizar una baliza que muestre diferentes combinaciones de destello segn la una
configuracin seleccionada mediante un Dip-switch de 5 pines.

Desarrollo

El Dip-Switch
En la nueva baliza que estamos diseando, el usuario podr seleccionar la configuracin
de destello a visualizar. Esto se realiza mediante un dispositivo llamado Dip-Switch.
El Dip-Switch no es ms que un conjunto de llaves de corte en miniatura y lo
conectaremos de la siguiente manera los pines 0 al 4 del puerto B:

Pgina 41

Como podemos ver en esquema electrnico, mientras las llaves se encuentran en estado
Abierto, los pines del PIC estn conectados a masa mediante las resistencias de 10 K. Como
vimos anteriormente, en electrnica digital, el valor de 0V corresponde al valor lgico 0. Por
esto vemos que en este caso el micro esta recibiendo el valor binario 00000000 en el puerto B.
En nuestra baliza utilizaremos un Dip-Switch de 5 pines.
Cada vez que activamos una llave del Dip-Switch, estamos conectando la lnea a +5V. De
esta manera estamos enviando un 1 lgico al pin correspondiente, formando, de sta manera
un cdigo binario segn la llave que hayamos conectado.
Para interpretar mejor el nmero que estamos formando con el con Dip-Switch,
conectamos el pin que se encuentra ubicado ms a la izquierda del Dip-Switch al pin B(0) del
microcontrolador. De esta manera estaremos formando los siguiente cdigos:

Pgina 42

Para poder leer el estado de los pines del puerto B primero debemos configurar el puerto.

Pgina 43

Configurar el Puerto B
Abrimos el ejemplo Nro. 1.

El programa comienza configurando el puerto A como salida.


A continuacin de este bloque insertaremos un bloque de configuracin del puerto B.
Para esto borramos el vnculo (flecha) entre el bloque de configuracin del puerto A y el
bloque de asignacin de valor al bit Led_Izq.

Pgina 44

Una vez borrado el vnculo, insertaremos el bloque de configuracin del puerto B.

Esto lo hacemos ingresando al bloque de configuracin del puerto B en:

Al selecciona la opci n Configurar Puerto B se presenta la pantalla de configuracin de


dicho puerto:

Pgina 45

Presione el botn Ingresar, para insertar el bloque en el diagrama de flujo.

Declarar un registro de usuario


Una vez configurado el puerto, vamos a leer el valor del estado del puerto para
determinar la configuracin de baliza que el usuario ha seleccionado.
El estado del puerto lo vamos a guardar en un Registro para luego poder comprarlo con
una serie de cdigos y as seleccionar la combinacin de destello de luces correspondiente.

Para esto, antes debemos declarar un registro en la memoria del PIC. Esto lo hacemos
ingresando a:

Hacemos un clic en el primer registro de usuario disponible (de color verde) e ingresamos
el nombre del registro que queremos declarar. En este caso le asignamos el nombre
Configuracion.

Pgina 46

Leer el puerto B
El siguiente paso consiste en realizar la lectura del puerto B.
Para esto ingresamos a:

Pgina 47

Seleccionamos el Puerto B para leer.

Cuando leemos un puerto, el resultado de la lectura puede ser guardado en el registro W o


en un registro de usuario. Recordemos que el registro W es un registro de trabajo y el valor
que ste contiene ser sobrescrito en las siguientes instrucciones (lneas de cdigo) que el
microcontrolador ejecute. Dado que nosotros necesitamos almacenar el valor de lectura del
puerto para luego realizar las comparaciones con los distintos cdigos de configuracin,
guardaremos el resultado de la lectura en un registro de usuario.
Para esto marcamos la opcin en otro registro y seleccionamos el registro de usuario
configuracin que declaramos anteriormente.

Pgina 48

Presionamos el botn ingresar para insertar el bloque en el diagrama de flujo.

Comparacin de un Registro
Una vez ledo el estado del puerto, debemos generar la combinacin de destellos segn la
configuracin de la baliza.
Esto lo realizamos comparando el valor del registro configuracin.
Ingresamos a:

Primero seleccione el registro que desea comparar. En este caso, el registro


configuracin.
Luego seleccione el operador de comparacin. En este caso le operador =.
Pgina 49

Un registro puede ser comparado con un valor literal, esto es, un valor constante, o
tambin puede ser comparado con el valor que contiene otro registro, un valor variable.
En este ejercicio vamos a comparar el valor que contiene el registro configuracin con
un valor constante, por esto seleccionamos la opcin un Literal.
En Niple, cuando ingresamos un valor literal, el mismo puede ser ingresado en diferentes
formatos; Decimal, Binario o Hexadecimal. En este caso, nos resulta ms cmodo utilizar el
formato Binario ya que cada Bit del registro representa directamente a cada pin del puerto. La
primer comparacin la realizamos con el valor Binario 00000001.

Pgina 50

El siguiente esquema ilustra el motivo por el cual realizamos la comparacin con el literal
00000001.

Con esta primer comparacin que estamos realizando, en realidad, estamos evaluando si
la llave que encuentra ms hacia la derecha en la dip-switch se encuentra activada.

Cuando realizamos una comparacin, estamos realizando una pregunta y cuya


respuesta puede ser SI o NO, y el bloque correspondiente a la evaluacin debe tener stas 2
salidas.
En este caso estamos preguntando:
el registro configuracion es igual al valor binario 00000001?

La respuesta a sta pregunta puede ser SI o NO (Verdadero o Falso respectivamente).


Pgina 51

Dentro del diagrama de flujo la evaluacin se representa con el smbolo de un rombo.

Luego de ingresar el bloque de evaluacin, debemos ingresar los bloques


correspondientes a las 2 salidas del mismo. Por defecto, siempre, el primer bloque que se inserta
despus de una evaluacin, corresponde a la salida del SI y se ubica debajo del bloque de
comparacin (rombo) y el segundo bloque corresponde a la salida del NO y se ubica hacia la
derecha del bloque correspondiente al SI.

Para la salida del SI vamos a arrastrar los bloques de asignacin y temporizacin que
conforman el destello del proyecto original. Para esto seleccionamos el bloque de asignacin
donde encendemos el Led derecho y lo arrastramos hasta ubicarlo debajo del bloque de
evaluacin de registro. Al seleccionar y mover el bloque de asignacin deben moverse el resto de
los bloques que se encuentren por debajo de ste.
Una vez ubicados los bloques, generamos un vinculo desde el bloque de evaluacin de
registro hacia el bloque de encender el Led derecho.
No te que de manera automtica la flecha se inserta con el texto SI.

Pgina 52

El diagrama de flujo debe quedar conformado como lo muestra la siguiente imagen.

Entonces, cuando seleccionemos la configuracin 1, la baliza mostrar un juego de luces


intermitentes, alternando el encendido de los Leds cada 1 Segundo.

Pgina 53

Ahora debemos indicarle al microcontrolador, qu debe realizar si la configuracin


seleccionada no es 00000001. Es decir que debemos volver al bloque de evaluacin del
registro configuracin y programar la salida correspondiente al NO.

Si la configuracin seleccionada no es 00000001, vamos a evaluar si la configuracin


selecciona es la segunda opcin, es decir, 00000010.

Para esto insertamos un bloque de evaluacin de registro donde comparamos el valor del
registro configuracin con el valor binario 00000010.

Para insertar un bloque de comparacin de registro ingresamos a:


Insertar/Rutinas Basicas/Funciones Lgicas/Comparar Registro

El diagrama de flujo debe queda conformado como lo muestra la siguiente imagen:

Esta estructura lgica evala si el registro configuracin contiene el valor 00000001,


entonces realiza la combinacin de luces correspondiente, sino, realiza otra evaluacin donde
pregunta si el valor de la configuracin seleccionada es 00000010.

Pgina 54

De sta manera podemos ir evaluando todas las combinaciones posibles. En nuestro


ejercicio, slo evaluaremos los siguientes valores de configuracin:

Configuracin 1 = 00000001
Configuracin 2 = 00000010
Configuracin 3 = 00000100
Configuracin 4 = 00001000
Configuracin 5 = 00010000

Y a cada configuracin le asignamos una combinacin de destello diferente:

Configuracin 1:

Configuracin 2:

Pgina 55

Configuracin 3:

Configuracin 5:

Configuracin 4:

Pgina 56

Luego debemos programar qu debe hacer el microcontrolador cuando seleccionamos


una configuracin que no corresponde a ninguna de las anteriormente mencionadas. Esto ocurre
cuando la ltima comparacin de registro da como resultado NO.
En este caso, dejamos encendidos los 2 leds de manera permanente.

Por ltimo, debemos cerrar el ciclo para que el micro vuelva a iniciar el proceso. En
nuestro ejercicio, el ciclo comienza con una nueva lectura del puerto B para determinar la
configuracin seleccionada. De sta manera el microcontrolador podr detectar cuando se realice
un cambio en la configuracin de la baliza.
Para cerrar el ciclo utilizaremos un bloque de instruccin NOP para reunir los vnculos
de cada una de las ramas lgicas. La instruccin NOP (NO Opera) es una instruccin del
lenguaje assembler, no realiza ninguna operacin y consume un ciclo de reloj.
Para insertar un bloque de instruccin NOP ingrese a:

Pgina 57

Insertamos un bloque NOP al final de los bloques de la lnea lgica de la configuracin 1.

Luego vinculamos los ltimos bloques de cada lnea lgica al bloque NOP.

Pgina 58

Por ltimo cerramos el ciclo vinculando el bloque NOP al bloque de lectura del puerto,
en el inicio del programa. La estructura del programa debe quedar como lo muestra la siguiente
imagen.

Por ltimo generamos el archivo ASM, lo compilamos y lo grabamos al micro.

Pgina 59

Esquema electrnico

Pgina 60

Ejercicio 3 Contador Digital


En este ejercicio vamos a desarrollar un contador digital de 00 a 99, el cual visualiza el
estado de la cuenta en 2 displays de 7 segmentos y cuya seal de entrada para incrementar el
estado de la cuenta proviene de una barrera infrarroja.

Objetivo
Conocer la tecnologa de transmisores infrarrojos.
Conocer la manera de mostrar datos en displays de 7 segmentos.

Procedimiento
Al recibir una seal desde un receptor, el sistema incrementa el estado de la cuenta
mientras muestra los datos en 2 displays de 7 segmentos tipo ctodo comn.

Desarrollo
El Transmisor-Receptor infrarrojo
Para este ejemplo utilizaremos un transmisor infrarrojo (al cual llamaremos TIR) y un
receptor infrarrojo (lo llamaremos RIR) para crear una barrera infrarroja.

Estos Transmisores y Receptores infrarrojos son los mismos que podemos encontrar en el
control remoto de los televisores.

Tanto el TIR como RIR, fsicamente se parecen a un Diodo Led, con la diferencia que el
TIR es de color azul y el RIR es de color blanco y un poco ms pequeo que el TIR.

El TIR es un Diodo LED que emite una luz infrarroja mientras que el RIR es un
fototransistor de luz infrarroja.

A continuacin se muestra le esquema de conexionado de los mismos:

Pgina 61

Adems utilizaremos 2 Displays de 7 segmentos ctodo comn para visualizar el estado


de la cuenta. Cada segmento est formado por un led, y todos estos leds estn conectados a un
pin comn. Cuando el pin comn es el pin negarido de los leds, al display se lo llama Ctodo
comn, y cua ndo el pin comn corresponde al pin positivo de los leds, se lo llama nodo
Comn.

El display de 7 segmentos
En el presente ejercicio utilizaremos 2 Displays de tipo Ctodo comn. A continuacin
se muestra el esquema de conexionado y el esquema electrnico del mismo.

Pgina 62

Para visualizar un dato en un display debemos enviarle al mismo la combinacin de


ceros y unos correspondiente al dato que queremos representar.
Por ejemplo, para mostrar el valor 1 debemos asignar la siguiente combinacin binaria:

Observe que el cdigo binario para mostrar en el display el valor 1 no corresponde con el
valor 1 (00000001).

Por esto debemos generar la combinacin binaria de cada valor a mostrar en el display y
este cdigo nos insume 7 pines del microcontrolador.

El codificador CD4511

El codificador CD4511, convierte los valores de formato binario a la combinacin binaria


correspondiente en el display. Desde el microcontrolador, le enviamos al CD4511, el numero a
mostrar y el codificador genera de manera automtica el cdigo correspondiente.
Dado que los valores a mostrar los enviamos al CD4511 en formato binario, slo nos
insume 4 pines del microcontrolador ya que con 4 pines podemos formar valores entre 0 y 15.

Pgina 63

De sta manera, al utilizar el CD4511, estamos ahorrando el proceso de codificacin del


valor a mostrar y adems ahorramos 3 pines del microcontrolador.

Descripcin de los pines del CD4511.

Pin

Descripcin

VDD
VSS
A,B,C,D

Alimentacin positiva, +5V.


Masa
Entradas digitales del dato a visualizar. Corresponden a los pesos binarios 1,2,4 y
respectivamente.
LT
Test de segmentos. Si se pone a 0, todos los segmentos se encienden. En uso
normal debe estar puesto a 1.
BI
Habilitacin de brillo. Si se pone a 0, el display se apaga.
LE
Modo memoria. Si se pone a 0, esta en operacin normal. Si se pone a 1, trabaja en
modo memoria.
a,b,c,d,e,f,g Conexin a display.

Pgina 64

El proceso de multiplexado
Como vimos anteriormente, un display solo puede, mostrar un slo digito. Es decir, un
numero entre 0 y 9. Y cada codificador CD4511 insume 4 pines del microcontrolador. Esto
significa que si queremos visualizar un valor de 2 cifras, deberamos utilizar 2 CD4511, uno por
cada display, con lo cual necesitamos 8 pines del microcontrolador. Esto sera muy costoso en
trminos econmicos y adems utilizaramos muchos pines del microcontrolador.

Por esto, cuando necesitamos visualizar datos de ms de 1 digito, implementamos el


mtodo del multiplexado.

Supongamos que necesitamos visualizar un dato de 2 cifras, por ejemplo, el nmero 36.
Al display correspondiente a las unidades lo llamaremos Display 1 y el display
correspondiente a las decenas lo llamaremos Display 2.

Lo primer que debemos hacer es descomponer el dato a visualizar (36) en Unidades y


Decenas, esto se realiza mediante un clculo matemtico llamado conversin a BCD. El
sistema de numeracin BCD (Decimal Codificado en Binario) procesa los valores de las
unidades, decenas, centena, etc., en valores por separado.
Dado que a cada display debemos enviarle el valor correspondiente a cada digito del
numero a mostrar, debemos convertir dicho nmero a formato BCD.
De esta manera obtenemos 2 valores por separado: en ste caso, el 3 y el 6.

Conectamos los pines a,b,c,d,e,f y g de los 2 displays en paralelo a la salida del


CD4511. Desde el microcontrolador enviamos el dato correspondiente a las unidades al CD4511
y habilitamos el display1 mediante el pin comn del display e inhabilitamos el pin comn
del display 2.

Lo que en realidad est ocurriendo es que estamos enviando, mediante el CD4511, el dato
correspondiente a las unidades a los 2 displays, pero slo encendemos el display 1. El display 2
permanece apagado y mantenemos este estado durante un tiempo, por ejemplo 200 uS.

Pgina 65

Luego enviamos el dato correspondiente a las decenas y habilitamos el display 2 y


apagamos el display 1 y mantenemos este estado durante el mismo periodo de tiempo que
permaneci encendido el display 1.

De esta manera se encienden y se pagan de manera alternada los 2 displays, mostrando


cada uno el dato correspondiente.
Si ejecutamos este procedimiento a muy alta velocidad se genera una ilusin ptica de
estar visualizando un numero de 2 cifras de manera permanente dado que el ojo humano no
percibe la intermitencia de ambos displays.

Pgina 66

Desarrollando el contador digital


Ingresamos a Niple y creamos un nuevo proyecto.

Como siempre comenzamos configurando los puertos.


En el Pin 0 del puerto A vamos a conectar el sensor infrarrojo y en el puerto B vamos a
conectar el CD4511 y los pines comunes de los 2 displays.
Por esto configuramos el Pin 0 del Puerto A como entrada y todo el puerto B como
salida.

Una vez inicializados los puertos, vamos a declarar el registro contador que es donde
vamos a llevar el estado de la cuenta y los registros uni, dec y cen que son los registros
Pgina 67

donde vamos a guardar el resultado de la conversin del registro contador de decimal a BCD
para visualizar los datos en los displays.

Luego inicializamos el registro contador a 00. Esto es para asegurarnos que el contador
siempre inicie la cuenta desde el valor 0.

Pgina 68

A continuacin vamos a mostrar el estado del contador en los displays de 7 segmentos.


Para esto, antes debemos realizar la conversin a BCD.
Esto lo realizamos mediante un calculo matemtico ingresando a:

Se carga la pantalla Convertir Registro (8 Bits) a BCD.


En el campo Registro a descomponer seleccionamos el registro contador.
Y el resultado de la conversin lo guardamos en los registros uni, dec, y cen.

Presionamos el botn Ingresar para insertar el bloque en el diagrama de flujo.


Pgina 69

Una vez realizado el clculo de conversin a BCD, vamos a mostrar los datos en los
displays.
Para esto ingresamos a:

Pgina 70

Configuramos la visualizacin de los displays de la siguiente manera:

Tipo de muestra:

valores individuales por display

Tipo de digito:

ctodo comn

Cantidad de dgitos a utilizar:

Valor a mostrar en los displays:

Registros dec y uni.

Pines de multiplexado:

B2 y B1.

Bus de datos:

B7, B6, B5 y B4.

Tiempo de muestreo:

200 uS.

Al presionar el botn Ingresar, se inserta el bloque en el diagrama de flujo.

Pgina 71

El bloque de visualizacin en display slo realiza la muestra da datos durante un solo


ciclo, es decir que muestra el valor de las unidades y las decenas durante 200 uS para cada valor,
lo cual no es suficiente para visualizar los valores ya que el ojo humanos no es capaz de percibir
la imagen por tan poco tiempo.
Por esto, necesitamos generar una serie de ciclos para que el microcontrolador se quede
repitiendo el proceso de visualizacin de datos a cantidad de veces que sea necesario para poder
visualizar los valores correctamente.

Para esto declaramos 2 registros llamados ciclos y ciclos1 los cuales sern utilizados
para llevar cuenta de la cantidad de veces que se ha repetido el proceso.

Lo que vamos a hacer es generar 2 bucles anidados, es decir un bucle dentro de otro.

Pgina 72

El primer bucle de 200 ciclos y el segundo bucle de 3 ciclos. Dado que el segundo bucle
est dentro del primero, por cada ciclo del primer bucle se ejecutan los 3 ciclos del segundo
bucle.
De esta manera estamos ejecutando 600 veces el bloque de visualizacin de datos, lo cual
es suficiente para visualizar los datos correctamente. De todas formas, si fuera necesario, se
puede variar la cantidad de veces que se repite la ejecucin del bloque de visualizacin, lo cual
modifica directamente el tiempo en que el microcontrolador se permanece mostrando los datos
antes de seguir adelante con el resto del programa.

Lo primero ha hacemos es hacer a un lado el bloque de visualizacin de datos para


insertar los bloques correspondientes a los bucles.

Declaramos los registros ciclos y ciclos1 en los cuales llevaremos la cuenta de la


cantidad de veces que se repiten los ciclos.

Pgina 73

La estructura de los 2 bucles anidados es la siguiente.

Para generar los bucles, primero debemos inicializar los registros. El primer bucle realiza
un ciclo que se repite 250 veces, por esto inicializamos el registrociclos a 00 y luego lo
incrementamos en 1 mediante el clculo matemtico de adicin.
Una vez incrementado el registro ciclos, evaluamos si el mismo ya lleg al valor 250.

Pgina 74

Cuando el registro ciclos llega al valor 250, es porque los 2 bucles ya terminaron su
ejecucin. Cuando esto ocurre, el siguiente paso consiste en leer el estado del sensor conectado a
la entrada A0. Para esto, lo que hacemos es evaluar el estado del BIT A0. Ingresamos a:

Pgina 75

Seleccionamos el pin A0 para ser evaluado y el valor de comparacin = 1.

Insertamos el bloque de lectura del pin A0 antes de terminar de disear la estructura de


los bucles, porque el primer bloque que insertamos a la salida de una evaluacin (smbolo
rombo) correspondiente al SI.
Pgina 76

Para terminar el segundo bucle. Seleccionamos el bloque de evaluacin del registro


ciclos e ingresamos los bloques correspondientes a la salida del NO.
Generamos la misma estructura lgica que para el registro ciclos, es decir que
inicializamos el registro ciclos1 a 0, luego lo incrementamos en 1 y por ltimo evaluamos si
llego a 3.

Si el registro llega a 3, entonces se vuelve al bloque de incremento del registro ciclos.

Falta insertar la salida correspondiente al NO de la evaluacin del registro ciclos1. Si


el registro no llega a 3, ejecuta el bloque de visualizacin de datos en los displays y despus de
mostrar los datos, vuelve a incrementar el valor del registro ciclos1.
La estructura lgica quedara de la siguiente manera.

Pgina 77

De sta manera quedan formados los 2 bucles anidados. El primero de 250 ciclos y el
segundo de 3 ciclos, por esto, el resultado es que el bloque de visualizacin de datos se ejecuta
750 (250*3) veces antes de seguir con el resto del programa.

Decimos que 2 o ms bucles estn anidados cuando un bucle se encuentra dentro de otro.

Por ltimo, cuando se terminan de ejecutar los bucles de visualizacin, se evala el


estado del sensor conectado al pin A0. Esto lo realizamos mediante el bloque de evaluacin de
Bit (rombo color magenta).
Este bloque pregunta: el pin A0 es igual a 1?.

Pgina 78

Si el resultado de esta evaluacin es verdadero, la ejecucin del programa toma el camino


del SI, de lo contrario toma el camino del NO.

Cuando un objeto interrumpe la barrera infrarroja del sensor, se envan 5 V al pin A0, lo
cual es interpretado por el microcontrolador como un 1 lgico.
Si esto ocurre, el microcontrolador debe incrementar en 1 el estado del contador.

Si el estado del sensor es 0, entonces el microcontrolador se queda visualizando los datos


pero sin realizar ningn bucle. Esto lo hacemos as porque el microcontrolador debe estar
supervisando continuamente el estado del sensor. Si el micro realizara los 2 bucles, el tiempo en
que se encuentra trabajando dentro de los bucles, no supervisa el estado del sensor. De esta
manera nos aseguramos que el micro detecte cualquier objeto de manera inmediata.

Pgina 79

Adems, cuando se detecta un objeto, el microcontrolador incrementa el estado de la


cuenta y entonces s ingresa a los bucles para visualizar el dato. Esto se realiza para darle un
tiempo al objeto a que salga de la zona de la barrera infrarroja. Es una especie de antirrebote
por software.
Si no ingresramos a los bucles de visualizacin cada vez que se detecta un objeto, el
microcontrolador estara volviendo a evaluar el estado del sensor antes que el objeto salga de la
zona de a barrera infrarroja. Y de esta manera estara incrementando nuevamente el estado del
contador y realizara una cuenta errnea.

Observe la siguiente estructura lgica para ver como el microcontrolador se queda


esperando a que se detecte un objeto mientras se visualiza el estado actual de la cuenta.

De esta menara queda terminado el presente ejercicio.

Pgina 80

Solo resta generar el cdigo assembler, compilar el programa, y grabar el


microcontrolador.

A continuacin se presenta el diagrama de flujo completo.

Pgina 81

Esquema Electrnico

Pgina 82

También podría gustarte