Quantcast
Channel: MSP430 Technical Forums
Viewing all articles
Browse latest Browse all 2077

CC3200 Energia ADC timer/timestamp

$
0
0

Hi,

 

I am trying to get the ADC sample timestamp on Energia, but I can not figure it out how it works. 

 

From the TI API I know that the ADC data saved on the register is made by two parts.


  • bits [13:0] : ADC sample

  • bits [31:14]: time stamp per ADC sample


 

So I took the Energia library. From <driverlib/adc.h> and I found a method that returns only the time stamp.

//*****************************************************************************
//
//! Gets the current value of ADC internal timer
//!
//! \param ulBase is the base address of the ADC
//!
//! This function the current value of 17-bit ADC internal timer
//!
//! \returns Return the current value of ADC internal timer.
//
//*****************************************************************************
unsigned long ADCTimerValueGet(unsigned long ulBase)
{
  return(HWREG(ulBase + ADC_O_adc_timer_current_count));
}

So I have modified the wiring_analog.c library:

uint16_t analogRead(uint8_t pin)
{
    uint16_t channel, val;
    uint16_t pinNum = digitalPinToPinNum(pin);

    switch(pinNum) {
        case PIN_57: {channel = ADC_CH_0;}break;
        case PIN_58: {channel = ADC_CH_1;}break;
        case PIN_59: {channel = ADC_CH_2;}break;
        case PIN_60: {channel = ADC_CH_3;}break;
        default: return 0;
    }

    while(ADCFIFOLvlGet(ADC_BASE, channel)) { // flush the channel's FIFO if not empty
        ADCFIFORead(ADC_BASE, channel);
    }

    PinTypeADC(pinNum,0xFF);
    ADCChannelEnable(ADC_BASE, channel);
    ADCTimerConfig(ADC_BASE,2^17);
    ADCTimerEnable(ADC_BASE);
    ADCEnable(ADC_BASE);
    


    while(!ADCFIFOLvlGet(ADC_BASE, channel));
    val = ADCFIFORead(ADC_BASE, channel) & 0x3FFF;

    // ***** TIME STAMP FIELD ****

    timestamp = ADCTimerValueGet(ADC_BASE);

    // ***** TIME STAMP FIELD ****

    ADCDisable(ADC_BASE);
    ADCChannelDisable(ADC_BASE, channel);
    ADCTimerDisable(ADC_BASE);

    val = val >> 2;
    return val;
}

// Return the ADC sample time stamp
unsigned long ADCGetTime()
{
	return timestamp;
}

And this is my test sketch 

#include <wiring_analog.c>
 

int sensorPin = 2;    // select the input pin for the potentiometer
uint16_t long sensorValue[5] = {0};  // variable to store the value coming from the sensor
unsigned long time[5] = {0};

unsigned long m = 0;
unsigned int seconds = 0;
unsigned int minutes = 0;
unsigned int hours = 0;

void setup() 
{
  Serial.begin(115200);
}

void loop() {
  // read the value from the sensor:
  
  for (int i = 0; i< 5; i++)
  {
    sensorValue [i] = analogRead(sensorPin);
    time[i] = ADCGetTime();
    
    delay(1);
  }
  
  for(int i = 0; i < 5; i++)
  {
    
    minutes = ( time[i] / 1000 / 60);
    seconds = ( time[i] / 1000) % 60;
    m = ( time[i] % 100);
    
    Serial.println("ADC VALUE: ");
    Serial.print(sensorValue[i]);
    
    Serial.print(" --- TIME STAMP: ");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print(":");
    Serial.println(m);
    
    Serial.print("\n");
  }
  
  delay(5000); 
}

The problem is that the value of the variable time do not change. It's always the same.

 

What is wrong with my test sketch? How can I access to the time stamp of my samples?

 

Thank you in advance.

 

 


Viewing all articles
Browse latest Browse all 2077

Trending Articles