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!