Quantcast
Channel: Forums - Recent Threads
Viewing all articles
Browse latest Browse all 262198

Accelerometer read

$
0
0

I am using a MSP430G2553 launchpad and an ADXL 335 accelerometer. The goal is to have the LEDs on the launchpad toggle whenever the accelerometer senses movement. I am able to get an initial read, and calibration done but I seem to be unable to trigger a new read. Below is the code. I do plan to use all three axese but I've coded the interrupt for just one axis thus far just for proof of concept. 

#include <msp430.h>
#include <stdint.h>
/*
* main.c
*/

void SetupACC(void);
void CalibrateACC(void);

unsigned int ADC_counter = 0;
unsigned int ADCResult_X, ADCResult_Y, ADCResult_Z;
unsigned int CalVal_X, CalVal_Y, CalVal_Z, temp;


int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

BCSCTL1 = CALBC1_16MHZ; // DCO = 16 MHz
DCOCTL = CALDCO_16MHZ;

unsigned int CV_x, ADC_x;

//Enable LEDs
P1OUT &= ~(BIT0 + BIT6);
P1DIR |= (BIT0 + BIT6);

//Accelerometer inputs
P1OUT &= ~(BIT3 + BIT4 + BIT5);
P1DIR &= ~(BIT3 + BIT4 +BIT5);
P1REN |= BIT3 + BIT4 + BIT5;
P1SEL |= BIT3 + BIT4 + BIT5;
P1SEL2 |= BIT3 + BIT4 + BIT5;

SetupACC();
CalibrateACC();

ADC10CTL0 |= ENC | ADC10SC;
__bis_SR_register(GIE);

CV_x = CalVal_X;
ADC_x = ADCResult_X;

while(1) {
if (CV_x > ADC_x)
P1OUT ^= BIT6;
else
P1OUT ^= BIT0;
}
}

void SetupACC(void) {
ADC10CTL0 &= ~ENC;
ADC10CTL0 = ADC10ON + ADC10SHT_2 + SREF_0;
ADC10CTL1 = SHS_0 + CONSEQ_0 + ADC10SSEL_0 + INCH_3;
ADC10AE0 |= BIT3;
ADC10CTL0 |= ADC10IE;

__enable_interrupt();
}

void CalibrateACC(void) {
uint16_t CalibCounter = 0;
unsigned int Value = 0;

__disable_interrupt();

ADC10CTL0 &= ~ENC;
ADC10CTL1 = SREF_0 + INCH_3;
while(CalibCounter < 50) {
P1OUT ^= BIT0;
CalibCounter++;
ADC10CTL0 |= ENC | ADC10SC;
while (ADC10CTL1 & BUSY);
Value += ADC10MEM;
}
CalVal_X = Value/50;
ADC10CTL0 &= ~ENC;
__enable_interrupt();
}

#pragma vector = ADC10_VECTOR
__interrupt void ADC10_ISR(void) {

if (ADC_counter == 0) {
ADC10CTL0 &= ~ENC;
ADC10CTL1 = SREF_0 + INCH_3;
ADCResult_X = ADC10MEM;
ADC10CTL0 |= ENC | ADC10SC;
}
ADC_counter = 0;
}


Viewing all articles
Browse latest Browse all 262198

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>