Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ADC_spikes by
Diff: main.cpp
- Revision:
- 3:4c45267b653d
- Parent:
- 2:4c61969f2207
diff -r 4c61969f2207 -r 4c45267b653d main.cpp
--- a/main.cpp Fri Dec 02 11:42:51 2011 +0000
+++ b/main.cpp Fri Dec 02 13:51:06 2011 +0000
@@ -1,104 +1,115 @@
-#include "mbed.h"
-
-#define NUM_SAMPLES 500000 // size of sample series
-
-Serial pc(USBTX,USBRX);
-
-AnalogIn ain(p17);
-
-// initialise error counters
-int num_4;
-int num_8;
-int num_16;
-int num_32;
-int num_64;
-int num_128;
-int num_256;
-int num_512;
-int num_1024;
-int num_2048;
-
-
-int main() {
-
- pc.baud(115200);
-
- int num_samples = 0;
-
- num_4 = 0;
- num_8 = 0;
- num_16 = 0;
- num_32 = 0;
- num_64 = 0;
- num_128 = 0;
- num_256 = 0;
- num_512 = 0;
- num_1024 = 0;
- num_2048 = 0;
-
-// Take the average over 500,000 samples
-// This is because the bias to 1.65v has a tolerance
- float AVERAGE = 0.5;
-
- pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
- while (num_samples < NUM_SAMPLES) {
- float r = ain.read();
-
- if ((r > 0.45) && (r < 0.55)) {
- AVERAGE += r;
- num_samples++;
- }
- }
-
- AVERAGE /= NUM_SAMPLES;
-
- num_samples = 0;
- pc.printf("Average = %f\n",AVERAGE);
-
-
-// Now start sampling series of 500,000
-// acculumating the errors seen in each range
- while (1) {
-
- for (int i = 0; i < NUM_SAMPLES ; i++) {
- float a = ain.read();
-
- if (a > (AVERAGE + 0.5000)) {
- num_2048++; // > 2048 lsb
- } else if (a > (AVERAGE + 0.2500)) {
- num_1024++; // > 1024 lsb
- } else if (a > (AVERAGE + 0.0625)) {
- num_512++; // > 512 lsb
- } else if (a > (AVERAGE + 0.0312)) {
- num_256++; // > 256 lsb
- } else if (a > (AVERAGE + 0.0312)) {
- num_128++; // > 128 lsb
- } else if (a > (AVERAGE + 0.0156)) {
- num_64++; // > 64 lsb
- } else if (a > (AVERAGE + 0.0078)) {
- num_32++; // > 32 lsb
- } else if (a > (AVERAGE + 0.0039)) {
- num_16++; // > 16 lsb
- } else if (a > (AVERAGE + 0.0019)) {
- num_8++; // > 8 lsb
- } else if (a > (AVERAGE + 0.0009)) {
- num_4++; // > 8 lsb
- }
-
- num_samples++;
- }
-
- // Every 500,000 print the results
- pc.printf("%d\t",num_samples);
- pc.printf("%d\t",num_4);
- pc.printf("%d\t",num_8);
- pc.printf("%d\t",num_16);
- pc.printf("%d\t",num_32);
- pc.printf("%d\t",num_64);
- pc.printf("%d\t",num_128);
- pc.printf("%d\t",num_256);
- pc.printf("%d\t",num_512);
- pc.printf("%d\t",num_1024);
- pc.printf("%d\n",num_2048);
- }
-}
+#include "mbed.h"
+
+#define NUM_SAMPLES 500000 // size of sample series
+#define SAMPLE_BLOCKS 5
+
+Timer t;
+
+Serial pc(USBTX,USBRX);
+
+AnalogIn ain(p20);
+
+// initialise error counters
+int num_4;
+int num_8;
+int num_16;
+int num_32;
+int num_64;
+int num_128;
+int num_256;
+int num_512;
+int num_1024;
+int num_2048;
+
+
+int main() {
+
+ pc.baud(115200);
+
+ int num_samples = 0;
+
+ num_4 = 0;
+ num_8 = 0;
+ num_16 = 0;
+ num_32 = 0;
+ num_64 = 0;
+ num_128 = 0;
+ num_256 = 0;
+ num_512 = 0;
+ num_1024 = 0;
+ num_2048 = 0;
+
+// Take the average over 500,000 samples
+// This is because the bias to 1.65v has a tolerance
+ float AVERAGE = 0.5;
+
+ pc.printf("Taking an average over %d samples\n",NUM_SAMPLES);
+ while (num_samples < NUM_SAMPLES) {
+ float r = ain.read();
+
+ if ((r > 0.45) && (r < 0.55)) {
+ AVERAGE += r;
+ num_samples++;
+ }
+ }
+
+ AVERAGE /= NUM_SAMPLES;
+
+ num_samples = 0;
+ pc.printf("Average = %f\n",AVERAGE);
+
+
+// Now start sampling series of 500,000
+// acculumating the errors seen in each range
+ pc.printf("Profiling %d samples\n",SAMPLE_BLOCKS*NUM_SAMPLES);
+ for (int j=0; j < SAMPLE_BLOCKS ; j++) {
+
+ t.reset();
+ t.start();
+
+ for (int i = 0; i < NUM_SAMPLES ; i++) {
+ float a = ain.read();
+
+ if (a > (AVERAGE + 0.5000)) {
+ num_2048++; // > 2048 lsb
+ } else if (a > (AVERAGE + 0.2500)) {
+ num_1024++; // > 1024 lsb
+ } else if (a > (AVERAGE + 0.0625)) {
+ num_512++; // > 512 lsb
+ } else if (a > (AVERAGE + 0.0312)) {
+ num_256++; // > 256 lsb
+ } else if (a > (AVERAGE + 0.0312)) {
+ num_128++; // > 128 lsb
+ } else if (a > (AVERAGE + 0.0156)) {
+ num_64++; // > 64 lsb
+ } else if (a > (AVERAGE + 0.0078)) {
+ num_32++; // > 32 lsb
+ } else if (a > (AVERAGE + 0.0039)) {
+ num_16++; // > 16 lsb
+ } else if (a > (AVERAGE + 0.0019)) {
+ num_8++; // > 8 lsb
+ } else if (a > (AVERAGE + 0.0009)) {
+ num_4++; // > 8 lsb
+ }
+
+ num_samples++;
+ }
+ t.stop();
+
+ // Every 500,000 print the results
+ pc.printf("%d\t",num_samples);
+ pc.printf("%d\t",num_4);
+ pc.printf("%d\t",num_8);
+ pc.printf("%d\t",num_16);
+ pc.printf("%d\t",num_32);
+ pc.printf("%d\t",num_64);
+ pc.printf("%d\t",num_128);
+ pc.printf("%d\t",num_256);
+ pc.printf("%d\t",num_512);
+ pc.printf("%d\t",num_1024);
+ pc.printf("%d\t",num_2048);
+ pc.printf("%f\n",t.read());
+ }
+
+ pc.printf("==== Test Complete ====\n");
+}
