Documentos de Académico
Documentos de Profesional
Documentos de Cultura
P.G.F.
CONVERSOR A/D
CONVERSOR A/D
El PIC16F877 posee un conversor A/D de 10 Bits de resolucin y 8 canales.
CONVERSOR A/D
VREF+ = 5v
DATO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 VALOR (V) 0,012 0,048 0,108 0,192 0,3 0,432 0,588 0,768 0,972 1,2 1,452 1,728 2,028 2,352 2,7 3,072 3,468 3,888 4,332 4,8
VREF- = 0v
VALOR(V) / 4,8828 (mV) N DIVISIONES 2,5 3 9,8 10 22,1 23 39,3 40 61,4 62 88,5 89 120,4 121 157,3 158 199,1 200 245,8 246 297,4 298 353,9 254 415,3 416 481,7 482 553,0 553 629,1 630 710,2 711 796,3 797 887,2 888 983,0 983
REGISTRO ADCON0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# ADON
ADCS1- ADCS1 : bits de seleccin del reloj de conversin 00 FOSC / 2 01 FOSC / 8 10 FOSC / 32 11 FRC (Oscilador interno)
REGISTRO ADCON0
SELECCIN TAD TAD 2*TOSC 8*TOSC 32*TOSC RC ADCS1- ADCS1 00 01 10 11 20 MHz 100ns 400ns 1.6s 2-6s FRECUENCIA DE TRABAJO 5 MHz 400ns 1.6ns 6.4s 2-6s 1.25 MHz 1.6s 6.4s 2.6s 2-6s 333.33 kHz 6s 24s 96s 2-6s
Tiempos NO vlidos
Tiempos Mnimos
Tiempos validos
TAD = Tiempo que dura la conversin de cada bit En la conversin de 10 bit el mnimo tiempo que requiere es de 12 * TAD En los PIC 16F87X el tiempo NO puede ser inferior a 1.6s
REGISTRO ADCON0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# ADON
CHS2:CHS0 : bits de seleccin de canal anlogo 000 Canal 0, ( RA0 / AN0 ) 001 Canal 1, ( RA1 / AN1 ) 010 Canal 2, ( RA2 / AN2 ) 011 Canal 3, ( RA3 / AN3 ) 100 Canal 4, ( RA5 / AN4 ) 101 Canal 5, ( RE0 / AN5 ) 110 Canal 6, ( RE1 / AN6 ) 111 Canal 7, ( RE2 / AN7 )
REGISTRO ADCON0
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# ADON
GO/DONE#: 1 - Conversin en progreso (comienza la conversin A/D) 0 - Final de conversin ADON 1 - Mdulo de conversin activado 0 - Mdulo de conversin desactivado
REGISTRO ADCON1
ADFM PCFG3 PCFG2 PCFG1 PCFG0
ADFM: Formato modulo A/D 1 - Justificacin a la derecha, 6 Bit ms significativos de ADRESH son ledos como 0 0 - Justificacin a la izquierda, 6 Bit menos significativos de ADRESL son ledos como 0
REGISTRO ADCON1
ADFM PCFG3 PCFG2 PCFG1 PCFG0
REGISTRO ADCON1
ADFM PCFG3 PCFG2 PCFG1 PCFG0
PCFG3-PCFG0: Bits de configuracin del puerto A/D
BINARIO A BCD
0 0 0 0 0 0 1 0
Centenas = 2
1 1 1 1 1 1 1 1
REG1 = 255
0 0 0 0 0 1 0 1
Decenas = 5
0 0 0 0 0 1 0 1
Unidades = 5
SUBRUTINA BINARIO-BCD
;SUBRUTINA DE CONVERSION DE BINARIO A BCD ;EL VALOR A CONVERTIR SE CARGA A W Y EL RESULTADO SE OBTIENE EN LOS REGISTROS unidad, decena y ;centena BIN_A_BCD movwf DECIMAL clrf clrf movlw OTRA subwf btfss goto incf goto SUM addwf movlw REPITE subwf btfss goto incf goto SUM1 addwf retlw unidad decena centena d'100' unidad,1 STATUS,C SUM centena OTRA unidad d'10' unidad STATUS,C SUM1 decena REPITE unidad 0 ;aqui se deposita el binario a convertir
;restar 100 al valor inicial ;verifica el carry ;Si es cero deja de restar ;si es uno incrementa centena ;volver a restar ;sumarle 100 ;restar 10 al valor ;Verificar el carry ;si es cero deja de restar ;si es 1 incrementa decena ;sumarle 10 al valor
EJEMPLO DE PROGRAMACIN
;AUTOR: P.G.F. ;PIC: 16F877A ;FUNCION: Visualiza un mesaje por un LCD conectado a RB<0:7> (datos) y RBD<5:7> ; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7 ;ejemplo aplicado a un sensor de temperatura conectado a RA0 con su etapa de amplificacin ;CARACTERISTICAS: ;OSCILLATOR: XT ;WATCHDOG TIMER: OFF ;POWER UP TIMER: ON ;BROWN OUT DETECT: OFF ;LOW VOLTAGE PROGRAM: ;FLASH PROGRAM WRITE: ;BACKGROUND DEBUG: DISABLED ;DATA EE READ PROTECT: ;CODE PROTECT: OFF
list p=16f877a ;Tipo de procesador INCLUDE "P16F877A.Inc" ;Librerias de registros del PIC ;**************************** DEFINICION DE REGISTROS *********************************** CBLOCK .32 DATO_A, DATO_B ;VARIABLES CONTROL LCD R_CONVER_H, R_CONVER_L ;VARIABLES CONVERSION ANALOGA DIGITAL unidad, decena, centena,milcena ;VARIABLES CONVERSION BCD RET1,RET2,RET3 ;VARIABLES RETARDO endc
EJEMPLO DE PROGRAMACIN
INICIO bcf bsf bcf bcf movlw movwf movlw movwf clrf bcf bcf call call call STATUS,RP1 STATUS,RP0 1,7 TRISE,PSPMODE b'00000010' TRISD b'00000011' TRISC TRISE STATUS,RP0 STATUS,RP1 ;Resistencias pull up ACTIVAS ;Desactiva puerto paralelo esclavo ;Afecta puerta D tambin ;puerto D como salida y el RD1 para RF ;Configura puerto C para verificar sensores ;puerto E como salida ;Banco 0
call CONVER_INI ;Configura el PIC para conversin A/D CICLO ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MUESTRA_1call CONVER_RA0 ;realiza conversin por RA0
EJEMPLO DE PROGRAMACIN
;CON CADA DIVISION DEL CONVERSOR (4.88mV) REPRESENTARA UNA DECIMA DE GRADO movf R_CONVER_L,W clrf milcena call BIN_A_BCD btfsc call btfsc call call movf addlw call movf addlw call movf addlw call movlw call movf addlw call goto R_CONVER_H,0 SUMA_256 R_CONVER_H,1 SUMA_512 MENSAJE_TEMPERATURA_ACTUAL milcena,w 30 LCD_DATOS centena,w 30 LCD_DATOS decena,w 30 LCD_DATOS '.' LCD_DATOS unidad,w 30 LCD_DATOS CICLO
EJEMPLO DE PROGRAMACIN
;-----------------------------------------------------------------------------SUMA_256movf unidad,W addlw d'6' movwf unidad movf decena,W addlw d'5' movwf decena movf centena,W addlw d'2' movwf centena goto VER_UNIDAD ;-----------------------------------------------------------------------------SUMA_512movf addlw movwf movf addlw movwf movf addlw movwf goto unidad,W d'2' unidad decena,W d'1' decena centena,W d'5' centena VER_UNIDAD
;------------------------------------------------------------------------------
EJEMPLO DE PROGRAMACIN
VER_UNIDAD movf sublw btfss goto clrf incf goto VER_UNIDAD_2 movlw subwf btfss goto movwf incf goto VER_DECENA movf sublw btfss goto clrf incf goto unidad,W d'10' STATUS,2 VER_UNIDAD_2 unidad decena,1 VER_DECENA d'10' unidad,0 STATUS,C VER_DECENA unidad decena,1 VER_DECENA decena,W d'10' ;Compara STATUS,2 VER_DECENA_2 decena centena,1 VER_CENTENA ;Carga W con el ultimo dato leido ;Compara ;Si es igual salta ;unidad = 0 ;incremente decenas
;restar 10 ;verifica el carry ;Si es cero deja de restar ;deje el sobrepaso de 10 en unidades ;incremente decenas
;Carga W con el ultimo dato leido ;Si es igual salta ;unidad = 0 ;incremente decenas
EJEMPLO DE PROGRAMACIN
VER_DECENA_2 movlw subwf btfss goto movwf incf VER_CENTENA movf sublw btfss goto clrf incf return VER_CENTENA_2 movlw subwf btfss return movwf incf return d'10' decena,0 STATUS,C VER_CENTENA decena centena,1 ;restar 10 ;verifica el carry ;Si es cero deja de restar ;deje el sobrepaso de 10 en decenas ;incremente centenas
centena,W ;Carga W con el ultimo dato leido d'10' ;Compara STATUS,2 ;Si es igual salta VER_CENTENA_2 centena ;unidad = 0 milcena,1 ;incremente decenas d'10' centena,0 STATUS,C centena milcena,1
;restar 10 ;verifica el carry ;Si es cero deja de restar ;deje el sobrepaso de 10 en unidades ;incremente decenas
EJEMPLO DE PROGRAMACIN
;______________________________________________________________________________ ;RUTINA DE CONVERSION DE DECIMAL A BCD BIN_A_BCD movwf DECIMAL clrf clrf movlw OTRA subwf btfss goto incf goto SUM addwf movlw REPITE subwf btfss goto incf goto SUM1 addwf retlw unidad decena centena d'100' unidad,1 STATUS,C SUM centena OTRA unidad d'10' unidad STATUS,C SUM1 decena REPITE unidad 0 ;aqu se deposita el binario a convertir
;restar 100 al valor inicial ;verifica el carry ;Si es cero deja de restar ;si es uno incrementa centena ;volver a restar ;sumarle 100 ;restar 10 al valor ;Verificar el carry ;si es cero deja de restar ;si es 1 incrementa decena ;sumarle 10 al valor
EJEMPLO DE PROGRAMACIN
MENSAJE_CESAR_UNIPAMPLONA ;__________________________________________________________ call UP_LCD ;RECONFIGURA DENUEVO EL DISPLAY PARA USARLO OTRA VEZ call LCD_INI ;_____________PRIMERA LINEA DEL DISPLAY____________________ movlw 'C' ;1 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'E' ;2 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'S' ;3 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'A' ;4 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'R' ;5 call LCD_DATOS ;Visualiza Valor cargado en W movlw '' ;6 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'P' ;7 call LCD_DATOS ;Visualiza Valor cargado en W movlw '.' ;8 call LCD_DATOS ;Visualiza Valor cargado en W movlw '' ;9 call LCD_DATOS ;Visualiza Valor cargado en W movlw 'C' ;10 call LCD_DATOS ;Visualiza Valor cargado en W movlw '.' ;11 call LCD_DATOS ;Visualiza Valor cargado en W
EJEMPLO DE PROGRAMACIN
movlw d'192' call LCD_REG movlw 'U' call LCD_DATOS movlw 'N' call LCD_DATOS movlw 'I' call LCD_DATOS movlw 'P' call LCD_DATOS movlw 'A' call LCD_DATOS movlw 'M' call LCD_DATOS movlw 'P' call LCD_DATOS movlw 'L' call LCD_DATOS movlw 'O' call LCD_DATOS movlw 'N' call LCD_DATOS movlw 'A' call LCD_DATOS RETURN ;SEGUNDA LINEA DEL DISPLAY ;1 ;Visualiza Valor cargado en W ;2 ;Visualiza Valor cargado en W ;3 ;Visualiza Valor cargado en W ;4 ;Visualiza Valor cargado en W ;5 ;Visualiza Valor cargado en W ;6 ;Visualiza Valor cargado en W ;7 ;Visualiza Valor cargado en W ;8 ;Visualiza Valor cargado en W ;9 ;Visualiza Valor cargado en W ;10 ;Visualiza Valor cargado en W ;11 ;Visualiza Valor cargado en W
EJEMPLO DE PROGRAMACIN
MENSAJE_TEMPERATURA_ACTUAL call UP_LCD ;RECONFIGURA DENUEVO EL DISPLAY PARA USARLO OTRA VEZ ;_____________PRIMERA LINEA DEL DISPLAY____________________ movlw d'128' call LCD_REG movlw 'T' call LCD_DATOS movlw 'E' call LCD_DATOS movlw 'M' call LCD_DATOS movlw 'P' call LCD_DATOS movlw ':' call LCD_DATOS RETURN ;SEGUNDA LINEA DEL DISPLAY ; ;1 ;Visualiza letra a ;2 ;Visualiza letra a ;3 ;Visualiza letra a ;4 ;Visualiza letra a ;5 ;Visualiza letra a
EJEMPLO DE PROGRAMACIN
RETARDO_1S movlw movwf movlw movwf movlw movwf decfsz goto decfsz goto decfsz goto retlw .8 RET1 .195 RET2 .212 RET3 RET3,1 $-1 RET2,1 $-5 RET1,1 $-9 0
include "CONV_AD.lib";libreria de conversion analoga-digital include "LCD_LIB_CAPC_877_F.lib";libreria control LCD pagina 1 END