TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: CapBlack en 07 de Febrero de 2010, 14:59:35
-
Hola a todos:
Estoy usando cuatro canales para medir diferentes gyros y accelerometros :( con ADC12 de un dspic 30f4013 veo por la pc usando el rs232 que determinado numero de converciones la muestra cae a 0 o cerca de este ,alguien me podria decir que estoy haciendo mal ?
este es my clock
_FOSC(CSW_FSCM_OFF & HS2_PLL16); //24 MHZ
_FWDT(WDT_OFF);
_FBORPOR( PBOR_OFF & // brown out off
MCLR_EN & PWRT_OFF)
_FGS(CODE_PROT_OFF);
#define PeriodoPWM 0x200 // 50Hz
#define FCY 24000000
#define BAUDRATE 38400 //19200 --- 9600
#define BRGVAL ((FCY/BAUDRATE)/16)-1
este es el codigo del adc :
OpenADC12(ADC_MODULE_ON & ADC_IDLE_CONTINUE & ADC_FORMAT_INTG & ADC_CLK_AUTO & ADC_AUTO_SAMPLING_ON& ADC_SAMP_OFF,
ADC_VREF_EXT_EXT & ADC_SCAN_ON & ADC_SAMPLES_PER_INT_4 & ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF,
ADC_SAMPLE_TIME_31 & ADC_CONV_CLK_SYSTEM & ADC_CONV_CLK_32Tcy,
ENABLE_ALL_DIG & ENABLE_AN9_ANA & ENABLE_AN10_ANA & ENABLE_AN11_ANA & ENABLE_AN12_ANA,
SCAN_ALL & SKIP_SCAN_AN0 & SKIP_SCAN_AN1 & SKIP_SCAN_AN2& SKIP_SCAN_AN3& SKIP_SCAN_AN4& SKIP_SCAN_AN5&
SKIP_SCAN_AN6& SKIP_SCAN_AN7& SKIP_SCAN_AN8& SKIP_SCAN_AN13&
SKIP_SCAN_AN14& SKIP_SCAN_AN15);
ConfigIntADC12(ADC_INT_PRI_6 & ADC_INT_ENABLE);
esta es la interrupcion:
void __attribute__((__interrupt__,auto_psv)) _ADCInterrupt(void)
{
array[count] = ADCValue = ADCBUF0;
arrax[count] = ADCValue1 = ADCBUF1;
gyrox[count] = gyro = ADCBUF2;
gyroy[count] = gyroroll = ADCBUF3;
count ++;
if (count < cont_sens)
{
temp1 = temp1 + ADCValue ;
temp2 = temp2 + ADCValue1 ;
temp3 = temp3 + gyro ;
temp4 = temp4 + gyroroll;
flag = 0;
}
else
count = 0;
IFS0bits.ADIF=0;
}
muchas gracias.
-
No sera porque no le das un tiempo para que se valide el muestreo?
-
Imagino que habrás hecho la prueba colocando simples potenciómetros en las entradas ADC y también te cae a 0, ¿verdad?
-
Lo más probable es que estés leyendo a destiempo el gyro o el acelerómetro, sin darle tiempo a recuperarse de otra lectura al ADC.
SAlu2
-
Ante todo Gracias por las respuestas , ya casi probe de todo , el muestreo esta en auto con el maximo tiempo posible "sample 31 tad y adc conv 32" estoy con un clock de 24mhz , el maximo clock para este micro es 30mhz asi que no viene por alli el problem , las tensiones las comprobe con valores fijos de resistencias y con los sensores puedo ver en el osciloscopio que la tension no cae en ningun momento , en algun momento pense que el codigo dentro de la interrupcion tomaba demasiado tiempo pero veo en el osciloscopio que no es asi , entre interrupciones tengo unos 320us y dentro estoy solo 4us . tambien tengo chequeada la referencia de tension externa con un estabilizador de
5v a 3.3v exclusivo para esta entrada :?
por otro lado he comprobado que si redusco el tiempo de muestreo el problema empeora , el minimo tiempo segun el datasheet es de 334nsec x 4 entradas tendria que ser 1.336 usec y veo alli 320usec entre interupcion.
El mayor problema de estos misteriosos baches es que desestabiliza la integracion entre el gyro y el accelero. :?
Gracias.
-
Hola CapBlack, quisiera saber si ya has solucionado el problema, a mi también se me presenta algo similar con el ADC. Si es el caso que si, sería mucho pedir que postearas como lo has solución o como llegaste a la solución, en el foro. De antemano gracias.