Sei sulla pagina 1di 11

Microcontroladores PICs 1

Microcontroladores PICs
Los PIC16F87X son una familia de microcontroladores PIC es la versin mejorada del caballo de batalla PIC16F84.
Consta de los siguientes modelos que varan de acuerdo a prestaciones, cantidad de terminales y encapsulados:
PIC16F873
PIC16F874
PIC16F876
PIC16F877
Esta familia es de las que tienen memoria tipo Flash, lo que nos permite reprogramarlos las veces que sea necesario
sin necesidad de usar ningn otro dispositivo ms que el propio programador. Este aspecto es muy importante a la
hora del diseo de un dispositivo para evitar prdida de tiempo en borrar los C y volver a programarlos.

Caractersticas Principales
Las caracterisiticas principales que hacen de esta familia un poco ms potente que otras son:
Conversor Analgico/Digital de 10 bits
Set de 35 instrucciones
3 Temporizadores + Watchdog Timer o Perro Guardin
2 mdulos PWM
Protocolos de Comunicaciones USART, PSP e IC

Detalle por modelo

Modelo Memoria de Programa Datos EEPROM Entradas / Canales PWM MSSP USART Comparadores
SRAM (bytes) Salidas A/D
Bytes Cant. de Palabras de SPI IC
(bytes)
instrucciones Maestro

16F873A 7,2 4096 192 128 22 5 2 Si Si Si Si


kB

16F874A 7,2 4096 192 128 33 8 2 Si Si Si Si


kB

16F876A 14,3 8192 368 256 22 5 2 Si Si Si Si


kB

16F877A 14,3 8192 368 256 33 8 2 Si Si Si Si


kB

Distribucin de Terminales
En las Figuras a continuacin se ven los distintos encapsulados en que vienen los diferentes modelos pertenecientes a
esta familia. Cada uno de esos pines o terminales tienen ms de un uso dependiendo de como se los configure
excepto los terminales VDD y VSS que son los encargados de alimentar a estos C.

Estructura interna de los PIC


A fin de comprender que es lo que hacen internamente estos PIC es necesario conocer los principios de la estructura
interna. En la Figura a continuacin se muestra el diagrama de bloques de la estructura interna los 16F87X. En ella
se ve que cada prestacin que nos ofrecen los C estn encerradas en un bloque distinto y todos ellos comunicados
mediante un bus.
Microcontroladores PICs 2

Se describir como configurar cada uno de esos bloques y para qu podemos usar a cada uno. Lo interesante de estos
PIC es que si algn bloque no se utiliza este no consume potencia por lo que podemos ir prendiendo al bloque slo
en el momento de usarlo para evitar desaprovechar energa del sistema de alimentacin.

Consideraciones generales
Como fue nombrado en la introduccin, el set de instrucciones de estos C es reducido, con lo que facilita la
programacin de los mismos. Para la familia de los 16F87X existen 35 instrucciones, con las que se puede hacer lo
mismo o ms que con esos antiguos P de 105 instrucciones. Para la programacin de estos dispositivos se pueden
elegir varios lenguajes, por ejemplo ensamblador, C, etc.
Los C tienen un espacio de memoria que vara segn las familias y segn el modelo dentro de cada familia. Es all
donde se guarda el programa que creamos. Dado que el C solo interpreta lenguaje de mquina, es decir, estados
lgicos de 1 0, sera por dems de complicado programar con este lenguaje; es por eso que existe un compilador,
que transforma el ensamblador que escribimos en lenguaje entendible por el C.
Una vez compilado el programa escrito, tenemos el archivo hexadecimal con el cual se programa al C, para esto es
necesario una interfaz programadora capaz de entender los datos hexadecimales que la computadora (PC) entrega y
pasarlos al C. Para crear el ensamblador es necesario ya tener pensado y diagramado lo que necesitemos que haga el
C; para esto usaremos bosquejos de circuitos, diagramas de flujo, pseudo-cdigo, modelos matemticos, y toda
clase de observaciones relevantes para el correcto funcionamiento y desempeo del C. Una vez diagramada la
funcin del C, solo nos resta disear el circuito externo con todos los detalles y escribir el programa.

Circuitera Externa Mnima


El circuito externo necesario para que el C sea capaz de leer el programa grabado en l solo necesita dos aspectos
fundamentales: el reloj y la alimentacin, lo dems es a medida que necesitemos entradas y/o salidas adecuando
cada una de ellas con circuitera externa.
El reloj se usa para darle una base de tiempo al C, se puede usar una resistencia y un condensador o algo ms
confiable como un cristal de cuarzo piezoelctrico (Algunos modelos de C tienen relojes internos incorporados,
pero son de otras familias). Usando cristales podemos estar seguros de la frecuencia de oscilacin del C, lo cual es
til para calcular tiempos de ejecuciones de las instrucciones, temporizaciones precisas, etc.
Todos los PIC de la familia 16F87X tienen dos terminales llamados OSC1 y OSC2, en ellos van conectados los
terminales del cristal; a su vez, se conectan dos capacitores entre masa y estos terminales, para completar el circuito
de oscilacin.
En cuanto a la alimentacin, esta no debe superar los 5 V 5% y se debe tener en cuenta que existe un terminal
llamado MCLR (master-clear o reset), que debe estar con valor lgico 1 para que el C pueda leer el programa.
Con estas consideraciones de la circuitera externa indispensable estamos en condiciones de ya, por lo menos,
asegurarnos que el C ejecutar el programa que grabamos en l.
Microcontroladores PICs 3

El Reloj
Los PIC 16F87X disponen de un ciclo de instruccin igual a cuatro ciclos del reloj principal, es decir que si tenemos
un programa de 1000 instrucciones y un cristal de 10 MHz. El tiempo que le demandar al C leer y ejecutar todo el
programa (asumiendo que todas las instrucciones tardan un ciclo de instruccin) es de 400 S pues:
.

Dependiendo del modelo especfico del C se tiene una frecuencia mxima de trabajo. En la familia 16F87X la
mxima frecuencia del reloj externo es de 20 MHz. es decir que el tiempo mnimo necesario para leer y ejecutar cada
instruccin es de 400 ns.
Un ciclo de instruccin equivale a 4 ciclos de reloj. Esto es porque con el primer ciclo de reloj el C busca en su
memoria a la instruccin a leer, en el segundo ciclo se carga en la memoria principal, el tercer ciclo es el encargado
de ejecutarla propiamente dicho y el ltimo y cuarto ciclo limpia la memoria para volver a buscar la siguiente
instruccin y as sucesivamente.

La alimentacin
Los C de la familia 16F87X se alimentan con 5 VCC pero con 3,5 V tambin funcionan consumiendo un poco ms
de corriente. La corriente mxima que puede circular por el terminal VDD (donde se conecta el positivo de la fuente
de 5 V) es de 250 mA y por cada salida no se debe hacer circular ms de 25 mA. Estos datos son los de la hoja de
datos de Microchip.
Dado que la capacidad de entregar corriente del C es bastante reducida, se suelen usar transistores o rels para
comandar circuitos o artefactos de potencia. La potencia que puede disipar como mximo el C es de 1 W y se
calcula mediante la siguiente formula:

donde:
es la tensin suministrada por la fuente de alimentacin.
es la corriente suministrada por las salidas del PIC en estado alto.
es la corriente absorbida por las salidas del PIC en estado bajo.
es la tensin entregada por los terminales en estado alto.
es la tensin presente en los terminales en estado bajo.

Circuito de Reset Externo


Los C tienen un terminal llamado MCLR o master-clear el cual debe estar en 1 lgico para que se lean y ejecuten
las instrucciones. En esta parte describiremos como resetear a los C, es decir hacerlos que empiece a leer el
programa grabado en ellos desde el principio. Una de las tcnicas ms sencillas es implementar el reset con el
circuito de la figura a continuacin:
(Este circuito no cumple la recomendacin de Microchip Tecnology, que advierte que se necesita colocar una
resistencia aproximadamente de 100 ohmios al pin de Reset, ya que no es recomendable colocar DIRECTAMENTE
a 5 V a 0 V el pin de Reset).
En este circuito se ve que el terminal MCLR est siempre con valor lgico 1 lo cual habilita al C a leer y ejecutar
las instrucciones. El pulsador es el pulsador de Reset, es decir al presionarlo se conecta la resistencia (generalmente
de 10 K) entre VDD y VSS, con lo cual la cada de tensin sobre el terminal MCLR es 0 v y as fijamos el 0
lgico necesario para frenar las ejecuciones de las instrucciones. Cuando se suelta el pulsador, el terminal MCLR
vuelve a estar en 1 y as arranca nuevamente a leer el programa desde el principio, es decir desde la primera
instruccin grabada en l
Microcontroladores PICs 4

Mejorando el Circuito de Reset


Es claro que el pulsador no es instantneo y producto de los golpeteos de este, el circuito anterior se cierra y abre
varias veces hasta quedar completamente en un estado. Es por esto que el circuito de reset se mejora notablemente
con el circuito de la figura siguiente:
En el circuito de arriba, la resistencia de 100 limita la corriente entrante al C a unos 500 A, ms que suficientes
para asegurar un 1 lgico en el terminal MCLR. El diodo es el encargado de proteger al C de posibles
sobretensiones sobre el terminal MCLR. Una vez que se presiona el pulsador se pone la resistencia de 10 K por
medio del diodo a masa, asegurando un 0 lgico para obtener el reset querido, lo importante de esto es que una vez
que se suelta el capacitor hace de amortiguador de los golpeteos mecnicos del pulsador y as se evitan los resets
involuntarios.
Tambin resulta muy efectivo una red pasa altos, para independizarnos del tiempo en que se presione el pulsador, es
decir, con el primer toque al pulsador el C se resetea y comienza a leer el programa desde el principio sin importar
si todava estamos presionando el pulsador o ya se solt.
Estas tcnicas de reset son muy efectivas, pero no son todas. Existen infinidades de circuitos y posibilidades para
provocar el reset externo en los C adecundose a la necesidad o al criterio de diseo del circuito y su funcin
especifica.

Registros Internos de la familia 16F87X


Todos los C de la firma Microchip cuentan con registros internos (la mayora de estos son de escritura-lectura) los
cuales nos permiten configurar cada bloque para que funcione de acuerdo a nuestras necesidades.
Para las familia 16F87X estos registros son de 8 bits y podemos acceder a cada uno de ellos, o bien a todo el registro.
Tambin existen algunos registros particulares de 16 bits pero fsicamente son dos registros de 8 unidos.
Para cada C existen tres bloques bien diferenciados de memoria. Estos son:
Memoria de programa: Lugar fsico donde se guarda el programa.
Memoria de datos: Lugar fsico donde se guardan datos, EEPROM
Memoria de registros: Lugar fsico de los registros que controlan cada mdulo.
La Memoria de registros es la parte de la memoria se encuentran los registros que manejan a cada modulo del C y
tambin existen registros no definidos o bien a definirse por el programador para cualquier uso (variables,
constantes, acumuladores auxiliares, etc.) estos registros de propsito general tambin son de 8 bits y se definen
asignndoles un nombre y una direccin.
Para la familia 16F87X la memoria de registros est dividida en 4 bancos como se muestra en los mapas de registros
de las siguientes figuras (Observese que la distribucin de los registros de los modelos 16F873 y 16F874 es la misma
y pasa lo propio entre los modelos 16F876 y 16F877).

El registro W
El registro auxiliar de trabajo W (working register) es un registro de 8 bits con un espacio fsico en la memoria
principal del C. Este registro es totalmente escribible desde el exterior y se puede leer en cualquier momento ya
que se puede acceder a l desde cualquier banco de memoria. Por medio de este registro cargamos valores a los
distintos registros del C, es decir, primero se pone un valor en el registro W y luego se copia el valor del registro W
al registro que queramos. No se puede cargar un valor directamente a otro registro que no sea W.
Microcontroladores PICs 5

El registro STATUS
Como existen registros de control en los 4 bancos disponibles para los 16F87X y 2 bancos para los 16F8X, hay que
tener bien en claro que para modificarlos o asignarles algn valor hay que seleccionar el banco correspondiente.
Generalmente se trabaja en el banco 0, pero no por eso podemos decir que los otros no se utilizan. Adems el banco
0 es el predeterminado cuando se enciende el C. Cuando el C se enciende, cada registro tiene asignado un valor,
en general es el valor 0, pero no todos. Para profundizar en esto se puede consultar la tabla de valores iniciales de
registros publicada por Microchip en la hoja de datos de cada C. La descripcin especfica de cada registro se
har cuando sea necesario utilizarlo.
El registro de estado (STATUS) nos proporciona continuamente informacin mediante los bits del 0 al 2 de los
resultados de operaciones matemticas, desbordes de contadores, etc. El bit 3 est asociado con el WDT que se
comentar ms adelante. Seteando los bits 5 y 6 podemos seleccionar el banco de memoria correspondiente para
trabajar con los registros necesarios y el bit 7 se usa para establecer que parte de cada banco est seleccionado. A
Continuacin se muestra el registro STATUS de la familia 16F87X:

Set de Instrucciones y Sintaxis


Los 16F87X cuentan con 35 instrucciones, las cuales estn divididas entre instrucciones orientadas a registros,
orientadas a bits y orientadas a control. Por medio de estas, se crea el programa en lenguaje assembler respetando la
sintaxis necesaria para cada una.

Instrucciones Orientadas a bits


Este grupo de instrucciones acta directamente sobre un bit especfico de cualquier registro. Con ellas es posible
escribir o leer un bit para luego tomar decisiones de acuerdo al resultado.

Sintaxis Descripcin Ciclos de Instruccin

BCF f,b Pone en "0" el bit b del registro f 1

BSF f,b Pone en "1" el bit b del registro f 1

BTFSS f,b Lee el bit b del registro f y salta la instruccin siguiente si est en 1 1 (2 si salta)

BTFSC f,b Lee el bit b del registro f y salta la instruccin siguiente si est en 0 1 (2 si salta)

Instrucciones Orientadas a Registros


Este tipo de instrucciones maneja registros directamente, es decir, con estas instrucciones vamos a poder asignarle
valores a cada registro, operar matemticamente con ellos, operar con lgica booleana entre ellos, etc.

Sintaxis Descripcin Ciclos de Instruccin

ADDWF f,d Suma el contenido del registro W con el de f 1

ANDWF f,d Realiza la operacin lgica AND entre el contenido del registro W con el de f 1

CLRF f Borra el contenido del registro f 1

CLRW Borra el contenido del registro W 1

COMF f,d Niega el valor del registro f 1

DECF f,d Decrementa en una unidadel contenido del registro f 1

DECFSZ f,d Decrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero. 1 (2 si salta)

INCF f,d Incrementa en una unidadel contenido del registro f 1

INCFSZ f,d Incrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero. 1 (2 si salta)
Microcontroladores PICs 6

IORWF f,d Realiza la operacin lgica OR entre el contenido del registro W con el de f 1

MOVF f,d Mueve el contenido del registro f 1

MOVWF f Mueve el contenido del registro W al registro f 1

NOP No realiza ninguna operacin 1

RLF f,d Rota el contenido del registro f hacia la izquierda a travs del carry bit 1

RRF f,d Rota el contenido del registro f hacia la derecha a travs del carry bit 1

SUBWF f,d Resta el contenido del registro W al registro f 1

SWAPF f,d Intercambia los cuatro primeros bits con los cuatro ltimos del registro f 1

XORWF f,d Realiza la operacin lgica XOR entre el contenido del registro W con el de f 1

Todas las operaciones se guardan en:


El registro W si d=0
El registro f si d=1
Para el caso de RLF y RRF el bit opuesto al rotado se pone en 0

Instrucciones Orientadas a Control


Este juego de instrucciones nos permite controlar algunos registros y funciones especficas. Tambin estas
instrucciones se utilizan para guardar algn valor determinado en un registro o hacer operaciones matemticas y
lgicas entre un registro y un valor cualquiera que no necesariamente est guardado en un registro, es decir un valor
literal.

Sintaxis Descripcin Ciclos de Instruccin

ADDLW k Suma el valor k al registro W 1

ANDLW k Realiza la operacin lgica AND entre el valor k y el registro W 1

CALL k Llamada a la subrutina k 2

CLRWDT Limpia el WD-Timer 1

GOTO k Salto incondicional a la etiqueta k 2

IORLOW k Realiza la operacin lgica OR entre el valor k y el registro W 1

MOVLW k Guarda en el registro W el valor k 1

RETFIE Retorno de una interrupcin 2

RETLW Retorno de una subrutina con el valor k en el registro W 2

RETURN Retorno de una subrutina 2

SLEEP Se pone el PIC en estado de reposo (dormido) 1

SUBLW k Resta el valor k al registro W 1

XORLW Realiza la operacin lgica XOR entre el valor k y el registro W 1


Microcontroladores PICs 7

Ejemplo: encender y apagar un LED


Para comprender lo visto hasta ahora, realizaremos un proyecto completo. Es decir, circuito y programa. El ejemplo
propuesto es ms que simple y por supuesto que no se utilizara un PIC para este desarrollo en la vida real, pero nos
servir para comprender la sintaxis y el orden de las directivas.
La idea es conectar un LED por medio de una resistencia limitadora de corriente a un terminal de salida de un
PIC16F873 para que este encienda al presionar un pulsador y se apague al soltarlo.

Circuito Propuesto
Abajo se muestra el circuito completo para este ejemplo: alimentacin de 5 V entre VDD y masa, el cristal con sus
condensadores completando el circuito de reloj y el circuito de reset mejorado discutido anteriormente. A esto se le
agrega un pulsador que ser el encargado de dar la orden para encender y apagar el LED y, claro, el LED de salida
con sus resistencia limitadora.

Programa
Para crear el programa que se grabar en el PIC usaremos el MPLAB que es el entorno de desarrollo que nos ofrece
Microchip. Es recomendable leer el artculo MPLAB para aquellos que no estn familiarizados con l.
Bsicamente este sencillo ejemplo se puede modelar con el siguiente pseudo-cdigo:

repetir:
RA0 en 1?
si --> Encender LED
No --> Apagar LED
Fin Repetir

Ensamblador
Pasado el pseudo-cdigo a lenguaje ensamblador y usando las directivas del MPLAB se hace necesario crear el
siguiente archivo .asm:
LIST P=PIC16F873 ;Indica que Pic se usa
INCLUDE "P16F873.inc" ;Agrega la definicin estndar de registros
ORG 00h ;Comienza el programa en la direccin 0
Inicio bsf STATUS,5 ;Selecciona el banco 1 de memoria
movlw 00h ;Guarda en W el n 0
movwf TRISB ;Indica que el puerto B es salida
movlw 0ffh ;Guarda en W el n 255d
movwf TRISA ;Indica que el puerto A es entrada
bcf STATUS,5 ;Selecciona el banco 0 de memoria
Comienzo btfsc PORTA,0 ;Testeo RA0
goto enciende ;Si est en 1 salta a enciende
goto apaga ;Si est en 0 salta a apaga
apaga bcf PORTB,7 ;Pone un 0 en RB7
goto Comienzo ;Salta a Comienzo
enciende bsf PORTB,7 ;Pone un 1 en RB7
goto Comienzo ;Salta a Comienzo
end ;Fin del programa
Microcontroladores PICs 8

Comentarios al Programa
Es fcil deducir que el smbolo ; nos deja escribir comentarios, es decir el compilador no lee los caracteres
ingresados despus de este. Inicio, Comienzo, apaga y prende son etiquetas que nos ayudan a identificar una
direccin de memoria de programa. Estas tampoco son tenidas en cuenta por el compilador y se reemplazan por la
direccin de memoria correspondiente.
Adems se pueden observar las directivas comentadas, instrucciones, literales, configuracin de registros, etc. Por
ejemplo, la directiva INCLUDE tal como est usada pega en nuestro programa la definicin estndar de las
direcciones de cada registro del PIC.

Lenguaje de Mquina
Al compilar el .asm obtenemos varios archivos, uno de ellos y el ms importante es el que se grabgar en el PIC que
contiene todas las instrucciones y directivas traducidas al lenguaje de mquina. Para este ejemplo el archivo .hex que
grabaremos en el pic es:

:020000040000FA
:10000000831600308600FF308500831205180B2808
:0A0010000928061006280614062829
:00000001FF

Palabra de Configuracin
Todos los modelos de C de Microchip tienen un registro especial llamado CONFIGURATION WORD (palabra
de configuracin). Es un registro donde se eligen algunas condiciones de funcionamiento iniciales, para que el
propio PIC sepa como ser usado. Es un registro cuya cantidad de bits es fija, 14 bits, pero solamente tenemos
acceso a algunos de ellos y depende del modelo de PIC que estemos usando. Para los 16F87X existen 11 bits
configurables en este registro.
Existen dos formas de configurar estos bits. Una de ellas es desde el MPLAB mediante la opcin
CONFIGURATION BITS del men CONFIGURE. La otra forma es mediante la directiva _ _CONFIG donde se
especifica, a modo de argumentos, como queremos setear los bits correspondientes.

Conversores Analgicos-Digital

Entendiendo las conversiones A/D


Los conversores A/D (Analgico/Digital) que traen incorporados los C de la familia 16F87X. stos, son de 10 bits
y su funcionamiento es bastante simple comparados con los conversores A/D R2R, los de resistencia ponderada, etc.
Los [[Microcontrolador PIC|PICs] 16F874/7 vienen equipados con 8 entradas para hacer conversiones A/D, mientras
que los 16F873/6 vienen con 5. Que tengan 5 u 8 entradas no quiere decir que haya 5 u 8 conversores A/D; en
realidad es uno solo que se puede multiplexar en 5 u 8 entradas segn el modelo. La tcnica que utiliza el C para la
conversin es la de incremento y comparacin la cual consiste en usar un registro auxiliar, compararlo con la
entrada analgica y si es menor incrementarlo, volver a comparar y as hasta que el valor del registro sea lo ms
aproximado posible (pero sin pasarse) a la entrada analgica.
El rango de conversin de los [[Microcontrolador PIC|PICs] es de 0 a 5 V, pero si hubiera que hacer alguna
conversin de ms voltaje bastar con poner a la entrada del conversor un divisor de tensin correctamente calculado
o bien trabajar con alguna tensin de referencia externa al C.
La resolucin que tiene cada bit de la conversin tiene un valor que es funcin de la tensin de referencia externa (en
caso que la hubiere) y viene dada por:
Microcontroladores PICs 9

Con lo cual, por ejemplo, si la tensin de referencia positiva (Vref+) es de 5 V y la tensin de referencia negativa
(Vref -) es tierra, la resolucin por cada bit es de 4,8 mV por cada bit. Este caso es cuando no se aplica una
referencia externa, ya que el C pone automticamente la referencia en la tensin de alimentacin. Una vez realizada
la conversin, obtendremos un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V.

Controlando el conversor A/D


Como es sabido, todos los mdulos de un PIC, tienen registros asociados para su control, en este caso, los registros
asociados al conversor A/D son:
ADRESH (completo)
ADRESL (completo)
ADCON0 (completo)
ADCON1 (completo)
Como la resolucin del convertidor A/D es de 10 bits y los registros del C son de 8, se utilizan dos registros; el
ADRESL y ADRESH (AD resultado Low y AD resultado High) en forma concatenada. Es decir, en uno de ellos
usaremos los 8 bits completos y en el otro solo 2 bits para llegar a los 10.
Los registros ADCON0 y ADCON1 son los que nos permitirn controlar, configurar y poner en marcha al conversor
y se muestran en las figuras a continuacin:
Como se ve en el registro ADCON0, los bits 6 y 7 son par ajustar la frecuencia del oscilador del conversor, que est
ligada directamente con la frecuencia de oscilacin del C o bien usando una red RC interna. Los bit 5 al 3 son para
elegir el canal de conversin y mediante estos bits se realiza la multiplexacin en caso de necesitar ms de una
entrada analgica para la conversin. El bit 2 es uno de los ms importantes, ya que para iniciar la conversin hay
que ponerlo en 1 y automticamente este bit se pone en 0 cuando la conversin termina. El bit 1 no se usa y el bit
0 es para activar el mdulo de conversin en general o como se dice "prender el conversor". Si este ltimo bit
estuviera en 0, por ms que se ponga un 1 en el bit 2, el conversor no iniciar la conversin, ya que el mdulo en
general est "apagado".
El registro ADCON1 el encargado de definir que entrada o terminal del C usaremos como entrada analgica, este
registro se hace muy til cuando, por ejemplo, usamos un mismo terminal del C como salida/entrada digital y en un
determinado momento queremos que ese mismo terminal nos lea un voltaje analgico externo. Tambin es el
responsable de la seleccin de la justificacin del resultado de la conversin, mediante el bit 7 y de configurar
cual/es sern los terminales donde aplicaremos la tensin de referencia en caso de necesitarla.

Conversin Terminada
El tiempo que le toma al C realizar la conversin se denomina y nunca debe ser menor que 1,6 s para la
familia 16F87X. el tiempo es configurado por software segn la relacin donde K es el
divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con = 1s y en los bits 7 y 6 del registro
ADCON0 ponemos 00,quedar: lo cual est dentro del rango permitido.
Una vez terminada la conversin, el resultado se almacena en los registros ADRESH y ADRESL segn estn
configurados en el bit 7 del registro ADCON1. La "justificacin" a la derecha o izquierda es sencilla de comprender;
se trata de guardar el resultado de 10 bits en dos registros de 8 bits c/u, sea que se elegir si se quieren los 8
primeros bits en el ADRESL y los dos restantes en el ADRESH o viceversa.
Generalmente la eleccin de la justificacin est directamente emparentada con la resolucin que queremos leer, es
decir, si se quiere conectar un potencimetro y segn la tensin aumentar o disminuir el tiempo de parpadeo de un
led, se puede justificar a la izquierda y leer como resultado de la conversin solo los 8 bits del ADRESH y descartar
o despreciar los dos bits de menor peso significativo que se guardarn en el ADRESL, la figura de la derecha facilita
el entendimiento de la justificacin derecha o izquierda.
Microcontroladores PICs 10

Pasos necesarios para la conversin A/D


A modo de algoritmo los pasos necesarios para una correcta utilizacin del modulo A/D son los siguientes:
1. Configurar el mdulo A/D:
1. Terminales de entrada analgica y de referencia.
2. Seleccionar el canal adecuado.
3. Seleccionar la velocidad de conversin.
4. Prender el conversor: Setear el bit 0 del registro ADCON0
2. Empezar la conversin: Setear el bit 2 del registro ADCON0
3. Esperar que el bit 2 del registro ADCON0 se ponga a 0
4. Leer el resultado en los registros ADRESH:ADRESL
En estos pasos no se tiene en cuenta que se pueden necesitar ms de una conversin por distintos canales o bien que
se realicen varias conversiones y luego tomar un promedio. Esta ultima tcnica es muy usada cuando las variaciones
de tensin son rpidas y promediando tres o cuatro conversiones se tiene as el resultado, hasta que se realice una
segunda conversin.

Referencias
ANGULO USATEGUI, JOS MARA (2006), MICROCONTROLADORES PIC. DISEO PRACTICO DE
APLICACIONES, EDITORIAL MCGRAW-HILL. ISBN 978-84-481-4627-6.

Enlaces externos
Pgina Oficial de Microchip [1]
Hoja de Datos de la familia 16F87X (Datasheet) [2]
Grupo de discusin de habla-hispana de Microcontroladores PICs [3]
Placa entrenadora Open Source para PIC16F87X de 40 pines [4]

Referencias
[1] http:/ / www. microchip. com
[2] http:/ / ww1. microchip. com/ downloads/ en/ DeviceDoc/ 39582b. pdf
[3] http:/ / ar. groups. yahoo. com/ group/ PicListLatina/
[4] http:/ / www. ucontrol. com. ar/ wiki/ index. php/ PIC_TRAINER_40
Fuentes y contribuyentes del artculo 11

Fuentes y contribuyentes del artculo


Microcontroladores PICs Fuente: http://es.wikibooks.org/w/index.php?oldid=176185 Contribuyentes: CommonsDelinker, Mendezmh, Oleinad, 2 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
//creativecommons.org/licenses/by-sa/3.0/

Potrebbero piacerti anche