Jump to content
43oh

Asking about 166Khz sampling rate on ADC12 bit on MSP430F6989


Recommended Posts

Hello,
Pardon for my direct approach.
I saw an example in Energia forum on Problem Sampling Rate MSP430F5529

May I know what is readADC();? Because you do not create any void called readADC(); on your sample code.

For right now I am trying implement it on MSP430F6989LP, which also has 12bit ADC.
Would you kind share with me?

I appreciate your help.

Thank you very much.

Best Regards,

 

Lukman


your  example code is as below:

 

#if defined(__MSP430_HAS_ADC12_PLUS__)
#define REFV_MAP(x) ((x>>8) & 0x70)
#define REF_MAP(x)  (x & 0xB1)
#define ADCxMEM0 ADC12MEM0 
#define DEFAULT_READ_RESOLUTION 12
#endif

#if defined(__MSP430_HAS_ADC12_PLUS__)
#define DEFAULT      (ADC12SREF_0 << 8)
#define INTERNAL1V5 ((ADC12SREF_1 << 8) | REFON | REFMSTR | REFVSEL_0)
#define INTERNAL2V0 ((ADC12SREF_1 << 8) | REFON | REFMSTR | REFVSEL_1)
#define INTERNAL2V5 ((ADC12SREF_1 << 8) | REFON | REFMSTR | REFVSEL_2)
#define EXTERNAL     (ADC12SREF_2 << 8)#endifuint16_t analog_reference = DEFAULT;
#define NUM_READS 10000

void setup() 
 {  
     Serial.begin(115200);  Serial.println("Setup done");  
     setupADC(A0);
 }
 uint32_t mark, time_it_took;
 uint16_t i;
 void loop() 
 {
     //  Serial.println(readADC());  
     mark = millis();  
     for(i = 0; i < NUM_READS; i++) 
     {   
       readADC();  
     }  
     Serial.print("Time: ");  
     Serial.println(millis() - mark);  
     Serial.println(readADC());
 }
 uint16_t setupADC(uint8_t pin) 
 {  
 uint8_t channel;  

// Check if pin is a special analog pin (A10 = temp sensor, A11 = Vcc/2, etc.)  
 if (pin >= 128)    channel = pin - 128;  
 else    channel = digitalPinToADCIn(pin);  // Check if pin is valid  if (pin == NOT_ON_ADC)    
 return 0;
 #if defined(__MSP430_HAS_ADC12_PLUS__)  
 ADC12CTL0 &= ~ADC12ENC;                 // disable ADC  
 ADC12CTL1 = ADC12SSEL_2 | ADC12DIV_0;   // ADC12OSC as ADC12CLK (~5MHz) / 5  
 while (REFCTL0 & REFGENBUSY);           // If ref generator busy, WAIT  
 if (pin == TEMPSENSOR) 
 {// if Temp Sensor    
     REFCTL0 = REF_MAP(INTERNAL1V5);               // Set reference to internal 1.5V    
     ADC12MCTL0 = channel | REFV_MAP(INTERNAL1V5); // set channel and reference  
 } 
  else 
 {    
     REFCTL0 = REF_MAP(analog_reference);          // Set reference using masking off the SREF bits. See Energia.h.   
     ADC12MCTL0 = channel | REFV_MAP(analog_reference); // set channel and reference  
 }  
 ADC12CTL0 = ADC12ON | ADC12SHT0_4;      // turn ADC ON; sample + hold @ 64 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...