TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Rikr09 en 23 de Agosto de 2014, 12:36:24
-
Saludos amigos de Todopic,
LLevo tiempo trabajando con los PIC24 usando los pines análogos para lectura de variables externas; pero siempre he tenido un inconveniente que hasta el momento no he podido solucionar: " Lecturas diferentes de un mismo valor de entrada de voltaje", estoy usando un PIC24FJ128GB110 con una entrada que varía de 0-10V (Tengo divisor de voltaje), el VCC es 3.7V y los voltajes de referencia para el módulo de análogo son GND y éste VCC.
De esto último digo y me dicen si estoy mal: Resolución 1024-->3.7V, de ahí en adelante los valores leídos los calculo Number=(0.00361328125*a); Esto veamoslo en el método que uso cada vez que hago la lectura:
void readADCANA0(int ch,int type){
float Number;
unsigned int a=0,b=0;
Decenas=0;Unidades=0;Decimas=0;Centesimas=0; Milesimas=0;
AD1CHS = ch; // Seleccion del canal analogo
AD1CON1bits.SAMP = 1; // comenzar muestreo
delay_52us();
AD1CON1bits.SAMP = 0;
while (!AD1CON1bits.DONE); // esperar a que se complete la transmision
a=ADC1BUF0;
Number=(0.00361328125*a); // multiplicar por 3.3/1024
b=(Number*10000)/1;
b=(unsigned int)b;
AnalogInt = b;
//-----------------------------------------------------------------------------
while(b>9999){b=b-10000;Decenas++;};
while(b>999){b=b-1000;Unidades++;}
while(b>99){b=b-100;Decimas++;}
while(b>9){b=b-10;Centesimas++;}
Milesimas=b;
ADC1BUF0=0;
}
El método de inicialización es:
void initADC(){
// AD1PCFG = 0xFFEE; // select analog input pins. zeros are the analog input.
// Config for Explorer16. 0b 1111 1111 1100 1111
// Config for Modem GPRS. 0b 1111 1111 1110 1110
AD1PCFG = 0xFFEE;
AD1CON1 = 0x00E0; // manual conversion sequence control
AD1CSSL = 0; // no scanning required
AD1CON3 = 0x1F02; // Tad = 2 x Tcy = 125ns >75ns
AD1CON2 = 0; // use MUXA, AVss and AVdd are used as Vref+/-
AD1CON1bits.ADON = 1; // turn on the ADC
}
Con base a lo anterior, cada ve que leo por ejemplo una entrada de 1.35V (mostrada en multimetro) el resultado que obtengo de la conversión es 1.1, 900mV, 1.3v, 1.25v y así.... y creo que coincidimos todos que no es la idea.
Espero que por favor me ayuden con esto...
Gracias!!!!!!!
-
Vcc es 3.7V ??? :shock:
No es máximo 3.6 el voltaje del microcontrolador y 3.3V lo nominal. :shock:
¿O estoy mal?
-
Vcc es 3.7V ??? :shock:
No es máximo 3.6 el voltaje del microcontrolador y 3.3V lo nominal. :shock:
¿O estoy mal?
El Micro soporta hasta 4V, por ende mi voltaje esta en 3.7V ya que por requerimientos de un modulo PRS que estoy usando necesito que el voltaje sea de 3.7V minimo.
Gracias por tu anotación.
-
¿y dónde leiste eso?
Operating Voltage Range (V) 2 to 3.6
http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC24FJ128GB110
Yo leo algo diferente en la hoja de datos, página 313:
http://ww1.microchip.com/downloads/en/DeviceDoc/39897c.pdf
-
Lo vi en al página 311:
Si gustas puedes ver la imagen AQUI (https://www.dropbox.com/s/cepmhbtlh5d4ut2/Imagen.jpg?dl=0)
-
Lo vi en al página 311:
Si gustas puedes ver la imagen AQUI (https://www.dropbox.com/s/cepmhbtlh5d4ut2/Imagen.jpg?dl=0)
Esos los valores absolutos máximos a los que puede funcionar, lo recomendable es nunca llegar a esos límites, lee la recomendación que dice más abajo:
"†NOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent damage to the
device. This is a stress rating only and functional operation of the device at those or any other conditions above those
indicated in the operation listings of this specification is not implied. Exposure to maximum rating conditions for
extended periods may affect device reliability."
"La exposición a las condiciones máximas de calificación para
largos períodos de tiempo pueden afectar la fiabilidad del dispositivo"
Trabajando en los límites de operación puede resultar en condiciones erráticas o que no se pueden determinar.
Deberías trabajar dentro del rango que te sugiere el fabricante. Por alguna razón dice hasta 3.6, 4 voltios no es garantía de funcionamiento correcto del PIC
-
Si es cierto eso, yo tuve en cuenta eso pero ... si lo bajo a 3.6V sacrifico el modulo GPRS. AHora bien, aun cuando coloco el voltaje a 3.3V ... continuo con el mismo problema tema base de este foro :( ...
-
¿Y porqué no trabajar tu GPRS a 3.6V y tu micro a 3.3V?
Si se comunican entre ellos de alguna manera puedes poner resistencias de 100 a 330 ohmios, para que los niveles de 3.6 dañen al PIC.
Me imagino que el GPRS si ve como 1 lógico niveles de 3,3V.
Un discusión interesante en el foro de MCHP sobre los 3.7V
http://www.microchip.com/forums/m590644.aspx
-
Gracias. Si eso ya lo soluciono con el nuevo diseño usando otro regulador LDO con una Iq pequeña.
Pero me asunto de la lectura análoga no se soluciona con esto :( ....
-
Creo que deberías primero probar lo del ADC con un nivel de volataje VCC correcto y tal vez con otro PIC24, posiblemente ya este algo dañado el que estaba trabajando a 3.7V.
Si no funciona, es posible que el tiempo de adquisición o conversión del ADC sea muy rápido y no alcance a terminar la conversión. Podrías aumentar el tiempo de muestreo (delay_52us();) para ver que sucede.
Podrías hacer una trampa modificando cada valor medido, es decir multiplicar por una constante el resultado para obtener el valor deseado, suponeidno que el error es lineal.
Caso contrario te tocaría hacer una tabla (un vector con constantes de 1024 valores] para cada valor medido.
-
Y como esta tu hardware? Puede ser un problema de ruido en la entrada del PIC.
-
Y como esta tu hardware? Puede ser un problema de ruido en la entrada del PIC.
esa también es una buena sugerencia. Podrías poner un capacitor de 0.1 uF a 1 UF para determinar si mejora tu medición de voltaje.
-
:-/ Buena sigerencia ... el problem es que la tarjeta ya esta montada... Voy a ver que puedo hacer... Gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PD: Les estaré comentando al respecto...