El conversor análogo a digital es un dispositivo que me permite digitalizar señales, en este caso vamos a medir el voltaje por el pin AN1 y si es mayor a 2.5 voltios activamos el LED conectado en GP2.
Circuito
QR para el celular
Código fuente
LIST P=12F675
INCLUDE P12F675.INC
ERRORLEVEL -302
; Trabajamos con un oscilador interno a 4Mhz
__CONFIG _CPD_OFF & _CP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
CBLOCK 0X20
d1, d2, VALOR
ENDC
ORG 00
GOTO INICIO
RET10MS ;9998 cycles
movlw 0xCF
movwf d1
movlw 0x08
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;2 cycles
goto $+1
RETURN
INICIO NOP
CLRF GPIO
MOVLW B'00000111' ; 07H Configuro GP1, GP2, GP3 como pines
MOVWF CMCON ; digitales y no del comparador del micro
BANKSEL OSCCAL
CALL 3FFH ; Obtengo el valor de calibracion del oscilador
MOVWF OSCCAL ; y lo calibro con el OSCCAL
BANKSEL ADCON0 ; Configuro el AD
MOVLW B'00000101' ; 7 6 5 4 3 2 1 0
MOVWF ADCON0 ; justifico derecha, no uso, no uso, Vdd, canal AN1, GO, ad ON
BANKSEL ANSEL
MOVLW .2
MOVWF ANSEL ;CONFIGURO GP1/AN1 COMO ENTRADA ANALOGA
MOVLW .2
MOVWF TRISIO
BANKSEL GPIO
CICLO CALL RET10MS
BSF ADCON0,GO ; Inicio conversion
BTFSS ADCON0,GO ; Espero a que finalice la conversion
GOTO $-1
; Conversion finalizada
BANKSEL ADRESH
MOVF ADRESH,W ; Paso el dato tomado por el conversor a W
BANKSEL VALOR
MOVWF VALOR ; Almaceno el dato
MOVLW .128 ; pregunto si el dato es mayor a .128
SUBWF VALOR,W
BTFSS STATUS,C
GOTO MENOR ; Si el dato es Menor
GOTO MAYOR ; Si el dato es Mayor
MENOR BCF GPIO,2
BSF GPIO,0
GOTO CICLO
MAYOR BSF GPIO,2
BCF GPIO,0
GOTO CICLO
END
Copyright 2012 edwtron
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
OYE DISCULPA LA IGNORANCIA PERO TENGO DOS DUDAS, EN LAS PALABRAS DE CONFIGURACIÓN DEL MICRO ESCRIBES "INTRC_OSC_NOCLKOUT" PERO NO ENCUENTRO PARA QUE SIRVE EN EL DATASHEET :( LO MAS CERCANO QUE ENCUENTRO ES "INTOSC", NO E PROBADO EL CÓDIGO, PERO LO ESTOY COMENTANDO PARA PODERLO ENTENDER MEJOR, ME PODRÍAS DAR UNA MANO?
ResponderEliminarNo se preocupe que estamos es aprendiendo!!!
Eliminarel _INTRC_OSC_NOCLKOUT lo que hace es configurar el tipo de oscilador como oscilador interno del microcontrolador, sin salida de reloj y los pines GP5 y GP5 funcionan como I/O
te copio lo que dice el fichero P12F675.INC sobre los fusibles:
_INTRC_OSC_NOCLKOUT EQU H'3FFC' ; INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
Si quieres saber mas sobre los fusibles de cualquier microcontrolador, puedes buscar en el fichero "xxxxx.INC" de cada micro, estos ficheros los encuentras en la carpeta donde queda instalado el MPLAB o el MPLABX.
Mucha suerte!