Você está na página 1de 5

26/05/2015

03ConversindeAnalgicoaDigitalconlibreraADC.hdeC18|Guasparaprincipiantes

Guas para principiantes


MicrocontroladoresPIC

02ModificandolalibreraXLCD
04ConversiondeAnalgicoaDigital
porInterrupcin

03 Conversin de Analgico a
Digital con librera ADC.h
deC18
Continuando con la implementacin de
libreras C18, ha llegado el turno de adc.h,
esta librera nos facilita el trabajo de
conversin A/D ahorrndonos bastante
cdigo.Comosiemprenosbasaremosenel
documento
de
Microchip:MPLAB_C18_Libraries_51297f.
Circuitodeaplicacin
Partimos describiendo el circuito
aplicacinqueeselsiguiente:

de

El circuito es sencillo ya que nicamente


tiene como finalidad demostrar el
funcionamiento del mdulo AD del
microcontrolador.Enelcircuito,seutilizael
canalAN0(RA0),losnivelesanalgicosson
proporcionados por el potencimetro de
data:text/htmlcharset=utf8,%3Cdiv%20id%3D%22header%22%20style%3D%22margin%3A%200px%20!important%3B%20padding%3A%201px%3B%2

1/5

26/05/2015

03ConversindeAnalgicoaDigitalconlibreraADC.hdeC18|Guasparaprincipiantes

10K y monitoreados por el voltmetro, el


microcontrolador realizar la conversin y
mostrar el valor digital (en binario) en el
puertoDpormediodeunconjuntodeleds.
Consideraciones sobre el mdulo AD
delPIC18F4550
El PIC18F4550 posee un modulo AD de 13
canales, esto significa que solamente
podemos utilizar un canal por vez (no es
posiblelaconversinsimultnea).
La resolucin de la conversin es de 10 bits
(210 = 1024), por lo tanto tendremos
10241=1023posiblesvalores.
El valor del escaln de la conversin si el
voltaje de entrada mximo es de 5V ser
de: 5V/1023 = 0.004887V. Por ejemplo, si
seajustaelpotencimetroparaentregarun
voltaje de 3.5V tendremos que: 3.5V
/0.004887V = 716 (valor digital), al
convertir 716 a binario tenemos:
1011001100(Esteserelresultadoquese
mostrarenelpuertoD).

Libreraadc.hdeC18
Originalmente creada para C18, puede
utilizarseconXC8yMPLABX.Lasfunciones
que la librera proporciona son las
siguientes:

Lasfuncionesqueutilizaremosson:
OpenADC(), se utiliza para configurar el
mdulo AD, requiere tres parmetros de
configuracin: origen de la seal de reloj
para el mdulo AD, la alineacin de la
conversin, y el tiempo de adquisicin de
data:text/htmlcharset=utf8,%3Cdiv%20id%3D%22header%22%20style%3D%22margin%3A%200px%20!important%3B%20padding%3A%201px%3B%2

2/5

26/05/2015

03ConversindeAnalgicoaDigitalconlibreraADC.hdeC18|Guasparaprincipiantes

datos (xTAD). El segundo parmetro se


utiliza para indicar: el canal a utilizar (AN0
AN12),estadodelainterrupcinAD,ylos
voltajes de referencia positivo y negativo.
Finalmente,eltercerparmetroesunvalor
decimalquerepresentalaconfiguracindel
registroADCON1.
Elsiguienteeselejemplodeaplicacin:
1
2
3
4
5
6
7
8

OpenADC(ADC_FOSC_64&
ADC_RIGHT_JUST&
ADC_16_TAD,
ADC_CH0&
ADC_INT_OFF&
ADC_VREFPLUS_VDD&
ADC_VREFMINUS_VSS,
14);

**Para informacin sobre el origen de los


valores de configuracin se sugiere leer la
hoja de especificaciones del PIC18F4550
pg.259.
Cabe aclarar, que los parmetros de
OpenADC()cambiandeacuerdoalPICque
seestutilizando.
ConvertADC(),
conversin.

inicia

el

proceso

de

ReadADC(), devuelve un nmero entero


que representa el valor decimal de la
conversinefectuada.
BusyADC(), hace una espera mientras el
procesodeconversinADsellevaacabo.
Cdigodeaplicacin
Creamos entonces, un nuevo proyecto en
MPLAB X e incorporamos el siguiente
cdigo:
1
2
3

#include<xc.h>
#include<plib/adc.h>
#include<plib/delays.h>

data:text/htmlcharset=utf8,%3Cdiv%20id%3D%22header%22%20style%3D%22margin%3A%200px%20!important%3B%20padding%3A%201px%3B%2

3/5

26/05/2015

03ConversindeAnalgicoaDigitalconlibreraADC.hdeC18|Guasparaprincipiantes

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

#include"stdlib.h"

//BitsdeconfiguracinparaFosc=48Mhz
#pragmaconfigPLLDIV=5,CPUDIV=OSC1_PLL2,USBDIV=
#pragmaconfigFOSC=HSPLL_HS,FCMEN=OFF,IESO=OFF
#pragmaconfigPWRT=OFF,BOR=OFF,VREGEN=OFF
#pragmaconfigWDT=OFF,WDTPS=32768
#pragmaconfigMCLRE=ON,LPT1OSC=OFF,PBADEN=OFF
#pragmaconfigSTVREN=ON,LVP=OFF,ICPRT=OFF,XIN

#define_XTAL_FREQ48000000

intresultado;

voidmain()
{
TRISD=0;
PORTD=0;

/*ConfiguracindelmduloAD
*Fosc=64
*Alineacin=derecha
*16TAD
*CanalAN0
*Interrupcindeshabilitada
*VREF+yVREFconectadosaVDDyVSSrespectivamente
*ValordeADCON1=14(CanalAN0analgico,elresto
*/
OpenADC(ADC_FOSC_64&
ADC_RIGHT_JUST&
ADC_16_TAD,
ADC_CH0&
ADC_INT_OFF&
ADC_VREFPLUS_VDD&
ADC_VREFMINUS_VSS,
14);

//Retardode50Tcy
Delay10TCYx(5);

while(1)
{
//Iniciarlaconversin
ConvertADC();

//Esperaparaquesecompletelaconversin
while(BusyADC());

//Capturandoelresultado
resultado=ReadADC();

/*Comoelresultadoesde10bits
*yslosedisponedeunpuertode8bits

data:text/htmlcharset=utf8,%3Cdiv%20id%3D%22header%22%20style%3D%22margin%3A%200px%20!important%3B%20padding%3A%201px%3B%2

4/5

26/05/2015

03ConversindeAnalgicoaDigitalconlibreraADC.hdeC18|Guasparaprincipiantes

57
58
59
60
61
62
63
64
65
66

*paramostrarlo.Elresultadoseconvierte
*ensuequivalentede8bitsdividiendo
*porcuatro.
*/
resultado=resultado/4;

//Mostrandoelresultado
PORTD=resultado;
}
}

Bastar con compilar y verificar el


funcionamiento en Proteus para ver los
resultados,serainteresantecomprobarque
matemticamente los valores digitales
corresponden al nivel del voltaje entrada
analgico(noolvidarqueelresultadode10
bitsseestconvirtiendoa8bits).
El
siguiente
video
muestra
la
implementacinenunaplacadedesarrollo:
Ocorreu um erro.
No possvel executar o Javascript.

Volver posteriormente con un ejemplo de


conversinA/Dutilizandointerrupciones.

data:text/htmlcharset=utf8,%3Cdiv%20id%3D%22header%22%20style%3D%22margin%3A%200px%20!important%3B%20padding%3A%201px%3B%2

5/5

Você também pode gostar