TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: hibiscusblau en 11 de Octubre de 2012, 06:46:39
-
Hola,
Hace días que me estoy peleando con el ADC de un dsPIC30f6013A. Como no sé si leo correctamente, creo que sí porqué es relativamente fácil. He encontrado que usando el simulador MPLAB SIM puedo ver los datos de salida del buffer.
Lo que hago es ir a Debugger --> Stimulus -> New Workbook.
En Register Injection, doy debajo la casilla Label y me aparece: (añado mi file), y le doy al Apply y Save
REG/VAL Trigger Width DataFilename Wrap Format Comments
ADCBUF0 Demand 2 MyData.txt Yes Hex (optional)
Donde MyData.txt:
0x0001
0x0080
0x03ff
0x0123
0x0273
My código en la interrupción del ADC es:
void __attribute__ ((__interrupt__, no_auto_psv)) _ADCInterrupt(void)
{
//AD Conversion complete interrupt handler
IFS0bits.ADIF = 0; // Clear ADC Interrupt Flag
ADResult3 = ADCBUF3; // Get the conversion result. Només vull del canal 0, sortida 3. No sé quin està bé, si aquest o el de dalt.
printf ("ADresult_dp %lf \n",(double) ADResult3);
}
Cuando le doy al debug, y play, me sale esto:
ADresult_dp 9223372036854775808000000000000.000000
ADresult_dp 9223372036854775808000000000000.000000
ADresult_dp 1353997238795814912000000000.000000
ADresult_dp 569452500845274316800000000000.000000
ADresult_dp 569452500845274316800000000000.000000
ADresult_dp 569452500845274316800000000000.000000
No me deberían salir los valores que hay en MyData.txt?
Qué hago mal?
Gracias!
-
He visto que si cambiaba la declaración de ADResult3 (mi variable donde guardo el ADCBUFF3) como:
unsigned int ADResult3
en lugar de:
float ADResult3
Me sale:
ADresult_dp 4656
ADresult_dp 10032
ADresult_dp 2048
ADresult_dp 16368
I si cojo estos valores (como DECIMALES) y los miro a HEXA, corresponden a:
OUT(DEC) HEX
4656-------1230
10032------2730
2048-------800
16368------3ff0
Esto se parece más a mi archivo MyData.txt:
0x0001
0x0080
0x03ff
0x0123
0x0273
Pero parece que estan desplazados 4 bits hacia la izquierda. Porqué hace esto? Y porqué no empieza por el 0x0001? este nunca lo coge!
Gracias
-
Ahora no me lo he mirado con atención, pero creo que puede venir de que está configurado el ADC tipo fractional, y tiene les 4 bits últimos a cero, tal y como muestra la imagen.
(http://www.todopic.com.ar/foros/imgtiny/177ho7.png)
-
Hace tiempo que no miro esto, pero creo que es porque en el tipo fractional.
(http://www.todopic.com.ar/foros/imgtiny/177ho7.png)