Problema con conversor A/D dspic

Hola gente, estoy haciendo un proyecto y tengo un problema con el conversor A/D.
El problema es el siguiente, solo quiero tester el valor de una señal de continua, pero cuando conecto dicha tensión a testear, en la entrada analógica del pic me pone un cero o aproximadamente. Y no se cual es el problema. Alguien sabe cual puede ser el inconveniente?
Como aclaración la tensión de alimentación es de 5V y la tensión que quiero media es sobre una resistencia, mediante un divisor resistivo. Las resistencias son de 2k2.
La configuración creo que esta bien, porque use una que aparece en los ejemplos de las hojas de datos. Probé utilizando varias entradas y con todas tengo el mismo problema.
desde ya, muchas gracias.
Saludos.
 
hola, gracias por responder. El esquema es el adjunto.
La alimentación es de 5V.
Obtengo valores de adquision y son 6 o 7, casi cero, que concuerda con lo que
veo en el tester sobre el PIN_AN2.
Saludos
 

Adjuntos

  • Esquema.jpg
    Esquema.jpg
    95.8 KB · Visitas: 24
Obtengo valores de adquision y son 6 o 7, casi cero, que concuerda con lo que
veo en el tester sobre el PIN_AN2.

Ok, si pasa lo de arriba es que el pin probablemente esté configurado como salida y puesto a 0V. Quizás ese es el estado por default.
Configuraste bien el puerto? -> fijate en sección 17.5 y subsiguientes del manual del programador (es para dspic30f, no se cual estas usando):
http://ww1.microchip.com/downloads/en/DeviceDoc/70157C.pdf
Para poder ser más preciso tendrías que poner el código que maneja al ADC.
Saludos
 
Hola gente, estuve desconectado del proyecto, ahora regreso a la carga.
No pude solucionar todavia el problema con el conversor A/D. El codigo es el siguiente.
La configuracion de los registros es la recomenda en el ejemplo de la hoja de datos.

//////////// registro de control ADCON1 /////////

ADCON1bits.ADON = 0;
ADCON1bits.ADSIDL = 0;
ADCON1bits.FORM = 0b00;
ADCON1bits.SSRC = 0B111;
ADCON1bits.SIMSAM = 1;
ADCON1bits.ASAM = 1;

//ASCON1bits.SAMP = 1

//////////// registro de control ADCON2 /////////
//ADCON2 = 0x0000
ADCON2bits.VCFG = 0b000;
ADCON2bits.CSCNA = 0;
ADCON2bits.CHPS = 0B00;
ADCON2bits.SMPI = 0b0000;
ADCON2bits.BUFM = 0;

//////////// registro de control ADCON3 /////////
//ADCON3 = 0x0F01
ADCON3bits.SAMC = 0b01111;
ADCON3bits.ADRC = 0;
ADCON3bits.ADCS = 0b000001;

//registro de seleccion de los canales de entrada
ADCHS= 0x0002; // SELECCIONO EL CANAL RB2/AN2

//registro de configuracion de puertos
ADPCFG=0XFFFB; //TODOS LOS PINES SON GIGITALES, EL RB2 ANALOGICA

//registro de seleccion de entrada de escaneo
ADCSSL=0X0000;


ADCON1bits.ADON = 1; // turn ADC ON
while (1)
{
ADCON1bits.SAMP = 1; // start sampling then ...
while (!ADCON1bits.DONE); // conversion done?
ADCValue = ADCBUF0; // yes then get ADC value
//DatosArray[indice] = ADCValue;
indice = indice + 1;
U2TXREG = ADCValue;
}

Ahora tengo otro problema, es que solo puedo hacer funcionar correctamente la comunicacion con la pc a 9600bps, cuando quiero utilizar velocidades mayores los datos enviados son erroneos, alguien sabe cual puede ser el problema?
gracias.
 
Me equivoqué con el link de arriba, que debería ser:
http://ww1.microchip.com/downloads/en/DeviceDoc/70046D.pdf

¿Cual dspic estás usando? -> no sé si estamos hablando de un conversor de 10 o 12 bits. Son parecidos pero algunas cosas cambian. Voy a suponer que estás usando uno de 10 bits, por lo que veo de los registros usados.

Con respecto al conversor, hay una sola entrada analógica, así que la configuración debería ser la más sencilla (nada de secuencias de conversión, triggers complicados).
Deberías configurar los registros en el orden que dicen los ejemplos en vez de registro por registro, por las dudas. Si bien veo que tenés el cuidado de no poner ADON=1 hasta el final, el orden es una fuente de posibles problemas que se puede evitar.

Veo que ASAM = 1, esto hace que el muestreo sea automático. Me parece contradictorio que para iniciar la conversión utilices
ADCON1bits.SAMP = 1; // start sampling then ...

Una cosa es la operación de muestreo (conectar uno de los canales analógico a la única entrada del conversor SAR y empezar a cargar el capacitor de sample/hold) y otra cosa es la operación de conversión (el SAR convierte lo que sea que haya a su entrada).

Entiendo que tu caso es como el de la página 408 del link (es decir: hay que iniciar el muestreo con SAMP = 1, se espera el tiempo establecido por SAMC, se inicia/dispara la conversión en forma automática porque SSRC = 111, y luego de la conversión el bit DONE = 1.

Pero el problema creo que es que ASAM=1. En ese caso deberías guiarte por el ejemplo de la página 409.
La diferencia es que en el ejemplo anterior uno controla la conversión con el bit SAMP, y que con ASAM = 1 uno deja que el módulo haga muestreo todo el tiempo y uno sabe que se terminó una conversión por IFS0bit.ADIF.

En fin, para empezar simple te diría que uses ASAM = 0 y a lo mejor no tenés que cambiar ninguna otra cosa.

/////////////////////////
En cuanto a la comunicación con la PC, si querés mandar los datos a otra velocidad tenés que configurar el baud rate del módulo uart de modo acorde. Fijate en las tablas de la página 495, entrá con el Fcy que tengas configurado y el baudrate deseado, y de ahí sacás el valor de BRG.

Suerte!!!
 
Atrás
Arriba