{"id":1026,"date":"2016-05-22T10:50:15","date_gmt":"2016-05-22T10:50:15","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=1026"},"modified":"2016-05-22T10:50:15","modified_gmt":"2016-05-22T10:50:15","slug":"mcp3424-demotest-code","status":"publish","type":"post","link":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/","title":{"rendered":"MCP3424 Demo\/Test Code"},"content":{"rendered":"<p><span style=\"font-size: small; color: #3366ff;\">Testprogramm f\u00fcr die ADC Einstellungen des MCP3424. Code ist f\u00fcr Arduino nach der Vorlage des AVR C Compiler von Mikroelektronika.<\/span><\/p>\n<hr \/>\n<pre>#include &lt;Wire.h&gt;\n\/\/ I2C address for MCP3422 - base address for MCP3424\n#define MCP3422_ADDRESS 0X68\n\/\/ fields in configuration register\n#define MCP342X_GAIN_FIELD 0X03 \/\/ PGA field\n#define MCP342X_GAIN_X1\u00a0\u00a0\u00a0 0X00 \/\/ PGA gain X1\n#define MCP342X_GAIN_X2\u00a0\u00a0\u00a0 0X01 \/\/ PGA gain X2\n#define MCP342X_GAIN_X4\u00a0\u00a0\u00a0 0X02 \/\/ PGA gain X4\n#define MCP342X_GAIN_X8\u00a0\u00a0\u00a0 0X03 \/\/ PGA gain X8\n#define MCP342X_RES_FIELD\u00a0 0X0C \/\/ resolution\/rate field\n#define MCP342X_RES_SHIFT\u00a0 2\u00a0\u00a0\u00a0 \/\/ shift to low bits\n#define MCP342X_12_BIT\u00a0\u00a0\u00a0\u00a0 0X00 \/\/ 12-bit 240 SPS\n#define MCP342X_14_BIT\u00a0\u00a0\u00a0\u00a0 0X04 \/\/ 14-bit 60 SPS\n#define MCP342X_16_BIT\u00a0\u00a0\u00a0\u00a0 0X08 \/\/ 16-bit 15 SPS\n#define MCP342X_18_BIT\u00a0\u00a0\u00a0\u00a0 0X0C \/\/ 18-bit 3.75 SPS\n#define MCP342X_CONTINUOUS 0X10 \/\/ 1 = continuous, 0 = one-shot\n#define MCP342X_CHAN_FIELD 0X60 \/\/ channel field\n#define MCP342X_CHANNEL_1\u00a0 0X00 \/\/ select MUX channel 1\n#define MCP342X_CHANNEL_2\u00a0 0X20 \/\/ select MUX channel 2\n#define MCP342X_CHANNEL_3\u00a0 0X40 \/\/ select MUX channel 3\n#define MCP342X_CHANNEL_4\u00a0 0X60 \/\/ select MUX channel 4\n#define MCP342X_START\u00a0\u00a0\u00a0\u00a0\u00a0 0X80 \/\/ write: start a conversion\n#define MCP342X_BUSY\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0X80 \/\/ read: output not ready<\/pre>\n<pre>\/\/------------------------------------------------------------------------\n\/\/ default adc configuration register - resolution and gain added in setup()\n#include \"WProgram.h\"\nvoid halt(void);\nuint8_t mcp342xWrite(uint8_t config);\nvoid setup();\nvoid loop();\nuint8_t adcConfig = MCP342X_START | MCP342X_CHANNEL_1 | MCP342X_CONTINUOUS;\n\/\/ divisor to convert ADC reading to milivolts\nuint16_t mvDivisor;\n\/\/------------------------------------------------------------------------------<\/pre>\n<pre>void halt(void) \n{\n\u00a0 Serial.println(\"Halted\");\n\u00a0 while(1);\n}\n\/\/------------------------------------------------------------------------------<\/pre>\n<pre>\n\/\/ read mcp342x data\nuint8_t mcp342xRead(int32_t &amp;data)\n{\n\u00a0 \/\/ pointer used to form int32 data\n\u00a0 uint8_t *p = (uint8_t *)&amp;data;\n\u00a0 \/\/ timeout - not really needed?\n\u00a0 uint32_t start = millis();\n\u00a0 \/\/do {\n\u00a0\u00a0\u00a0 \/\/ assume 18-bit mode\n\u00a0\u00a0\u00a0 Wire.requestFrom(MCP3422_ADDRESS, 4);\n\u00a0\u00a0\u00a0 if (Wire.available() != 4) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 Serial.println(\"read failed\");\n\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 for (int8_t i = 2; i &gt;= 0; i--) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 p[i] = Wire.receive();\n\u00a0\u00a0\u00a0 }\n\u00a0\u00a0\u00a0 \/\/ extend sign bits\n\u00a0\u00a0\u00a0 p[3] = p[2] &amp; 0X80 ? 0XFF : 0;\n\u00a0\u00a0\u00a0 \/\/ read config\/status byte\n\u00a0\u00a0\u00a0 uint8_t s = Wire.receive();\n\u00a0\u00a0\u00a0 if ((s &amp; MCP342X_RES_FIELD) != MCP342X_18_BIT) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ not 18 bits - shift bytes for 12, 14, or 16 bits\n\u00a0\u00a0\u00a0\u00a0\u00a0 p[0] = p[1];\n\u00a0\u00a0\u00a0\u00a0\u00a0 p[1] = p[2];\n\u00a0\u00a0\u00a0\u00a0\u00a0 p[2] = p[3];\n\u00a0\u00a0\u00a0 }\n \/\/\u00a0\u00a0 if ((s &amp; MCP342X_BUSY) == 0) return true;\n\/\/\u00a0 } while (millis() - start &lt; 100); \/\/allows rollover of millis()\n\/\/\u00a0 Serial.println(\"read timeout\"); \n\/\/\u00a0 return false;\n\u00a0\u00a0\u00a0 return true;\n}\n\/\/------------------------------------------------------------------------------<\/pre>\n<pre>\n\/\/ write mcp342x configuration byte\nuint8_t mcp342xWrite(uint8_t config)\n{\n\u00a0 Wire.beginTransmission(MCP3422_ADDRESS);\n\u00a0 Wire.send(config); \n\u00a0 Wire.endTransmission();\n}<\/pre>\n<pre>\/\/------------------------------------------------------------------------------\nvoid setup()\n{\n\u00a0 Serial.begin(9600);\u00a0 \n\u00a0 Wire.begin();\n\u00a0 uint8_t chan = 0XFF, gain = 0XFF, res = 0XFF;\n\u00a0 do {\n\u00a0\u00a0\u00a0 Serial.flush();\n\u00a0\u00a0\u00a0 Serial.print(\"\\nEnter channel (1, 2, 3, 4): \");\n\u00a0\u00a0\u00a0 while (Serial.available() == 0);\n\u00a0\u00a0\u00a0 chan = Serial.read() - '1';\n\u00a0 } while(chan &gt; 3);\n\u00a0 Serial.println(chan + 1, DEC); \n\u00a0 do {\n\u00a0\u00a0\u00a0 Serial.println();\n\u00a0\u00a0\u00a0 Serial.flush();\n\u00a0\u00a0\u00a0 Serial.print(\"Enter gain (1, 2, 4, or 8): \");\n\u00a0\u00a0\u00a0 while(Serial.available() &lt; 1);\n\u00a0\u00a0\u00a0 switch (Serial.read()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '1': gain = 0; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '2': gain = 1; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '4': gain = 2; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '8': gain = 3; break;\n\u00a0\u00a0\u00a0 }\n\u00a0 } while (gain &gt; 3);\n\u00a0 Serial.println(1 &lt;&lt; gain, DEC);\n\u00a0 do {\n\u00a0\u00a0\u00a0 Serial.flush();\n\u00a0\u00a0\u00a0 Serial.println();\n\u00a0\u00a0\u00a0 Serial.print(\"Enter resolution (12, 14, 16, or 18): \");\n\u00a0\u00a0\u00a0 while (Serial.available() &lt; 2);\n\u00a0\u00a0\u00a0 if (Serial.read() != '1') continue;\n\u00a0\u00a0\u00a0 switch (Serial.read()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '2': res = 0; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '4': res = 1; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '6': res = 2; break;\n\u00a0\u00a0\u00a0\u00a0\u00a0 case '8': res = 3; break;\n\u00a0\u00a0\u00a0 }\n\u00a0 } while (res &gt; 3);\n\u00a0 Serial.println(12 + 2*res, DEC);\n  adcConfig |= chan &lt;&lt; 5 | res &lt;&lt; 2 | gain;\n\u00a0 \/\/ divisor to convert ADC reading to millivolts\n\u00a0 mvDivisor = 1 &lt;&lt; (gain + 2*res);\n}\n\/\/------------------------------------------------------------------------------<\/pre>\n<pre>\nvoid loop()\n{\n\u00a0 \/\/ Really only needed write once in continuous mode. Could be moved to setup.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0 mcp342xWrite(adcConfig); \n\u00a0 int32_t data;\n\u00a0 if (!mcp342xRead(data)) halt();\n\u00a0 \/\/ voltage in millivolts\n\u00a0 double mv = (double)data\/mvDivisor;\n\u00a0 \/\/ convert reading to microvolts\n\u00a0 int32_t uv = (data*1000L)\/mvDivisor;\n\u00a0 Serial.print(mv);Serial.print(\" mv, \");\n\u00a0 Serial.print(uv);Serial.println(\" uv\");\n\u00a0 delay(1000);\n} <\/pre>\n<pre>\nint main(void)\n{\n\u00a0\u00a0\u00a0 init();\n\u00a0\u00a0\u00a0 setup();\n\u00a0\u00a0\u00a0 for (;;)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 loop();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0 return 0;\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Testprogramm f\u00fcr die ADC Einstellungen des MCP3424. Code ist f\u00fcr Arduino nach der Vorlage des AVR C Compiler von Mikroelektronika. #include &lt;Wire.h&gt; \/\/ I2C address for MCP3422 &#8211; base address for MCP3424 #define MCP3422_ADDRESS 0X68 \/\/ fields in configuration register #define MCP342X_GAIN_FIELD 0X03 \/\/ PGA field #define MCP342X_GAIN_X1\u00a0\u00a0\u00a0 0X00 \/\/ PGA gain X1 #define MCP342X_GAIN_X2\u00a0\u00a0\u00a0 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13],"tags":[14,18,81],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MCP3424 Demo\/Test Code - Merkbar.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MCP3424 Demo\/Test Code - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"Testprogramm f\u00fcr die ADC Einstellungen des MCP3424. Code ist f\u00fcr Arduino nach der Vorlage des AVR C Compiler von Mikroelektronika. #include &lt;Wire.h&gt; \/\/ I2C address for MCP3422 - base address for MCP3424 #define MCP3422_ADDRESS 0X68 \/\/ fields in configuration register #define MCP342X_GAIN_FIELD 0X03 \/\/ PGA field #define MCP342X_GAIN_X1\u00a0\u00a0\u00a0 0X00 \/\/ PGA gain X1 #define MCP342X_GAIN_X2\u00a0\u00a0\u00a0 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2016-05-22T10:50:15+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"wp_blogadmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\",\"url\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#webpage\",\"url\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/\",\"name\":\"MCP3424 Demo\/Test Code - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website\"},\"datePublished\":\"2016-05-22T10:50:15+00:00\",\"dateModified\":\"2016-05-22T10:50:15+00:00\",\"author\":{\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MCP3424 Demo\/Test Code\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g\",\"caption\":\"wp_blogadmin\"},\"url\":\"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MCP3424 Demo\/Test Code - Merkbar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/","og_locale":"de_DE","og_type":"article","og_title":"MCP3424 Demo\/Test Code - Merkbar.","og_description":"Testprogramm f\u00fcr die ADC Einstellungen des MCP3424. Code ist f\u00fcr Arduino nach der Vorlage des AVR C Compiler von Mikroelektronika. #include &lt;Wire.h&gt; \/\/ I2C address for MCP3422 - base address for MCP3424 #define MCP3422_ADDRESS 0X68 \/\/ fields in configuration register #define MCP342X_GAIN_FIELD 0X03 \/\/ PGA field #define MCP342X_GAIN_X1\u00a0\u00a0\u00a0 0X00 \/\/ PGA gain X1 #define MCP342X_GAIN_X2\u00a0\u00a0\u00a0 [&hellip;]","og_url":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/","og_site_name":"Merkbar.","article_published_time":"2016-05-22T10:50:15+00:00","twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"3 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website","url":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"WebPage","@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#webpage","url":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/","name":"MCP3424 Demo\/Test Code - Merkbar.","isPartOf":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#website"},"datePublished":"2016-05-22T10:50:15+00:00","dateModified":"2016-05-22T10:50:15+00:00","author":{"@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.29.166.97\/myblog\/2016\/05\/22\/mcp3424-demotest-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/"},{"@type":"ListItem","position":2,"name":"MCP3424 Demo\/Test Code"}]},{"@type":"Person","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/ec2-52-29-166-97.eu-central-1.compute.amazonaws.com\/myblog\/#personlogo","inLanguage":"de","url":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d0dc804558b03f640b22e497ec010c9a?s=96&d=mm&r=g","caption":"wp_blogadmin"},"url":"http:\/\/52.29.166.97\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/1026"}],"collection":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/comments?post=1026"}],"version-history":[{"count":0,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/posts\/1026\/revisions"}],"wp:attachment":[{"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/media?parent=1026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/categories?post=1026"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.29.166.97\/myblog\/wp-json\/wp\/v2\/tags?post=1026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}