Lukman 1 Posted March 26, 2018 Share Posted March 26, 2018 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 Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.