EmbeddedRelated.com
Forums

ADC10 on 2274

Started by "Hoelzer, Kristen L (S&T-Student)" November 17, 2008
Hi, I have been trying to use my MSP430-rf2500 to read an analog voltage input and send the data wirelessly to the other MSP430-rf2500, similar to the Temperature sensor program. It has not been working, so I downloaded the following example code released by TI to the device and discovered that no matter what voltage I apply to pin 3 (including 0V), the red LED stays on. Why would this be happening?

//******************************************************************************
// MSP430F22x4 Demo - ADC10, Sample A0, 1.5V Ref, Set P1.0 if A0 > 0.2V
//
// Description: A single sample is made on A0 with reference to internal
// 1.5V Vref. Software sets ADC10SC to start sample and conversion - ADC10SC
// automatically cleared at EOC. ADC10 internal oscillator times sample (16x)
// and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC10
// conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on
// reti. If A0 > 0.2V, P1.0 set, else reset.
//
// MSP430F22x4
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// >---|P2.0/A0 P1.0|-->LED
//
// A. Dannenberg
// Texas Instruments Inc.
// April 2006
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x22x4.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
TACCR0 = 30; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // Compare-mode interrupt.
TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode.
__bis_SR_register(CPUOFF + GIE); // LPM0, TA0_ISR will force exit
TACCTL0 &= ~CCIE; // Disable timer Interrupt
ADC10AE0 |= 0x01; // P2.0 ADC option select
P1DIR |= 0x01; // Set P1.0 to output direction
for (;;)
{
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
if (ADC10MEM < 0x88) // ADC10MEM = A0 > 0.2V?
P1OUT &= ~0x01; // Clear P1.0 LED off
else
P1OUT |= 0x01; // Set P1.0 LED on
}
}
// ADC10 interrupt service routine
#pragma vectorC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TA0_ISR(void)
{
TACTL = 0;
LPM0_EXIT; // Exit LPM0 on return
}

Beginning Microcontrollers with the MSP430

Hi,you can try again by adding :P2DIR &=~BIT0;P2SEL |=BIT0;

I think you have not enable the Analog input Function.....









2008-11-18







Hoelzer, Kristen L (S&T-Student)

ʱ䣺 2008-11-18 05:23:21

m...



[msp430] ADC10 on 2274





Hi, I have been trying to use my MSP430-rf2500 to read an analog voltage input and send the data wirelessly to the other MSP430-rf2500, similar to the Temperature sensor program. It has not been working, so I downloaded the following example code released by TI to the device and discovered that no matter what voltage I apply to pin 3 (including 0V), the red LED stays on. Why would this be happening?



//******************************************************************************

// MSP430F22x4 Demo - ADC10, Sample A0, 1.5V Ref, Set P1.0 if A0 > 0.2V

//

// Description: A single sample is made on A0 with reference to internal

// 1.5V Vref. Software sets ADC10SC to start sample and conversion - ADC10SC

// automatically cleared at EOC. ADC10 internal oscillator times sample (16x)

// and conversion. In Mainloop MSP430 waits in LPM0 to save power until ADC10

// conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on

// reti. If A0 > 0.2V, P1.0 set, else reset.

//

// MSP430F22x4

// -----------------

// /|\| XIN|-

// | | |

// --|RST XOUT|-

// | |

// >---|P2.0/A0 P1.0|-->LED

//

// A. Dannenberg

// Texas Instruments Inc.

// April 2006

// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A

//******************************************************************************

#include "msp430x22x4.h"

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;

TACCR0 = 30; // Delay to allow Ref to settle

TACCTL0 |= CCIE; // Compare-mode interrupt.

TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode.

__bis_SR_register(CPUOFF + GIE); // LPM0, TA0_ISR will force exit

TACCTL0 &= ~CCIE; // Disable timer Interrupt

ADC10AE0 |= 0x01; // P2.0 ADC option select

P1DIR |= 0x01; // Set P1.0 to output direction

for (;;)

{

ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start

__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit

if (ADC10MEM < 0x88) // ADC10MEM = A0 > 0.2V?

P1OUT &= ~0x01; // Clear P1.0 LED off

else

P1OUT |= 0x01; // Set P1.0 LED on

}

}

// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)

{

__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)

}

#pragma vector=TIMERA0_VECTOR

__interrupt void TA0_ISR(void)

{

TACTL = 0;

LPM0_EXIT; // Exit LPM0 on return

}








According to the data-sheet, the P2.0/ACLK/A0/OAI0 pin is used as
analog input whenever ADC10AE0.0 bit is 1. In such a situation,
P2DIR.0 and P2SEL.0 are both ignored.

--- In m..., "380121850" <380121850@...> wrote:
>
> Hi,you can try again by adding :P2DIR &=~BIT0;P2SEL |=BIT0;
> I think you have not enable the Analog input Function.....
>
>
>
>
> 2008-11-18
>
>
>
> ウ Hoelzer, Kristen L (S&T-Student)
> ʱ䣺 2008-11-18 05:23:21
> ウ m...
>
> [msp430] ADC10 on 2274
>
>
> Hi, I have been trying to use my MSP430-rf2500 to read an analog
voltage input and send the data wirelessly to the other MSP430-rf2500,
similar to the Temperature sensor program. It has not been working, so
I downloaded the following example code released by TI to the device
and discovered that no matter what voltage I apply to pin 3 (including
0V), the red LED stays on. Why would this be happening?
>
>
//******************************************************************************
> // MSP430F22x4 Demo - ADC10, Sample A0, 1.5V Ref, Set P1.0 if A0 > 0.2V
> //
> // Description: A single sample is made on A0 with reference to internal
> // 1.5V Vref. Software sets ADC10SC to start sample and conversion -
ADC10SC
> // automatically cleared at EOC. ADC10 internal oscillator times
sample (16x)
> // and conversion. In Mainloop MSP430 waits in LPM0 to save power
until ADC10
> // conversion complete, ADC10_ISR will force exit from LPM0 in
Mainloop on
> // reti. If A0 > 0.2V, P1.0 set, else reset.
> //
> // MSP430F22x4
> // -----------------
> // /|\| XIN|-
> // | | |
> // --|RST XOUT|-
> // | |
> // >---|P2.0/A0 P1.0|-->LED
> //
> // A. Dannenberg
> // Texas Instruments Inc.
> // April 2006
> // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version:
3.41A
>
//******************************************************************************
> #include "msp430x22x4.h"
> void main(void)
> {
> WDTCTL = WDTPW + WDTHOLD; // Stop WDT
> ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
> TACCR0 = 30; // Delay to allow Ref to settle
> TACCTL0 |= CCIE; // Compare-mode interrupt.
> TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode.
> __bis_SR_register(CPUOFF + GIE); // LPM0, TA0_ISR will force exit
> TACCTL0 &= ~CCIE; // Disable timer Interrupt
> ADC10AE0 |= 0x01; // P2.0 ADC option select
> P1DIR |= 0x01; // Set P1.0 to output direction
> for (;;)
> {
> ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
> __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
> if (ADC10MEM < 0x88) // ADC10MEM = A0 > 0.2V?
> P1OUT &= ~0x01; // Clear P1.0 LED off
> else
> P1OUT |= 0x01; // Set P1.0 LED on
> }
> }
> // ADC10 interrupt service routine
> #pragma vector=ADC10_VECTOR
> __interrupt void ADC10_ISR(void)
> {
> __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
> }
> #pragma vector=TIMERA0_VECTOR
> __interrupt void TA0_ISR(void)
> {
> TACTL = 0;
> LPM0_EXIT; // Exit LPM0 on return
> }
>
>
>
>
>
>
>