![](/media/cache/profiles/96ca380944ef93cb4431b3a8045aa864.jpg.50x50_q85.jpg)
WIZwiki W7500 ADC Performance Meter
Dependencies: SDFileSystem STATIC_COLORS WIZnetInterface mbed
Fork of WIZwiki-W7500_ADC_Sampling by
Revision 4:9b3e3c52778a, committed 2016-07-10
- Comitter:
- Fo170
- Date:
- Sun Jul 10 15:23:53 2016 +0000
- Parent:
- 3:cc86b144837b
- Commit message:
- WIZwiki W7500 ADC Performance Meter
Changed in this revision
diff -r cc86b144837b -r 9b3e3c52778a WIZwiki_W7500_Interactivity_css.h --- a/WIZwiki_W7500_Interactivity_css.h Sun Jul 10 00:07:14 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ - -void CSS(void) -{ - printf_send_client("<style>\r\n"); - printf_send_client("* { padding: 0; margin: 0; vertical-align: top; }\r\n"); - - printf_send_client("body {\r\n"); - printf_send_client("background: url(background.png) repeat-x;\r\n"); - printf_send_client("font: 18px/1.5em \"proxima-nova\", Helvetica, Arial, sans-serif;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("a { color: #069; }\r\n"); - printf_send_client("a:hover { color: #28b; }\r\n"); - - printf_send_client("h2 {\r\n"); - printf_send_client("margin-top: 15px;\r\n"); - printf_send_client("font: normal 32px \"omnes-pro\", Helvetica, Arial, sans-serif;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("h3 {\r\n"); - printf_send_client("margin-left: 30px;\r\n"); - printf_send_client("font: normal 26px \"omnes-pro\", Helvetica, Arial, sans-serif;\r\n"); - printf_send_client("color: #666;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("p {\r\n"); - printf_send_client("margin-top: 10px;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("button {\r\n"); - printf_send_client("font-size: 18px;\r\n"); - printf_send_client("padding: 1px 7px;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("input {\r\n"); - printf_send_client("font-size: 18px;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("input[type=checkbox] {\r\n"); - printf_send_client("margin: 7px;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("#header {\r\n"); - printf_send_client("position: relative;\r\n"); - printf_send_client("width: 900px;\r\n"); - printf_send_client("margin: auto;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("#header h2 {\r\n"); - printf_send_client("margin-left: 10px;\r\n"); - printf_send_client("vertical-align: middle;\r\n"); - printf_send_client("font-size: 42px;\r\n"); - printf_send_client("font-weight: bold;\r\n"); - printf_send_client("text-decoration: none;\r\n"); - printf_send_client("color: #000;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("#content {\r\n"); - printf_send_client("width: 880px;\r\n"); - printf_send_client("margin: 0 auto;\r\n"); - printf_send_client("padding: 10px;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("#footer {\r\n"); - printf_send_client("margin-top: 25px;\r\n"); - printf_send_client("margin-bottom: 10px;\r\n"); - printf_send_client("text-align: center;\r\n"); - printf_send_client("font-size: 12px;\r\n"); - printf_send_client("color: #999;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client(".demo-container {\r\n"); - printf_send_client("box-sizing: border-box;\r\n"); - printf_send_client("width: 850px;\r\n"); - printf_send_client("height: 450px;\r\n"); - printf_send_client("padding: 20px 15px 15px 15px;\r\n"); - printf_send_client("margin: 15px auto 30px auto;\r\n"); - printf_send_client("border: 1px solid #ddd;\r\n"); - printf_send_client("background: #fff;\r\n"); - printf_send_client("background: linear-gradient(#f6f6f6 0, #fff 50px);\r\n"); - printf_send_client("background: -o-linear-gradient(#f6f6f6 0, #fff 50px);\r\n"); - printf_send_client("background: -ms-linear-gradient(#f6f6f6 0, #fff 50px);\r\n"); - printf_send_client("background: -moz-linear-gradient(#f6f6f6 0, #fff 50px);\r\n"); - printf_send_client("background: -webkit-linear-gradient(#f6f6f6 0, #fff 50px);\r\n"); - printf_send_client("box-shadow: 0 3px 10px rgba(0,0,0,0.15);\r\n"); - printf_send_client("-o-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\r\n"); - printf_send_client("-ms-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\r\n"); - printf_send_client("-moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\r\n"); - printf_send_client("-webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\r\n"); - printf_send_client("}\r\n"); - - printf_send_client(".demo-placeholder {\r\n"); - printf_send_client("width: 100%;\r\n"); - printf_send_client("height: 100%;\r\n"); - printf_send_client("font-size: 14px;\r\n"); - printf_send_client("line-height: 1.2em;\r\n"); - printf_send_client("}\r\n"); - - printf_send_client(".legend table {\r\n"); - printf_send_client("border-spacing: 5px;\r\n"); - printf_send_client("}\r\n"); - printf_send_client("</style>\r\n"); -} \ No newline at end of file
diff -r cc86b144837b -r 9b3e3c52778a WIZwiki_W7500_Interactivity_js.h --- a/WIZwiki_W7500_Interactivity_js.h Sun Jul 10 00:07:14 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -void init_WIZwiki_W7500_Interactivity_JS(void) -{ -sprintf(httpHeader,"<link href=\"" __hebergement__ "electronique/e/WIZwiki-W7500/css/WIZwiki-W7500_Interactivity.css\" rel=\"stylesheet\" type=\"text/css\">\r\n"); -client.send(httpHeader,strlen(httpHeader)); - -sprintf(httpHeader,"<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "js/flot/excanvas.min.js\"></script><![endif]-->\r\n"); -client.send(httpHeader,strlen(httpHeader)); - -sprintf(httpHeader,"<script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "js/jquery.js\"></script>\r\n"); -client.send(httpHeader,strlen(httpHeader)); - -sprintf(httpHeader,"<script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "js/flot/jquery.flot.js\"></script>\r\n"); -client.send(httpHeader,strlen(httpHeader)); -/* -sprintf(httpHeader,"<script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "electronique/e/WIZwiki-W7500/js/WIZwiki-W7500_Interactivity_fct.js\"></script>"); -client.send(httpHeader,strlen(httpHeader));*/ -} - -void WIZwiki_W7500_Interactivity_div(void) -{ - printf_send_client("<p>\r\n"); - printf_send_client("<div id=\"header\"><h2>Interactivity</h2></div>\r\n"); - printf_send_client("<div id=\"content\">\r\n"); - printf_send_client("<div class=\"demo-container\"><div id=\"placeholder\" class=\"demo-placeholder\"></div></div>\r\n"); - printf_send_client("<p>X : Time (s) , Y : Vmoy (V)<p>One of the goals of Flot is to support user interactions. Try pointing and clicking on the points.</p><p>\r\n"); - printf_send_client("<label><input id=\"enablePosition\" type=\"checkbox\" checked=\"checked\"></input>Show mouse position</label>\r\n"); - printf_send_client("<span id=\"hoverdata\"></span>\r\n"); - printf_send_client("<span id=\"clickdata\"></span>\r\n"); - printf_send_client("</p>\r\n"); - printf_send_client("<p>A tooltip is easy to build with a bit of jQuery code and the data returned from the plot.</p>\r\n"); - printf_send_client("<p><label><input id=\"enableTooltip\" type=\"checkbox\" checked=\"checked\"></input>Enable tooltip</label></p>\r\n"); - printf_send_client("</div>\r\n"); - printf_send_client("<div id=\"footer\"> Copyright © 2007 - 2014 IOLA and Ole Laursen</div>\r\n"); - printf_send_client("<p>\r\n"); -} - -void WIZwiki_W7500_Interactivity_JS(void) -{ -/* -sprintf(httpHeader,"<script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "electronique/e/WIZwiki-W7500/js/WIZwiki-W7500_Interactivity_fct.js\"></script>"); -client.send(httpHeader,strlen(httpHeader));*/ -printf_send_client("<script language=\"javascript\" type=\"text/javascript\">\r\n"); - - printf_send_client("$(function() {\r\n"); - - printf_send_client("var plot = $.plot(\"#placeholder\",\r\n"); - printf_send_client("[\r\n"); - printf_send_client("{ data: array_value, label: label_Y, color: color_Y }\r\n"); - printf_send_client("],\r\n"); - printf_send_client("{\r\n"); - printf_send_client("series: {\r\n"); - printf_send_client("lines: { show: true },\r\n"); - printf_send_client("points: { show: true }\r\n"); - printf_send_client("},\r\n"); - printf_send_client("grid: { hoverable: true, clickable: true },\r\n"); - printf_send_client("xaxis: { min: x_min, max: x_max },\r\n"); - printf_send_client("yaxis: { min: y_min, max: y_max }\r\n"); - printf_send_client("});\r\n"); - - printf_send_client("$(\"<div id='tooltip'></div>\").css({\r\n"); - printf_send_client("position: \"absolute\",\r\n"); - printf_send_client("border: \"1px solid #fdd\",\r\n"); - printf_send_client("padding: \"2px\",\r\n"); - printf_send_client("\"background-color\": \"#fee\",\r\n"); - printf_send_client("opacity: 0.80\r\n"); - printf_send_client("}).appendTo(\"body\");\r\n"); - - printf_send_client("$(\"#placeholder\").bind(\"plothover\", function (event, pos, item)\r\n"); - printf_send_client("{\r\n"); - - printf_send_client("if($(\"#enablePosition:checked\").length > 0)\r\n"); - printf_send_client("{\r\n"); - printf_send_client("var str = \"(\" + pos.x.toFixed(2) + \", \" + pos.y.toFixed(2) + \")\";\r\n"); - printf_send_client("$(\"#hoverdata\").text(str);\r\n"); - printf_send_client("}\r\n"); - - printf_send_client("if($(\"#enableTooltip:checked\").length > 0)\r\n"); - printf_send_client("{\r\n"); - printf_send_client("if(item)\r\n"); - printf_send_client("{\r\n"); - printf_send_client("var x = item.datapoint[0].toFixed(2),\r\n"); - printf_send_client("y = item.datapoint[1].toFixed(2);\r\n"); - - printf_send_client("$(\"#tooltip\").html(item.series.label + \" of \" + x + \" = \" + y)\r\n"); - printf_send_client(".css({top: item.pageY+5, left: item.pageX+5})\r\n"); - printf_send_client(".fadeIn(200);\r\n"); - printf_send_client("}\r\n"); - printf_send_client("else\r\n"); - printf_send_client("{\r\n"); - printf_send_client("$(\"#tooltip\").hide();\r\n"); - printf_send_client("}\r\n"); - printf_send_client("}\r\n"); - printf_send_client("});\r\n"); - - printf_send_client("$(\"#placeholder\").bind(\"plotclick\", function (event, pos, item)\r\n"); - printf_send_client("{\r\n"); - printf_send_client("if(item)\r\n"); - printf_send_client("{\r\n"); - printf_send_client("$(\"#clickdata\").text(\" - click point \" + item.dataIndex + \" in \" + item.series.label);\r\n"); - printf_send_client("plot.highlight(item.series, item.datapoint);\r\n"); - printf_send_client("}\r\n"); - printf_send_client("});\r\n"); - - printf_send_client("// Add the Flot version string to the footer\r\n"); - - printf_send_client("$(\"#footer\").prepend(\"( http://www.flotcharts.org/flot/examples ) Flot \" + $.plot.version + \" –\");\r\n"); - printf_send_client("});\r\n"); - - printf_send_client("</script>\r\n"); -} \ No newline at end of file
diff -r cc86b144837b -r 9b3e3c52778a main.cpp --- a/main.cpp Sun Jul 10 00:07:14 2016 +0000 +++ b/main.cpp Sun Jul 10 15:23:53 2016 +0000 @@ -4,28 +4,8 @@ #include <stdio.h> #include <string.h> -#define USE_DHCP 1 -/* -MAC Address Details ( http://www.macvendorlookup.com/ ) -Company Wiznet Address -Seoul 135-830 -Nonyhun, Kangnam -KOREA, REPUBLIC OF -Range : 00:08:DC:00:00:00 - 00:08:DC:FF:FF:FF -Type : MA-L: IEEE MAC Address Large (24-bit block size) -*/ -//#define MAC "\x31\x41\x59\x26\x53\x58" -#define MAC "\x00\x08\xDC\x31\x41\x59" -//#define MAC "\x00\x08\xDC\x11\x34\x78" -#define IP "192.168.0.170" -#define MASK "255.255.255.0" -#define GATEWAY "192.168.0.254" - -#define HTTPD_SERVER_PORT 80 -#define HTTPD_MAX_REQ_LENGTH 1023 -#define HTTPD_MAX_HDR_LENGTH 255 -#define HTTPD_MAX_FNAME_LENGTH 127 -#define HTTPD_MAX_DNAME_LENGTH 127 +// https://developer.mbed.org/users/chris/notebook/Getting-best-ADC-performance/ +// https://developer.mbed.org/users/chris/code/ADCPerformanceMeter/ #if defined(TARGET_WIZwiki_W7500) Serial uart(USBTX, USBRX); @@ -36,12 +16,9 @@ // LED BLUE : socket connecting status Busy #endif -EthernetInterface eth; -TCPSocketServer server; -TCPSocketConnection client; +#define HTTPD_MAX_FNAME_LENGTH 127 +#define HTTPD_MAX_DNAME_LENGTH 127 -char buffer[HTTPD_MAX_REQ_LENGTH+1]; -char httpHeader[HTTPD_MAX_HDR_LENGTH+1]; char fileName[HTTPD_MAX_FNAME_LENGTH+1]; char dirName[HTTPD_MAX_DNAME_LENGTH+1]; char *uristr; @@ -53,424 +30,296 @@ // Initialize a pins to perform analog input and digital output fucntions AnalogIn ain0(A0); -AnalogIn ain1(A1); -AnalogIn ain2(A2); -AnalogIn ain3(A3); -float a0_f, a1_f, a2_f, a3_f; - -#define __IP_LOCAL__ IP -#define __hebergement__ "http://olivier.fournet.free.fr/" -#define __Time_between_page_refresh__ "1" -//#include <hebergement.h> - -int refresh = 1; // 1 second refresh - -#define NB_SAMPLES_GPH 10 -unsigned long int Sample_gph = 0; -float adc_samples[NB_SAMPLES_GPH];// = { 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.01,1.02,1.03,1.04 }; -float time_samples[NB_SAMPLES_GPH];// = { -0.1,2,3,4,5,6,7,8,9,10,11,12,13,14 }; -float x_min = 0.0, x_max = 0.0; -float y_min = 0.0, y_max = 0.0; -float Seconds = 0.0; -//float meas = 0.0; - -//------------ -#define __Time_tic_in_Second__ 0.1 - -Ticker time_tic; - -//------------ - -#define FREQUENCE_SECTEUR 50 -#define NB_SAMPLES_PAR_OSCILLATION 100 -#define NB_SAMPLES FREQUENCE_SECTEUR * NB_SAMPLES_PAR_OSCILLATION // 5000 // FREQUENCE_SECTEUR * NB_SAMPLES_PAR_OSCILLATION -#define TIME_SAMPLES_us 1000000 / NB_SAMPLES // 200 // 1000000 / NB_SAMPLES -unsigned long int Samples = 0; - -float time_between_two_measurement_ADC = 0.0; -float meas, meas_sum, meas_moy, meas_min, meas_max; -float vdc, vdc_min, vdc_max; -float vac, pow2_vac, sum_pow2_vac, veff; - -Ticker time_measurement_ADC; - -void measurement_ADC(void) -{ - float meas_moy_t, veff_t; // valeurs temporaires +#define NUM_SAMPLES 500000 // size of sample series +#define SAMPLE_BLOCKS 5 - meas = 3.3 * ain0.read(); // Converts and read the analog input value (value from 0.0 to 1.0) - //wait_us(10); - meas_sum += meas; - if(meas_min > meas) meas_min = meas; - if(meas_max < meas) meas_max = meas; - - vac = meas - 1.650; // 0V AC = 3,3V/2 - pow2_vac = vac * vac; // valeur VAC au carré - sum_pow2_vac += pow2_vac; // somme des valeurs AC au carré - - Samples++; - - if( Samples == NB_SAMPLES ) - { - // VDC - meas_moy_t = meas_sum; - meas_moy = meas_moy_t / (float)NB_SAMPLES; - // VAC - veff_t = sum_pow2_vac; - veff_t = veff_t / (float)NB_SAMPLES; - veff = sqrt(veff_t); - - Samples = 0; - meas_sum = 0.0; - vdc_min = meas_min, vdc_max = meas_max; - meas_min = 3.3 , meas_max = 0.0; - sum_pow2_vac = 0.0; - } -} - -void init_ADC_sampling(void) -{ - //------------- - meas_moy = 0.0; - Samples = 0; - meas_sum = 0.0; - meas_min = 3.3 , meas_max = 0.0; - sum_pow2_vac = 0.0; - //----------------- - // 50 Hz --> 20ms - // 100 samples par oscillations = 20 / 100 = 0.2ms = 200µs - // 100 samples * 50 oscillations = 5000 samples au total par secondes - // interval: 200 micro seconds chaques samples - time_measurement_ADC.attach_us(&measurement_ADC, TIME_SAMPLES_us); -} -//------------ - -void add_one_tic() -{ - int i; - - Seconds = Seconds + (float)__Time_tic_in_Second__; - - // mesures ADC --> measurement_ADC(); - /* - meas = ain0.read(); // Converts and read the analog input value (value from 0.0 to 1.0) - meas = meas * 3.3; // Change the value to be in the 0 to 3300 range - */ - x_min = x_max = Seconds; - y_min = y_max = meas_moy; //meas; - - for(i = 1 ; i < NB_SAMPLES_GPH ; i++) - { - time_samples[i-1] = time_samples[i]; - adc_samples[i-1] = adc_samples[i]; - if( time_samples[i] < x_min ) x_min = time_samples[i]; - if( time_samples[i] > x_max ) x_max = time_samples[i]; - if( adc_samples[i] < y_min ) y_min = adc_samples[i]; - if( adc_samples[i] > y_max ) y_max = adc_samples[i]; - } - - adc_samples[NB_SAMPLES_GPH-1] = meas_moy; //meas; - time_samples[NB_SAMPLES_GPH-1] = Seconds; -} -//------------ +Timer t; Ticker ledTick; char *pch; char ext[5]; -char ext_gif[] = "gif"; -char ext_jpg[] = "jpg"; -char ext_png[] = "png"; -char ext_tiff[] = "tiff"; + int pos_ext; int extLen; -void ledTickfunc() -{ - led_r = !led_r; -} - -void printf_send_client(const char *str_c) -{ - char http_send[HTTPD_MAX_REQ_LENGTH+1]; - sprintf(http_send,str_c); - client.send(http_send,strlen(http_send)); -} - -#include "WIZwiki_W7500_Interactivity_css.h" -#include "WIZwiki_W7500_Interactivity_js.h" +//--------------------------- +int samples = 0; +int num_4 = 0; +int num_8 = 0; +int num_16 = 0; +int num_32 = 0; +int num_64 = 0; +int num_128 = 0; +int num_256 = 0; +int num_512 = 0; +int num_1024 = 0; +int num_spike = 0; + +float AVERAGE = 0.5; +float AVERAGE_MOY = 0.5; +float average_min = 0.0; +float average_max = 3.3; +float average_error = 3.0303; // Par défaut : 3.0303% sur la valeur centrale 1.65V -void variables(void) -{ - printf_send_client("<SCRIPT script language=\"javascript\" type=\"text/javascript\">\r\n"); - - a0_f = ain0.read()*3.3; - sprintf(httpHeader,"A0 = %3.3f;\r\n", a0_f); - client.send(httpHeader,strlen(httpHeader)); - - a1_f = ain1.read()*3.3; - sprintf(httpHeader,"A1 = %3.3f;\r\n", a1_f); - client.send(httpHeader,strlen(httpHeader)); - - a2_f = ain2.read()*3.3; - sprintf(httpHeader,"A2 = %3.3f;\r\n", a2_f); - client.send(httpHeader,strlen(httpHeader)); - - a3_f = ain3.read()*3.3; - sprintf(httpHeader,"A3 = %3.3f;\r\n", a3_f); - client.send(httpHeader,strlen(httpHeader)); - - printf_send_client("</SCRIPT>\r\n"); -} - -void ETAT(void) +#define __AVERAGE_AUTO__ 1 + +void PerformanceMeter(void) { - int i; - - // httpHeader - printf_send_client("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n"); - - // Début page Web - printf_send_client("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\r\n"); - // meta_refresh - sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"" __Time_between_page_refresh__ ";url=http://%s/\">\r\n", eth.getIPAddress() ); - //sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"1;url=http://%s/\">\r\n", eth.getIPAddress() ); - //sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"%u;url=http://%s/\">\r\n", refresh, eth.getIPAddress() ); - client.send(httpHeader,strlen(httpHeader)); - - printf_send_client("<html><head>\r\n"); - // title - printf_send_client("<title>WIZwiki-W7500 - Flot Examples: Interactivity</title>\r\n"); - printf_send_client("<LINK REL=\"SHORTCUT ICON\" type=\"image/x-icon\" href=\"" __hebergement__ "favicon.ico\">\r\n<link rel=\"icon\" href=\"" __hebergement__ "favicon.ico\" type=\"image/x-icon\">\r\n"); - // CSS - CSS(); - // JavaScript Interactivity - init_WIZwiki_W7500_Interactivity_JS(); - WIZwiki_W7500_Interactivity_JS(); - /*sprintf(httpHeader,"<script language=\"javascript\" type=\"text/javascript\" src=\"" __hebergement__ "electronique/e/WIZwiki-W7500/js/WIZwiki-W7500_Interactivity_init.js\"></script>\r\n"); - client.send(httpHeader,strlen(httpHeader)); - */ - //printf_send_client("<script language=\"javascript\" type=\"text/javascript\">init_WIZwiki_W7500_Interactivity();</script>\r\n"); - - // Variables JavaScript - printf_send_client("<script language=\"javascript\" type=\"text/javascript\">\r\n"); - printf_send_client("var color_Y = \"#FF0000\";\r\n"); - printf_send_client("var label_Y = \"Meas Moy (V)\";\r\n"); - // sprintf(httpHeader, "var x_min = -0.5, x_max = 14.5, y_min = -0.5, y_max = 1.5;\r\n"); // TEST - sprintf(httpHeader, "var x_min = %.1f, x_max = %.1f, y_min = %.1f, y_max = %.1f;\r\n", x_min, x_max, y_min, y_max); - client.send(httpHeader,strlen(httpHeader)); - - // sprintf(httpHeader, "var array_value = [[-0.1,0.1],[2,0.2],[3,0.3],[4,0.4],[5,0.5],[6,0.6],[7,0.7],[8,0.8],[9,0.9],[10,1],[11,1.01],[12,1.02],[13,1.03],[14,1.04]];\r\n"); // TEST - // client.send(httpHeader,strlen(httpHeader)); // TEST - - if(Sample_gph > NB_SAMPLES_GPH) + float r = 0.0; + //--------------------------------- + // Take the average over 500,000 samples + // This is because the bias to 1.65v has a tolerance + // adjust the analog input to 1.65V, if NO AUTO MODE + + uart.printf("Taking an average over %d samples\r\n",NUM_SAMPLES); + + if( __AVERAGE_AUTO__ ) + { + COLOR(_BLUE_); + samples = 0; + average_error = 5.0; // 5% initiale + uart.printf("AVERAGE AUTO : error %f%%\r\n", average_error); + + while(samples < NUM_SAMPLES) + { + r = ain0.read(); + + AVERAGE_MOY += r; + samples++; + } + + AVERAGE_MOY /= NUM_SAMPLES; + average_min = AVERAGE_MOY - (AVERAGE_MOY * average_error / 100.0); + average_max = AVERAGE_MOY + (AVERAGE_MOY * average_error / 100.0); + uart.printf("Average Moyenne (for 5%%) = %f , Min = %f , Max = %f\r\n",3.3 * AVERAGE, 3.3 * average_min, 3.3 * average_max); + samples = 0; + + while(samples < NUM_SAMPLES) + { + r = ain0.read(); + + if((r > average_min) && (r < average_max)) + { + AVERAGE += r; + samples++; + } + } + + AVERAGE /= NUM_SAMPLES; + average_min = AVERAGE - (AVERAGE * average_error / 100.0); + average_max = AVERAGE + (AVERAGE * average_error / 100.0); + uart.printf("Average (for 5%%) = %f , Min = %f , Max = %f\r\n",3.3 * AVERAGE, 3.3 * average_min, 3.3 * average_max); + // étalonage à 1% -------------------- + average_error = 1.0; // 1% + COLOR(_YELLOW_); + samples = 0; + + while(samples < NUM_SAMPLES) { - printf_send_client("var array_value = ["); - - for(i = 0 ; i < NB_SAMPLES_GPH ; i++) - { - if(i < NB_SAMPLES_GPH-1) sprintf(httpHeader, "[%.1f,%.1f],", time_samples[i], adc_samples[i]); - else sprintf(httpHeader, "[%.1f,%.1f]", time_samples[i], adc_samples[i]); - client.send(httpHeader,strlen(httpHeader)); - } - printf_send_client("];\r\n"); + r = ain0.read(); + + if((r > average_min) && (r < average_max)) + { + AVERAGE += r; + samples++; + } } - Sample_gph++; - printf_send_client("</script>\r\n"); + AVERAGE /= NUM_SAMPLES; + average_min = AVERAGE - (AVERAGE * average_error / 100.0); + average_max = AVERAGE + (AVERAGE * average_error / 100.0); + uart.printf("Average (for 1%%) = %f , Min = %f , Max = %f\r\n",3.3 * AVERAGE, 3.3 * average_min, 3.3 * average_max); + } + else + { + COLOR(_PURPLE_); + average_min = 1.65 - (1.65 * average_error / 100.0); // 0.45 --> -3,0303% of 1.65V --> 1.485V + average_max = 1.65 + (1.65 * average_error / 100.0); // 0.55 --> +3,0303% of 1.65V --> 1.815V + samples = 0; + + while(samples < NUM_SAMPLES) + { + r = ain0.read(); + + if((r > average_min) && (r < average_max)) // 0.7425V à 0.9075 + { + AVERAGE += r; + samples++; + } + } + + AVERAGE /= NUM_SAMPLES; + uart.printf("Average = %f , Min = %f , Max = %f\r\n",3.3 * AVERAGE, 3.3 * average_min, 3.3 * average_max); + } + + samples = 0; + + // Now start sampling series of 500,000 + // acculumating the errors seen in each range + uart.printf("Profiling %d samples\r\n",SAMPLE_BLOCKS*NUM_SAMPLES); + float a; - // <SCRIPT> - variables(); - // <FIN SCRIPT> - // Fin Variable JavaScript - printf_send_client("</head><body><center>\r\n"); - - sprintf(httpHeader,"<h2>WIZwiki-W7500 - mBED</h2> ( Compiled at : %s and %s )<p>\r\n", __DATE__ , __TIME__); - client.send(httpHeader,strlen(httpHeader)); - - printf_send_client("<p>(<a href=\"http://www.flotcharts.org/flot/examples/interacting/index.html\">Flot Examples: Interactivity</a>)<p>\r\n"); - - printf_send_client("ETAT :<p>\r\n"); - - sprintf(httpHeader,"IP: %s, MASK: %s, GW: %s<p>\r\n", - eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader,"˜A0 : %3.3fV , \r\n", a0_f); - client.send(httpHeader,strlen(httpHeader)); + for(int j=0; j < SAMPLE_BLOCKS ; j++) + { + t.reset(); + t.start(); + COLOR(_WHITE_); + //uart.printf("%d SAMPLE BLOCKS\r\n",j); + + for(int i = 0; i < NUM_SAMPLES ; i++) + { + a = ain0.read(); + + if(a == 1.0) { + num_spike++; // > 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 + } + + samples++; + } + t.stop(); + COLOR(_BLACK_); + if(j==0) + { + uart.printf("Samples\t"); + uart.printf("4\t"); + uart.printf("8\t"); + uart.printf("16\t"); + uart.printf("32\t"); + uart.printf("64\t"); + uart.printf("128\t"); + uart.printf("256\t"); + uart.printf("512\t"); + uart.printf("1024\t"); + uart.printf("Spikes\t"); + uart.printf("Time\r\n"); + } + + // Every 500,000 print the results + uart.printf("%d\t",samples); + uart.printf("%d\t",num_4); + uart.printf("%d\t",num_8); + uart.printf("%d\t",num_16); + uart.printf("%d\t",num_32); + uart.printf("%d\t",num_64); + uart.printf("%d\t",num_128); + uart.printf("%d\t",num_256); + uart.printf("%d\t",num_512); + uart.printf("%d\t",num_1024); + uart.printf("%d\t",num_spike); + uart.printf("%fs\r\n",t.read()); + } + + uart.printf("==== Test Complete ====\r\n"); + COLOR(_GREEN_); + //------------------------------- + // TEST continu + uart.printf("==== Test Continu avec %d Samples ====\r\n", NUM_SAMPLES / 10); + samples = 0; + + while(1) + { + a = ain0.read(); + samples++; - sprintf(httpHeader,"˜A1 : %3.3fV , \r\n", a1_f); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader,"˜A2 : %3.3fV , \r\n", a2_f); - client.send(httpHeader,strlen(httpHeader)); + if(a == 1.0) { + num_spike++; // > 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 + } - sprintf(httpHeader,"˜A3 : %3.3fV<p>\r\n", a3_f); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader, "ADC (A0) :<p>DC : %.3fVmoy ( sum : %.3f - Samples : %u )<br>\r\n", meas_moy, meas_sum, Samples); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader, "DC (0 à 3,3V) : %.3fVmin, %.3fVmax , Vdiff : %.0fmV<br>\r\n", vdc_min, vdc_max, 1000.0*(vdc_max - vdc_min)); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader, "AC (-1,65V à 1,65V) : %.3fVeff<p>\r\n", veff); - client.send(httpHeader,strlen(httpHeader)); - - sprintf(httpHeader, "Time : %.1f Seconds - Sample Graphique : %u<p>\r\n", Seconds, Sample_gph);// diplays the human readable Seconds - client.send(httpHeader,strlen(httpHeader)); - - WIZwiki_W7500_Interactivity_div(); - //printf_send_client("<p><script language=\"javascript\" type=\"text/javascript\">WIZwiki_W7500_Interactivity();</script><p>\r\n"); - - printf_send_client("<p><p><a href=\"..\">Root</a>\r\n"); - - printf_send_client("</center></body></html>\r\n"); + if(samples == NUM_SAMPLES / 10) + { + uart.printf("Samples\t"); + uart.printf("4\t"); + uart.printf("8\t"); + uart.printf("16\t"); + uart.printf("32\t"); + uart.printf("64\t"); + uart.printf("128\t"); + uart.printf("256\t"); + uart.printf("512\t"); + uart.printf("1024\t"); + uart.printf("Spikes\r\n"); + // Every 500,000 print the results + uart.printf("%d\t",samples); + uart.printf("%d\t",num_4); + uart.printf("%d\t",num_8); + uart.printf("%d\t",num_16); + uart.printf("%d\t",num_32); + uart.printf("%d\t",num_64); + uart.printf("%d\t",num_128); + uart.printf("%d\t",num_256); + uart.printf("%d\t",num_512); + uart.printf("%d\t",num_1024); + uart.printf("%d\r\n\r\n",num_spike); + 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_spike = 0; + samples = 0; + } + } } //-------------------------------------------- int main(void) { - // initialisation des variables - int i; - - init_ADC_sampling(); - //----------------- - - for(i = 0 ; i < NB_SAMPLES_GPH ; i++) - { - time_samples[i] = 0; - adc_samples[i] = 0.0; - } - // Init the ticker with the address of the function (add_one_second) to be attached and the interval (1000 ms) - time_tic.attach(&add_one_tic, __Time_tic_in_Second__); - //-------------- - ledTick.attach(&ledTickfunc,0.5); - // Serial Interface eth; - // Serial port configuration (valeurs par defaut) : 9600 baud, 8-bit data, no parity, stop bit - uart.baud(9600); - uart.format(8, SerialBase::None, 1); - uart.printf("Initializing\n"); - wait(1.0); -// Check File System - uart.printf("Checking File System\n"); - DIR *d = opendir("/sd/"); - if(d != NULL) - { - uart.printf("SD Card Present\n"); - } - else - { - uart.printf("SD Card Root Directory Not Found\n"); - } - wait(1.0); -// EthernetInterface eth; - uart.printf("Initializing Ethernet\n"); - #if USE_DHCP - //eth.init Use DHCP - int ret = eth.init((uint8_t*)MAC); // Use DHCP for WIZnetInterface - uart.printf("Connecting DHCP\n"); - #else - int ret = eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway - uart.printf("Connecting (IP,mask,Gateway)\n"); - #endif - wait(1.0); - // Check Ethernet Link-Done - uart.printf("Check Ethernet Link\r\n"); + // initialisation des variables + - if(eth.link() == true) - { - uart.printf("- Ethernet PHY Link - Done\r\n"); - //led_r = LED_ON; - COLOR(_RED_); - } - else - { - uart.printf("- Ethernet PHY Link - Fail\r\n"); - //led_r = LED_OFF; - COLOR(_BLACK_); - } - wait(1.0); - if(!ret) - { - uart.printf("Initialized, MAC: %s\r\n", eth.getMACAddress()); - ret = eth.connect(); - - if(!ret) - { - uart.printf("IP: %s, MASK: %s, GW: %s\r\n", - eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway()); - // led_b = LED_ON, led_g = LED_ON; - COLOR(_CYAN_); - } - else - { - uart.printf("Error ethernet.connect() - ret = %d\r\n", ret); - //led_b = LED_OFF; - COLOR(_BLUE_); - exit(0); - } - } - else - { - uart.printf("Error ethernet.init() - ret = %d\r\n", ret); - //led_b = LED_OFF; - COLOR(_BLACK_); - exit(0); - } - wait(1.0); -// TCPSocketServer server; - server.bind(HTTPD_SERVER_PORT); - server.listen(); - uart.printf("Server Listening\n"); - - while(true) - { - uart.printf("\nWait for new connection...\r\n"); - server.accept(client); - client.set_blocking(false, 1500); // Timeout after (1.5)s - - uart.printf("Connection from: %s\r\n", client.get_address()); - while(true) - { - //led_g = LED_ON; - COLOR(_GREEN_); - int n = client.receive(buffer, sizeof(buffer)); - if(n <= 0) break; - uart.printf("Recieved Data: %d\r\n\r\n%.*s\r\n",n,n,buffer); - if(n >= 1024) - { - sprintf(httpHeader,"HTTP/1.1 413 Request Entity Too Large \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); - client.send(httpHeader,strlen(httpHeader)); - client.send(buffer,n); - break; - } - else - { - buffer[n]=0; - } - if(!strncmp(buffer, "GET ", 4)) - { - uristr = buffer + 4; - eou = strstr(uristr, " "); - if(eou == NULL) - { - sprintf(httpHeader,"HTTP/1.1 400 Bad Request \r\nContent-Type: text\r\nConnection: Close\r\n\r\n"); - client.send(httpHeader,strlen(httpHeader)); - client.send(buffer,n); - } - else - { - *eou = 0; - //get_file(uristr); - ETAT(); - } - } - } - //led_g = LED_OFF; - COLOR(_BLACK_); - client.close(); - } + //-------------- + COLOR(_BLACK_); + // Serial Interface eth; + // Serial port configuration (valeurs par defaut) : 9600 baud, 8-bit data, no parity, stop bit + uart.baud(9600); + uart.format(8, SerialBase::None, 1); + COLOR(_RED_); + uart.printf("WIZwiki-W7500 - mBED ( Compiled at : %s and %s )\r\n", __DATE__ , __TIME__); + uart.printf("Initializing\n\r"); + wait(1.0); + + PerformanceMeter(); }