{"id":1242,"date":"2016-06-12T19:10:00","date_gmt":"2016-06-12T19:10:00","guid":{"rendered":"http:\/\/wp.andreas.bieri.name\/myblog\/?p=1242"},"modified":"2016-06-12T19:10:00","modified_gmt":"2016-06-12T19:10:00","slug":"i2c-grundlagen","status":"publish","type":"post","link":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/","title":{"rendered":"I2C Grundlagen"},"content":{"rendered":"<p>F\u00fcr die bastelnden Vereinskollegen habe ich n\u00fctzliche Informationen zum I2C Bus gesammelt. Meine eigenen Erfahrungen mit meinem I2C-Modul Zoo habe ich in einen <a href=\"http:\/\/wp.andreas.bieri.name\/myblog\/index.php\/2016\/07\/08\/meine-arduino-i2c-tests-blinkm-und-rtc-module\/\" target=\"_blank\" rel=\"noopener\">zweiten Artikel hier<\/a> verfrachtet.<\/p>\n<p><strong>Zum Nachlesen:<\/strong><\/p>\n<ul>\n<li>Dreiteilige Serie im Elektor-Heft (Teil 2: 2017\/7 pp. 38-43; Teil 1: 2017\/5 pp. 42-45)<\/li>\n<li><a href=\"https:\/\/learn.sparkfun.com\/tutorials\/i2c\" target=\"_blank\" rel=\"noopener\">https:\/\/learn.sparkfun.com\/tutorials\/i2c<\/a><\/li>\n<li><a href=\"http:\/\/www.mikrocontroller.net\/articles\/I%C2%B2C\" target=\"_blank\" rel=\"noopener\">Mikrocontroller.net I2C<\/a><\/li>\n<li><a href=\"http:\/\/www.i2c-bus.org\/i2c-bus\/\" target=\"_blank\" rel=\"noopener\">I2C \u2013 What\u2019s That?<\/a><\/li>\n<li><a href=\"https:\/\/de.wikibooks.org\/wiki\/C-Programmierung_mit_AVR-GCC\/_I2C\" target=\"_blank\" rel=\"noopener\">Wikibooks Artikel<\/a><\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/I%C2%B2C\" target=\"_blank\" rel=\"noopener\">Wikipedia article on I2C<\/a><\/li>\n<li><a href=\"http:\/\/www.nxp.com\/documents\/user_manual\/UM10204.pdf\" target=\"_blank\" rel=\"noopener\">Standards doc<\/a> &#8211; Phillips Semiconductor became NXP a few years back; this is the official standards doc for I2C.<\/li>\n<li><a href=\"http:\/\/www.i2c-bus.org\/i2c-bus\/\">I2C primer<\/a> &#8211; The official primer on I2C and related technologies.<\/li>\n<li><a href=\"http:\/\/www.lm-sensors.org\/wiki\/I2CTools\" target=\"_blank\" rel=\"noopener\">Linux tools for I2C<\/a> &#8211; A nice set of tools for working with I2C and related buses in embedded Linux environments, like pcDuino or Raspberry Pi<\/li>\n<li><a href=\"https:\/\/forum.arduino.cc\/index.php?topic=197360.0\" target=\"_blank\" rel=\"noopener\">Arduino Playground &#8211; I2cScanner<\/a><\/li>\n<\/ul>\n<p><strong>Probleme aus der Praxis:<\/strong><\/p>\n<ul>\n<li>Manche I2C Devices erfordern 5v, andere laufen an 3.3V (akzeptieren aber auch 5V), andere sind nicht 5V-tolerant. Man lese immer das Datenblatt genau!<\/li>\n<li>Je nach Pegel ist der Einsatz eines Level Shifters n\u00f6tig. Verschiedene L\u00f6sungen sind m\u00f6glich (s.unten).<\/li>\n<li>Fertig aufgebaute Module enthalten h\u00e4ufig schon die ben\u00f6tigten Pullup-Widerst\u00e4nde. Dies kann zu Problemen f\u00fchren. Manchmal gibt es auftrennbare L\u00f6tbr\u00fccken zu den Pullups..<\/li>\n<li>Man behalte die Buskapazit\u00e4t bei langen Leitungen im Auge. Bei Bedarf kontrolliere man die Signalform mit einem <a href=\"http:\/\/www.dsscircuits.com\/articles\/47-effects-of-varying-i2c-pull-up-resistors\" target=\"_blank\" rel=\"noopener\">Oszilloskop<\/a>.<\/li>\n<li>Softwareseitig variiert die Ansteuerung (I2C in Hardware oder in SW realisiert). Dies hat einen Einfluss auf die maximale Busgeschwindigkeit.<\/li>\n<li>Bei vermuteten logischen Problem hilft ein <a href=\"http:\/\/wp.andreas.bieri.name\/myblog\/index.php\/2015\/04\/04\/ein-vielseitiger-pirat\/\">Bus Pirate<\/a>\u00a0oder auf h\u00f6herer Ebene das geniale, aber wenig bekannte <a href=\"http:\/\/realterm.sourceforge.net\/#I2C%20Bus\" target=\"_blank\" rel=\"noopener\">Realterm<\/a>\u00a0(Adapter n\u00f6tig).<\/li>\n<\/ul>\n<p>Ein sch\u00f6nes Trivial-Problem aus der Praxis: mit einem ESP8266 Board konnte ich ein BlinkM I2C Modul nicht ansprechen. Allerdings fand ein anderer I2C Scanner das Modul&#8230;Warum? In seinem Code wurde der SDA\/SCL Pin gar nicht explizit gesetzt\u00a0(Wire-begin()). Laut Doku beim ESP w\u00e4re der default\u00a0SDA = D1 = GPIO5 und\u00a0SCL = D2 = GPIO4 so anzugeben:\u00a0Wire.begin(2,1). In meinem Code stand das so, da ich Ports immer explizit festlege (keine Annahmen, sondern die Voraussetzungen immer ausschreiben).<br \/>\nL\u00f6sung: es ist ein Dokumentationsfehler der Wire Library f\u00fcr ESP: in der Wire.begin Anweisung muss die GPIO Nummer stehen, also Wire.begin(4,5).\u00a0Man merkt das daran, dass man mit Wire.begin(2,1) komische Zeichen im Arduino IDE Serial Monitor hat, Java Fehler&#8230;<\/p>\n<p><strong>Level Shifting<\/strong><\/p>\n<ul>\n<li>Ausf\u00fchrliche\u00a0<a href=\"http:\/\/www.mikrocontroller.net\/articles\/Pegelwandler\" target=\"_blank\" rel=\"noopener\">Diskussion <\/a>im Mikrocontroller.net mit vielen IC-Vorschl\u00e4gen<\/li>\n<li>Verschiedene M\u00f6glichkeiten laut <a href=\"http:\/\/playground.arduino.cc\/Main\/I2CBi-directionalLevelShifter\" target=\"_blank\" rel=\"noopener\">http:\/\/playground.arduino.cc\/Main\/I2CBi-directionalLevelShifter<\/a><\/li>\n<li>Insbesondere diese standard Methode\u00a0mit einem MOSFET Level Shifter mit einem IRF3711.<img loading=\"lazy\" class=\"wp-image-1295 aligncenter\" src=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg\" alt=\"i2c-1\" width=\"480\" height=\"333\" srcset=\"http:\/\/wp.andreas.bieri.name\/myblog\/wp-content\/uploads\/2016\/06\/i2c-1.jpg 780w, http:\/\/wp.andreas.bieri.name\/myblog\/wp-content\/uploads\/2016\/06\/i2c-1-300x208.jpg 300w, http:\/\/wp.andreas.bieri.name\/myblog\/wp-content\/uploads\/2016\/06\/i2c-1-768x533.jpg 768w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/li>\n<li>Adafruit <a href=\"https:\/\/www.adafruit.com\/product\/757\" target=\"_blank\" rel=\"noopener\">4-channel I2C-safe Bi-directional Logic Level Converter &#8211; BSS138<\/a><\/li>\n<li>Adafruit\u00a0<a href=\"https:\/\/www.adafruit.com\/products\/1787\" target=\"_blank\" rel=\"noopener\">74AHCT125 &#8211; Quad Level-Shifter (3V to 5V) &#8211; 74AHCT125<\/a>\u00a0up-shift, unidrectional<\/li>\n<li>Adafruit\u00a0<a href=\"https:\/\/www.adafruit.com\/products\/1875\" target=\"_blank\" rel=\"noopener\">TXB0104 Bi-Directional Level Shifter &#8211; TXB0104<\/a><\/li>\n<\/ul>\n<hr \/>\n<p><em>Update 20170717<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr die bastelnden Vereinskollegen habe ich n\u00fctzliche Informationen zum I2C Bus gesammelt. Meine eigenen Erfahrungen mit meinem I2C-Modul Zoo habe ich in einen zweiten Artikel hier verfrachtet. Zum Nachlesen: Dreiteilige Serie im Elektor-Heft (Teil 2: 2017\/7 pp. 38-43; Teil 1: 2017\/5 pp. 42-45) https:\/\/learn.sparkfun.com\/tutorials\/i2c Mikrocontroller.net I2C I2C \u2013 What\u2019s That? Wikibooks Artikel Wikipedia article on [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[18,62],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>I2C Grundlagen - 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:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"I2C Grundlagen - Merkbar.\" \/>\n<meta property=\"og:description\" content=\"F\u00fcr die bastelnden Vereinskollegen habe ich n\u00fctzliche Informationen zum I2C Bus gesammelt. Meine eigenen Erfahrungen mit meinem I2C-Modul Zoo habe ich in einen zweiten Artikel hier verfrachtet. Zum Nachlesen: Dreiteilige Serie im Elektor-Heft (Teil 2: 2017\/7 pp. 38-43; Teil 1: 2017\/5 pp. 42-45) https:\/\/learn.sparkfun.com\/tutorials\/i2c Mikrocontroller.net I2C I2C \u2013 What\u2019s That? Wikibooks Artikel Wikipedia article on [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/\" \/>\n<meta property=\"og:site_name\" content=\"Merkbar.\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-12T19:10:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg\" \/>\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=\"2 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/#website\",\"url\":\"http:\/\/52.29.166.97\/myblog\/\",\"name\":\"Merkbar.\",\"description\":\"IT, Elektronik und Mathematik\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.29.166.97\/myblog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg\",\"contentUrl\":\"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#webpage\",\"url\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/\",\"name\":\"I2C Grundlagen - Merkbar.\",\"isPartOf\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#primaryimage\"},\"datePublished\":\"2016-06-12T19:10:00+00:00\",\"dateModified\":\"2016-06-12T19:10:00+00:00\",\"author\":{\"@id\":\"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\"},\"breadcrumb\":{\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"http:\/\/52.29.166.97\/myblog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"I2C Grundlagen\"}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d\",\"name\":\"wp_blogadmin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.29.166.97\/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:\/\/wp.andreas.bieri.name\/myblog\/author\/wp_blogadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"I2C Grundlagen - 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:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/","og_locale":"de_DE","og_type":"article","og_title":"I2C Grundlagen - Merkbar.","og_description":"F\u00fcr die bastelnden Vereinskollegen habe ich n\u00fctzliche Informationen zum I2C Bus gesammelt. Meine eigenen Erfahrungen mit meinem I2C-Modul Zoo habe ich in einen zweiten Artikel hier verfrachtet. Zum Nachlesen: Dreiteilige Serie im Elektor-Heft (Teil 2: 2017\/7 pp. 38-43; Teil 1: 2017\/5 pp. 42-45) https:\/\/learn.sparkfun.com\/tutorials\/i2c Mikrocontroller.net I2C I2C \u2013 What\u2019s That? Wikibooks Artikel Wikipedia article on [&hellip;]","og_url":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/","og_site_name":"Merkbar.","article_published_time":"2016-06-12T19:10:00+00:00","og_image":[{"url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg"}],"twitter_card":"summary","twitter_misc":{"Verfasst von":"wp_blogadmin","Gesch\u00e4tzte Lesezeit":"2 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.29.166.97\/myblog\/#website","url":"http:\/\/52.29.166.97\/myblog\/","name":"Merkbar.","description":"IT, Elektronik und Mathematik","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.29.166.97\/myblog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"ImageObject","@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#primaryimage","inLanguage":"de","url":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg","contentUrl":"http:\/\/wp.andreas.bieri.name\/wp-content\/uploads\/2016\/06\/i2c-1.jpg"},{"@type":"WebPage","@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#webpage","url":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/","name":"I2C Grundlagen - Merkbar.","isPartOf":{"@id":"http:\/\/52.29.166.97\/myblog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#primaryimage"},"datePublished":"2016-06-12T19:10:00+00:00","dateModified":"2016-06-12T19:10:00+00:00","author":{"@id":"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d"},"breadcrumb":{"@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/wp.andreas.bieri.name\/myblog\/2016\/06\/12\/i2c-grundlagen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"http:\/\/52.29.166.97\/myblog\/"},{"@type":"ListItem","position":2,"name":"I2C Grundlagen"}]},{"@type":"Person","@id":"http:\/\/52.29.166.97\/myblog\/#\/schema\/person\/47691942dec3f2eb9d34bb8b5507870d","name":"wp_blogadmin","image":{"@type":"ImageObject","@id":"http:\/\/52.29.166.97\/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:\/\/wp.andreas.bieri.name\/myblog\/author\/wp_blogadmin\/"}]}},"_links":{"self":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts\/1242"}],"collection":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/comments?post=1242"}],"version-history":[{"count":0,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/posts\/1242\/revisions"}],"wp:attachment":[{"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/media?parent=1242"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/categories?post=1242"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/wp.andreas.bieri.name\/myblog\/wp-json\/wp\/v2\/tags?post=1242"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}