Actualmente estoy intentando leer un valor de ADC10MEM y convertirlo en un valor utilizable para procesar. Sin embargo, el valor que estoy recibiendo (valor aleatorio) no es lo que se anticipó (aproximadamente 0.1 voltios). El error puede estar en mi conversión de ADC10MEM a mi valor. Cualquier ayuda es muy apreciada!
unsigned int value = 0;
double accurateValue = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE + REFON;
/*
* ADC10CTL0:
*
* ADC10SHT_3 => SampleHoldTime: "64 x ADC10CLKs"
* ADC10ON => ADC10: "ADC10 On/Enable"
* ADC10IE => Interrupts: "ADC10 Interrupt Enabled"
* REFON => Internal Ref: "ADC10 Internal Ref On"
* REF2_5V => Ref Volt: "ADC10 Ref 0: 1.5V"
*
*/
ADC10AE0 |= 0x01;
/*
* ADC10AE0 => Channel: "P2.0" (board pin 3)
*/
for (;;)
{
ADC10CTL0 |= ENC + ADC10SC;
/*
* ENC => "ADC10 Enable Conversion"
* ADC10SC => "ADC10 Start Conversion"
*/
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
/*
* ADC10MEM:
*
* Conversion:
*
* Nadc = 1023 * (Vin - Vr-) / ( Vr+ - Vr- )
*
* Vin = ( Nadc * (Vr+ - Vr-) / 1023 ) + Vr-
*
* Assuming Vr- == 0;
*
* Vin = Nadc * 1.5 / 1023
*
*/
value = ADC10MEM * 15 / 1023; // 15 instead of 1.5 (using integers)
accurateValue = ( (float)value ) / 10; // actual value (type double)
}
}
- La entrada debe estar entre 0.1 mV y 1 V
Requisitos adicionales
- Dispositivos: MSP430F2274, eZ430-rf2500, eZ430-rf2500T
- IDE: CCS V6.1
- Hoja de datos de MSP430F22x4
- Guía del usuario de la familia MSP430x2xx
- Código de ejemplo de TI: http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slac123&fileType=zip