Hola. He estado leyendo en el foto, pero no he encontrado solución a mi problema. Le agradecería a alguien que me echase un cabo, ya que estoy super estancado. Bueno, os cuento:
Utilizo el pic184550, y quiero leer una entrada analógica, para luego sacarla por el PORTB, en forma digital. Parecía todo muy simple, pero ... se ve que no tengo ni idea.
Estoy programando en ASM. Se programar en C, pero no se programar en C para pics, ya que no me conozco las funciones.
El codigo que utilizo es el siguiente:
---------------------------------------------------------------------------------------------------------
LIST P=18F4550 ;SELECCIONA EL PROCESADOR
#INCLUDE "P18F4550.INC" ;CONTIENE LA DEFINICIÓN DE VARIABLES DEL PIC
ORG 0000 ;(INTERRUPCIÓN DE RESET)
GOTO INICIO ;COMIENZO DEL PROGRAMA
INICIO
CALL INITADC ;LLAMA A LA SUBRUTINA QUE INICIALICA EL ADC
CLRF TRISB ;CONFIGURA EL PUERTO B COMO TODO SALIDAS
CLRF W ;BORRA EL ACUMULADOR
MOVWF PORTB ;BORRA EL PUERTO B (TODAS LAS SALIDAS A 0)
BUCLE
CLRF W ;BORRA EL ACUMULADOR
CALL GETADC ;OBTIENE LOS DATOS DEL CONVERSOR
MOVWF PORTB ;ESCRIBE LOS 8 BITS DE MÁS PESO EN PORTB
GOTO BUCLE ;REPITE LA OPERACIÓN
GETADC
BCF ADCON0, CHS0
BCF ADCON0, CHS1
BCF ADCON0, CHS2
BCF ADCON0, CHS3 ;CANAL 0 SELECCIONADO PARA LEER
BSF ADCON0, GO
ADCLOOP
BTFSC ADCON0, GO ;ESPERA A QUE FINALICE LA CONVERSIÓN
GOTO ADCLOOP
BCF PIR1, ADIF ;BORRA LA BANDERA DE CONVERSIÓN COMPLETADA
MOVF ADRESH,W ;DEVUELVE LOS 6 BITS DE MAS PESO DEL RESULTADO
RETURN
INITADC
CLRF TRISA ;CONFIGURA PORTA A TODO ENTRADAS (LAS PONE A 1)
COMF TRISA ;TRISA = 0011 1111
MOVLW B"00000111" ;
MOVWF ADCON1 ;(VSS = 0, VDD = 5)
;CONFIGURACIÓN DE CANALES
MOVLW B"00000111"
MOVWF ADCON0
MOVLW B"00111010"
MOVWF ADCON2 ;JUSTIFICA A LA IZQUIERDA, 20 TAD, FOSC/32
BCF PIR1, ADIF ;BORRA LA BANDERA DE FIN DE CONVERSIÓN
BCF PIE1, ADIE ;DESACTIVA LA INTERRUPCIÓN DEL ADC
RETURN
END
---------------------------------------------------------------------------------------------------------
Me gustaría saber si estoy cometiendo algún error de programación. Este pic tiene unos registros que son los LAT. También he provado a utilizarlos, pero sin ningún cambio. No se si el fallo lo estoy cometiendo a la hora de pasar el programa al pic. Utilizo un cuarzo de 4MHz, Tengo que usar alguna cofiguración especial??En principio, lo único que hago es desactivar el Watchdog. Tendría que hacer algo más?
Pues eso, la entrada se la estoy metiendo directamente de una fuente de tensión a AN0, y la voy variando. Pero los pines del puerto B ni se inmutan.
Si han llegado hasta aquí... muchas gracias de antemano, solo por aguantarme..
Mi e-mail es:
nuhuanda1@hotmail.comOtra cosa... si quisiera aprender cómo se hace esto mismo, pero en C, dónde podría hacerlo? agradecería alguna dirección, o algún libro que me pueda comprar.