PIC16f877 ADC conversion clock period

Buenas tardes,

Cuando intento simular un diseño en proteus, me encuentro con el siguiente fallo:

[PIC16 ADC] PC=0x000E. ADC conversion clock period [5e-07] is possibly invalid for device clock frecuency

He estado en varios foros y he corregido pequeños detalles, pero me sigo encontrando en el mismo atolladero.

El micro es el PIC16F877, frecuencia de reloj de 4MHz y el codigo es el que sigue:



Capdat
banksel ADCON0
movlw b'01000001' ; fosc 8, RA0 analogico
movwf ADCON0

; Incializacion convertidor AD. Justificado a la izquierda, todos los PORTA como entrada analogica

banksel ADCON1
movlw b'00001110' ;Justificado a la izquierda, canal 0, modulo habilitado
movwf ADCON1
call Demora_20us ; Esperamos el tiempo de adquisicion necesario
; Comenzamos la conversion AD

banksel ADCON0
bsf ADCON0,2

; Esperamos que acabe la conversion

espera
btfsc ADCON0,2
goto espera

; Guardamos el valor despues de la conversion en la variable ls_adc.

banksel ADRESH
movf ADRESH,0 ; Despues de finalizar la conversion AD el valor en ADRESH se guarda en el Reg W
; y el valor en ADRESL se omite, esa precision no es necesaria.
banksel ls_adc
movwf ls_adc ; valor en W Reg. se escribe en la variable ls_adc
RETURN

Demora_20us
movlw 0x05
movwf Contador ; iniciamos contador
Repeticion
decfsz Contador,1 ; Decrementa Contador en 1
goto Repeticion ; Si no es cero repetimos el ciclo
RETURN



Alguna idea de como poder solventarlo?

Un saludo.
 
Me gustaría saber, si he cometido algún error de bulto en la programación, alguien podría revisarlo? es que no encuentro ningún fallo, pero el proteus no simula. Muchas gracias!
 
Alguien me podría facilitar una rutina de conversión A/D, para un pic16f877 a 4MHz, que le haya funcionado en simulación en proteus, para así poder compararla con la mía?

Gracias y un saludo.
 
Saludos co-workers. Llevo más de 24 horas tratando de echar a andar el ADC del PIC16F877. Me he leído toda la documentación del Datasheet del micro, así como algunas cosas que he visto en internet, pero no he resuelto, no encuentro nada explicado paso a paso, con código y configuración hecha, parece que es lo que necesito, nunca antes he tratado de usar el ADC. Hago todo lo que dice el datasheet
ADIE = 0; //Activando interrupción
PEIE = 0; //Activando interrupciones unmasked
GIE = 0; //Activando interrupciones generales

ADRESH = 0b.0000.0000;
ADRESL = 0b.0000.0000;

Luego vigilo la interrupcion ADIF, para ver si midio ya, y cuando suceda itento apagar un led del proyecto, pero nada. Hay cosas que no entiendo, por ejemplo:

bit 7-6 ADCS1:ADCS0: A/D Conversion Clock Select bits
00 = FOSC/2
01 = FOSC/8
10 = FOSC/32
11 = FRC (clock derived from the internal A/D module RC oscillator)


Para que hay que establecer este reloj?, y este tiempo es sobre mi reloj original, o sea tengo un cuarzo de 8Mhz, resultando mi ciclo Fosc/4, pero anteriormente en la tabla no dice eso, solo dice sobre 2, 8 y 32, no comprendo.
Lo otro que no entiendo es lo de los canales, he visto en la web en algunos ejemplos que la medición se realiza en un solo pin, entonces por qué lo de los canales?
bit 5-3 CHS2:CHS0: Analog Channel Select bits
000 = channel 0, (RA0/AN0)
001 = channel 1, (RA1/AN1)
010 = channel 2, (RA2/AN2)
011 = channel 3, (RA3/AN3)
100 = channel 4, (RA5/AN4)
101 = channel 5, (RE0/AN5)(1)
110 = channel 6, (RE1/AN6)(1)
111 = channel 7, (RE2/AN7)(1)
Y la última duda es sobre: bit 3-0 PCFG3:pCFG0: A/D Port Configuration Control bits:, pues si yo configure los canales, para que tengo que tocar esto entonces, además de, que si la medición se hace por un solo lugar, porque necesito entonces, tener tantas entradas Análogas?. Necesitaría por favor alguna documentación bien explicada paso a paso de esto, con el diagrama de ser posible. Gracias.
 

Adjuntos

  • proteus.jpg
    proteus.jpg
    97.9 KB · Visitas: 9
Atrás
Arriba