Anda di halaman 1dari 25

*PIC 16F877A:

Modulo ADC
DIAGRAMA DE BLOQUES DEL MODULO A/D
La conversin de una seal analgica a una
digital es codificada en un numero de 10 bits
de resolucin.
Para encontrar el bit menos significativo
utilizamos la sgte formula.
.1 =

1

Registros asociados al modulo:

PIE1
ADCON0banco 0,0x1F
ADCON1banco 1,0x9F
ADRESL.banco 1,0x9E
ADRESH.banco 0,0x1E
ADRESH Y ADRESL
Cuando se ha completado una conversin los
datos se guardan en estos registros, adems el
bit GO/-DONE(ADCON0-bit 2) se pone a 0 lgico
y el bit ADIF(registro PIR bit 7) se pone como 1
lgico PIR (Banco 0, 0X0C)
BITS DE SELECION
DEL CLOCK
TIPO DE
JUSTIFICACION
BITS DE SELECION PARA INDICAR SI LAS
ENTRADAS DEL PUERTO TRABAJARAN COMO
DIGITALES,COMO ANALOGICAS O
COMBINADAS,SELECCIN DE LAS Vref
SELECCIN DEL
CANAL CON EL
QUE SE QUIERE
TRABAJAR
BIT QUE DA
INICIO AL ADC
BIT QUE
HABILITA EL
MODULO ADC
Habilitacin o inhabilitacin de las interrupciones:
(si se va ha preguntar por el fin del ADC por poleo o atraves de
interrupciones)
Bit que permite
habilitar
interrupciones
globales
Bit que permite habilitar
la interrupcin del
conversor anlogo a digital
*1.CONFIGURE EL MODULO A/D:
Configure los pines de entada analgico a usar, configure los
voltajes de referencia en (ADCON1).

Seleccione el canal de entrada al modulo A/D(en el registro
ADCON0)

Seleccione el clock de conversin A/D(ADCON0)

Ponga a funcionar el modulo A/D (ADCON0)

2.CONFIGURE LA INTERRUPCION(si lo desea):

ADIF=0..(Bit que indica si se produjo una conversin)
ADIE=1..(Habilitador de interrupcin del modulo analgico)
PEIE=1..(Habilitador de interrupcin de perifricos)
GIE =1..(Habilitador general de interrupciones)
3.ESPERE POR EL TIEMPO DE ADQUISICION
Es el tiempo que se demora en trabajar el bloque de
sampling and hold.
4.COMIENZO DE LA CONVERSION
GO/-DONE=1(en el registro ADCON0)
4.ESPERAR QUE LA CONVERSION SE COMPLETE:
Para saber si la conversin termino podemos:
Revisar el bit GO/-DONE esperando que sea de
nuevo 0 lgico.
O esperar al flag ADIF sea 1 lgico(puede
emplearse como interrupcin).
5.LEER EL RESULTADO EN EL PAR DE
REGISTROS(ADRESH Y ADRESL)
(No debemos olvidar colocar el bit ADIF a 0 logico
si se requiere)


CONFIGURACION DEL MODULO

Seleccion del tipo de justificacin.

Seleccin parcial del clock

Modo de trabajo de los pines digitales , analgicos y
tensiones de referencia.
*ADCON1,Bit 7(ADMF)seleccin de la justificacin
*1 = justification a la derecha. Los 6 bits mas
significativos de ADRESH son leidos como 0.
*0 = justification a la hizquierda. los 6 bits menos
significativos de ADRESL son leidos como 0.


*ADCON 1, Bit 6(ASCS2) SELECION DEL
CLOCK(parcial)
Colocamos a 0 para seleccionar en forma
parcial, luego se selecciona desde ADCON0 con
los bits 6 y 7
El tiempo q demora el micro para convertir un
bit es

= 1,6
Por lo tanto el clock no puede ser menor a este
tiempo para un cristal de 4 MHz el minimo
tiempo seria Fosc/8














*BIT 0-3: Bit de control de la configuracin del
puerto
*ADCON0




BIT 6 Y 7:
Seleccionamos Fosc/8 para un cristal de 4 MHz
*Bit 3-5 para seleccionar el canal que vamos a
utilizar

*Bit 2 GO/DONE: Estado de la conversin.
cuando ADON =1
1= conversin en progreso(estableciendo este bit
inicia la conversin que es automticamente
limpiado por hardware cuando la conversin esta
completada)
0=la conversin no esta en progreso.

NOTA: El bit 1 no esta implementado se coloca 0
*Bit 0 ADON:
Bit de encendido.
1= el modulo conversor esta encendido


0= el modulo conversor esta apagado, y no
consume corriente de operacin.
*COMO ELEGIR EL ADUCUADO TIEMPO DE CONVERSION

*DELAY DE LA ADQUISICION:
Se refiere al tiempo que demora en convertir los 10 bits

= 12

= 1,6
DISEO DEL PROGRAMA:
1.ir a BANCO 0
2.ADCON0=b01000001
3.ir a BANCO 1
4.PUERTOS A,B,C,D,E>>como Salidas
5.seleccionamos las lneas que vamos a utilizar
6.OPTION_REG=b00000111
7.ADCON1=b00001110
8.ir a BANCO 0
9.limpiar PUERTO C.
10.preguntar si tmr0 desbordo INTCON<TOIF>si no espera
11.Limpiar indicador de desborde
12.Empezar conversin.
13.Preguntar si termino la conversion,ADCON0(GO)si no espera
14.PORTC=ADRESH ..movemos el dato a PUERTO C
15.Ir a paso 10.






NO






NO
SI







INICIO
Configurar A/D justificar el
byte menos significativo
Fosc/8 y seleccionar el
canal analgico
PORT A,B,C,D,E>>salidas
Bit 0 del puerto A entrada
Limpiar el PORTC
Configurar el TMR0
El prescaler =1:256
TMR0
desbordado
?
Limpiar el indicador
de desborde empezar
conversin A/D
Conversin
completada
?
Escribir el resultado en
el puerto C
CODIGO
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF & _CP_OFF & _BODEN_OFF &
_CPD_OFF & _WRT_OFF
LIST P=16F877A
INCLUDE<P16F877A.INC>
ORG 0X00;Inicio del programa en la posicion cero de memoria
Nop
INICIO:
BCF STATUS,RP0 ; ir al banco 0
BCF STATUS,RP1
MOVLW b01000001 ; A/D conversion Fosc/8
MOVWF ADCON0
BSF STATUS,RP0; ir al banco 1
BCF STATUS,RP1
CLRF TRISA ; PORTA como salida
CLRF TRISB ;PORTB como salida
CLRF TRISC ;PORTC como salida
CLRF TRISD ;PORTD como salida
CLRF TRISE ;PORTE como salida

MOVLW b00000111
MOVWF OPTION_REG;TMR0 preescaler 1:156
MOVLW b00001110 ; A/D Port AN0/RA0
MOVWF ADCON1



BSF TRISA,0 ; RA0 linea de entrada para el ADC
BCF STATUS,RP0 ; ir al banco 0
BCF STATUS,RP1
CLRF PORTC ; limpiar PORTC

BUCLE:
BTFSS INTCON,TOIF
GOTO BUCLE ;Esperar que el timer0 desborde
BCF INTCON,TOIF ;limpiar el indicador de desborde
BSF ADCON0,GO ;Empezar la conversin A/D

ESPERA:
BTFSC ADCON0,GO ;la conversin esta completa.
GOTO ESPERA ;No ir a espera
MOVF ADRESH,W ;movemos el dato al registro W
MOVWF PORTC ;MUESTRA EL RESULTADO EN PORTC
GOTO BUCLE

END