{"id":3525,"date":"2017-01-27T10:43:41","date_gmt":"2017-01-27T09:43:41","guid":{"rendered":"http:\/\/www.generationrobots.com\/blog\/?p=3525"},"modified":"2023-03-29T11:42:05","modified_gmt":"2023-03-29T09:42:05","slug":"analyse-des-i2c-buses-mit-einem-logikanalysator-mit-lego-mindstorms","status":"publish","type":"post","link":"https:\/\/www.generationrobots.com\/blog\/de\/analyse-des-i2c-buses-mit-einem-logikanalysator-mit-lego-mindstorms\/","title":{"rendered":"Analyse des I2C Buses mit einem Logikanalysator mit Lego Mindstorms"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-verwendung-des-100-mhz-16-kanal-usb-logik-analysators-zur-uberwachung-des-i2c-buses-des-lego-nxt-bausteins\">Verwendung des 100 MHz, 16-Kanal, USB Logik Analysators zur \u00dcberwachung des I2C Buses des Lego NXT Bausteins<\/h2>\n\n\n\n<p>Dieses Tutorial zeigt wie Sie den 100 MHz, 16-Kanal, USB Logik Analysator verwenden. Wir werden als n\u00e4chstes die Verbindung zwischen dem Lego Mindstorms NXT Baustein und einem NXT Ultraschallsensor abh\u00f6ren. Der Ultraschallsensor wird ist standardm\u00e4\u00dfg im Lego Mindstorms NXT Robotikset  geliefert. <br \/>Bezugnehmend auf die technischen Hintergr\u00fcnde, ist dieses Tutorial f\u00fcr jene mit Gedacht, welche ein wenig Erfahrung in Elektronik mit sich bringen.<\/p>\n\n\n\n<p>Lassen Sie uns nun in die wunderbare Welt der elektronischen Kommunikation unter Verwendung von I2C eintauchen!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-was-ist-i2c\">Was ist I2C?<\/h2>\n\n\n\n<p>F\u00fcr all jene, die es nicht wissen sollte, kann etwas geschichtlicher Hintergrund nicht schaden. I2C ist ein Kommunikationsbus und wurde bereits im Jahr 1982 von Phillips entwickelt. Trotz seines Alters wird, wurde der I2C Kommunikationsstandard in letzter Zeit immer beliebter bei Programmierern f\u00fcr Mikrokontroller. Daher ist es nicht verwunderlich, dass der Lego NXT Baustein I2C verwendet. Jedewede Kommunikation zwischen dem intelligenten Lego Mindstorms NXT Baustein und Sensoren wird \u00fcber das I2C Protokoll \u00fcbertragen. Die Kommunikation mit Motoren basiert auf PWM und nicht I2C. Ein gutes Verst\u00e4ndnis \u00fcber I2C ist daher essential f\u00fcr Robotikingenieure, welche Ihre eigenen Sensoren oder eigene Schaltungen mit dem Lego Mindstorm NXT Roboter verbinden wollen.<\/p>\n\n\n\n<p>I2C ist ein halb-duplex, bi-direktionales, synchroner, serieller Datenbus. Es erm\u00f6glicht einfache und effiziente Kommunikation zwischen einem Mikrokontroller und Aktuatoren und Sensoren. Ohne zusehr ins Detail zu gehen, aber um sicherzustellen, dass Sie in der Lage sind Ihre eigenen Sensoren zu bauen, werden wir uns nun die Grundz\u00fcge der I2C Kommunikation, des NXT Bausteins und desssen Aktuatoren, ansehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-wie-funktioniert-das-i2c-protokoll-im-master-slave-modus\">Wie funktioniert das I2C Protokoll im Master-Slave Modus?<\/h3>\n\n\n\n<p>Eine I2C Kommunikation funktioniert nach dem Master-Slave Prinzip. In einer \u00dcbertragung zwischen dem NXT Baustein und dessen Sensoren, ist nat\u00fcrlich der NXT Baustein der Master und alle Sensoren sind Slaves (Auch wenn diese technisch in der Lage sind Master zu sein). Daher muss der Aufbau jeder Kommunikation immer \u00fcber eine Anfrage (Request) \u00fcber den NXT Baustein erfolgen.<\/p>\n\n\n\n<p>Das unten gezeigte Diagramm zeigt das Master-Slave Verhalten des Bausteins und dessen Sensor.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/I2C-Lego-NXT-Slave-Master.jpg\" alt=\"I2C Kommunication I2C zwischen dem Lego Mindstorms NXT Baustein und dem Lego Mindstorms Ultraschallsensor=\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Wie oben angef\u00fchrte Diagramm zeigt sind vier Verbindugen f\u00fcr die Kommunikation zwischen sensor und NXT Baustein notwendig (das von Ihnen verwendete NXT Kabel hat genau 4 Litzen):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GND (Masse) ist das Referenzpotential<\/li>\n\n\n\n<li>VCC ist die Versorgungsspannung des Sensors<\/li>\n\n\n\n<li>SCL ist die Ader f\u00fcr die Uhrzeit, um die Transaktion zwischen beiden Einheiten zu Synchronisieren.<\/li>\n\n\n\n<li>SDA ist die Ader, welche f\u00fcr die Daten\u00fcbertragung zwischen zwei Einheiten genutzt wird.<\/li>\n<\/ul>\n\n\n\n<p>Die beiden Letzgennanten Adern sind die einzig interessante f\u00fcr uns, daher werden wir diese nun abh\u00f6ren.<\/p>\n\n\n\n<p>Wie funktioniert das I2C Protokoll? Das Grundelement wird \u00dcbertragung genannt. Diese beginnt mit einem START bit und endet mit einem STOP bit. Zwischen diesen beiden Bits findet die eigentlich \u00dcbertragung statt. Im Master-Slave Modus startet immer der Master die \u00dcbetragung. Die erste Aktion des Master ist es, die I2C Adresse des Sensors den Bus zu schreiben. Stecken Sie nun den NXT Ultraschallsensor direkt am Port 1 an (zum Beispiel), dann gibt es nur einen Sensor und Sie riskieren keinen Konflikt. Sollten Sie allerdings einen Sensor Multiplexer verwenden, k\u00f6nnen Sie bereits mehr als einen Sensor am gleichen Port verwenden. Daher wird die I2C Adresse ben\u00f6tigt.<\/p>\n\n\n\n<p>Das unten gezeigte Bild zeigt nur den Aufbau einer Verbindung. Daf\u00fcr wurde die Software Verwendet welche mit dem 100 MHz, 16-channel, USB Logikanalysator von Saleae mitgeliefert wird. Die obere Kanal zeigt das SCL (clock) Signal, w\u00e4hrend der untere Kanal die Spannung des SDA (Daten) Signals anzeigt.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Viewing-I2C-Transaction-Logic-Analyser-Saleae.jpg\" alt=\"visualiesierung einer I2C kommunikations mit dem logikanalysator von salao\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Wie das obige Bild zeigt, beginnt eine \u00dcbertragung mit dem START bit, ausgedr\u00fcckt durch eine fallende Flank im Datensignal, w\u00e4hrend das SCL auf \u00ab\u00a0high\u00a0\u00bb steht. Danach folgen 8 Datenbits.Die ersten 6 Bits des SDA Signals sind 0 (low). Das 7. Bit steht auf 1 und das 8. auf 0. Dies alles bedeutet, dass 0x02 geschrieben wurde, in diesem Fall die I2C Adresse des NXT Ultraschallsensors. Wie zuvor erw\u00e4hnt, ist die erste Aktion des Master die I2C Adresse den Sensor zu schreiben, welcher mit diesem Kommunizieren will. Das 8. Bit steht auf 0 und kennzeichnet, dass es sich um eine schreibende Nachricht gehandelt hat.<\/p>\n\n\n\n<p>Das 9. Bit dient zur Best\u00e4tigung (ACK &#8211; acknowledgement) und ist 0. Dies dient auch als Best\u00e4tigung des Sensors mit der Adresse 0x02 und besagt \u00ab\u00a0Sensor vorhanden und bereit f\u00fcr weitere Anfragen\u00a0\u00bb.<\/p>\n\n\n\n<p>Das Bild zeigt auch eines der vorteile von Saleae&rsquo;s Logikanalysator, welches auch die volle Interpretation der Daten ausschreibt, so wie wir das gerade getan haben, indem wir die Potentialdifferenz als Signal interpretiert haben. Wir erhalten die Nachricht \u00ab\u00a0Setup Write to [&lsquo;2&rsquo;] + ACK\u00a0\u00bb, was exakt der \u00dcbertragung entspricht, welche wir gerade beschrieben haben.<\/p>\n\n\n\n<p>Nun das wir mehr \u00fcber I2C wissen und auch schon einen Blick auf den Logikanalysator von Saleae geworfen haben, schauen wir uns doch mal an was wir wirklich brauchen, um eine echte Schaltung zu bauen, die dieses Signal erzeugt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verwendung-des-logikanalysators-von-saleae-zur-uberwachung-der-i2c-kommunikation\">Verwendung des Logikanalysators von Saleae zur \u00dcberwachung der I2C Kommunikation<\/h3>\n\n\n\n<p>Das folgende Diagramm zeigt den Aufbau, wie mit dem Saleae Logikanalysator eine I2C Kommunikation zwischen dem Lego Mindstorms NXT Baustein und einem Lego NXT Ultraschallsensor abgeh\u00f6rt werden kann.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Connection-Saleae-Logic-Analyser.jpg\" alt=\"Verbindung des Logikanalyser mit Lego NXT\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Ist die Schaltung aufgebaut, wird noch die Software f\u00fcr den Logikanalysator ben\u00f6tigt, welche heruntergeladen und installiert werden muss. Die Software k\u00f6nnen Sie hier herunterladen <a class=\"catalogue\" title=\"Software zur signal \u00fcberwachung von Saleaes USB Logik Analysator\" href=\"http:\/\/www.saleae.com\/downloads\" target=\"_blank\" rel=\"noopener\">http:\/\/www.saleae.com\/downloads<\/a><\/p>\n\n\n\n<p>Nach der Installation der Software, stecken Sie den Saleae Logikanalysator mit dem USB Kabel an Ihren PC an und starten die Software. Das LED des Logikanalysators sollte nun zu blinken beginnen. Die Benutzeroberfl\u00e4che sollte nurn folgenderma\u00dfen aussehen:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Software-interface-Saleae-Logic-Analyser.jpg\" alt=\"Softwareinterface von saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Nun m\u00fcssen wir den Logikanalysator konfigurieren, um eine I2C Verbindung richtig abzuh\u00f6ren.<\/p>\n\n\n\n<p>Zuerst, sehen wir uns den analysierten Spannungsbereich an. Dazu gehen Sie in \u00ab\u00a0Options\/Logic16 input voltages\u00a0\u00bb und w\u00e4hlen \u00ab\u00a03.6V bis 5V\u00a0\u00bb.<\/p>\n\n\n\n<p>Zur Verbesserung der Lesbarkeit gehen in \u00ab\u00a0Options\/Display\u00a0\u00bb und w\u00e4hlen \u00ab\u00a0Ascii\u00a0\u00bb.<\/p>\n\n\n\n<p>Ist das auch erledigt, m\u00fcssen Sie der Software nur noch mitteilen, dass das zu \u00fcberwachende Signal I2C verwendet. F\u00fcr diese Einstellung klicken Sie neben Analyzers auf das \u00ab\u00a0+\u00a0\u00bb und w\u00e4hlen I2C.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Choosing-I2C-Protocol-Saleae-Logic-Analyser-Software.JPG\" alt=\"i2c protokoll und logicanalyser von saleae\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Daraufhin \u00f6ffnet sich ein neues Fenster:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Renaming-Channels-Saleae-Logic-Analyser.JPG\" alt=\"umgebennung der kan\u00e4le in der software\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Achten Sie darauf SDA und SCL den korrekten Kan\u00e4len zuzuordnen. Dies h\u00e4ngt nun davon ab wo Sie diese beiden Leitungen am Logikanalysator angeschlossen haben. Mit einem Klick auf \u00ab\u00a0Ok\u00a0\u00bb k\u00f6nnen Sie nun noch personalisierte Namen f\u00fcr beide Kan\u00e4le vergeben.<\/p>\n\n\n\n<p>Nun muss die Abtastrate gew\u00e4hlt werden. Wie das Bild schon zeigt w\u00e4hlen wir 100M Samples bei 16 MHz, was einer Analysezeit von 6.25 Sekunden entspricht. F\u00fcr I2C Kommunikation sind mindestens 2 MHz empfohlen, jedoch nicht unbedingt notwendig. Allerdings muss man bedenken, dass wir mit einer schnelleren Abtastrate ein geringeres Risiko haben irgendwelche Daten zu verpassen.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Frequency-sampling-signal-analyser-logic-Saleae.jpg\" alt=\"wahl der abstastfrequenz\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Nun ist alles bereit, um unseren Analysator zu testen. Nun sind wir bereit Daten zu erfassen, aber was wollen wir genau lernen? Wie bringen wir den Sensor dazu uns seine Versionsnummer zu schicken? Der folgende NXC Code f\u00fchrt genau diese Aufgabe aus. Zur Erinnerung, NXC ist eine auf C basierende Sprache f\u00fcr Lego Mindstorms NXT. Die verwendete Sprache ist hier allerdings recht ungebedeutend, da der Analysator keinen Analyse des Programmes macht, welches die Kommunikation aufbaut. Der Analysator h\u00f6rt Nachrichten am I2C Bus ab und analysiert diese. Daher k\u00f6nnen Programme an diesem Punkt in jeder Programmiersprache geschrieben werden. In folgender Abbildung finden Sie einen Beispielcode. Ich denke der Code sollte trotz franz\u00f6sischer Kommentare klar und verst\u00e4ndlich sein.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/NXC-Source-Code-getting-NXT-Sonar-version.JPG\" alt=\"NXC code, uim die version des ultraschallsensors anzuzeigen\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Nun klicken Sie auf \u00ab\u00a0Start\u00a0\u00bb in der Saleae Software und starten das Programm auf Ihrem NXT Baustein. Ein neues Fenster erscheint in der Mitte Ihrer Software, welche besagt, dass die I2C \u00dcbertragung gerade analysiert wird.<\/p>\n\n\n\n<p>Ist die Analyse abgeschlossen, scrollen Sie mit Ihrer Maus ganz raus. Dadurch sollten Sie einen unterschiedlichen Bereich auf Ihrem Bildschirm sehen.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/I2C-Frame-in-Saleae-Logic-Analyser.jpg\" alt=\"herausgezoomtes bild des software des logianalyzers\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Positionieren Sie nun Ihren Mauszeiger auf dem sichtbaren Ausschlag (siehe rot markierte Fl\u00e4che im vorherigen Bild) und zoomen hinein. Daraufhin sollten Sie eine Ansicht \u00e4hnlich dem folgenden Bild erhalten:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/img\/cms\/articles%20et%20tutoriels\/analyseur%20I2C\/Precise-I2C-Frame-in-Saleae-Logic-Analyser.jpg\" alt=\"analysierter I2C frame\"\/><\/figure>\n\n\n\n<div align=\"center\"><\/div>\n\n\n\n<p>Was Sie hier sehen ist die I2C Kommunikation zwischen dem NXT Baustein und dem Ultraschallsensor. Hier k\u00f6nnen wir \u00fcberpr\u00fcfen, welche Daten tats\u00e4chlich gesendet wurden. Tats\u00e4chlich sehen wir, dass inBuff[0]=0x02 ist, welcher die Schreibeadresse des Ultraschallsensors ist. Als n\u00e4chstes wird inBuff[1] \u00fcbertragen, um zum Register 0 \u00fcberzugehen, welcher die Sensorversion beinhaltet. Dieser Frame ist das Ergebnis der Funktion \u00ab\u00a0I2CBytes\u00a0\u00bb. Diese sendet eine START Signal (gr\u00fcner Kreis), gefolgt von \u00ab\u00a0inBuff\u00a0\u00bb und einem STOP Signal (roter Kreis).<\/p>\n\n\n\n<p>Sobald die erste \u00dcbetragung abgeschlossen ist, beginnt die n\u00e4chste \u00dcbertragung, welche \u00fcber ein \u00ab\u00a0Neustart\u00a0\u00bb Signal gekennzeichnet wird (zweiter gr\u00fcner Kreis), gefolgt von der Leseadresse (0x03) des Ultraschallsensors. Daraufhin wartet der Sensor im Gegenzug auf eine bestimmte Anzahl von Daten, welche der Gr\u00f6\u00dfe der Variable entspricht (4 in diesem Fall). Klar zu sehen ist, dass sobald die letzten Daten empfangen wurden der NXT Baustein keine ACK sendet, sondern ein NAK. Dies bedeutet, dass der Baustein nicht l\u00e4nger irgendetwas vom Slave erwartet. Die \u00dcbertragung wird \u00fcber ein STOP Signal beendet (eine steigende Kante, w\u00e4hrend der Taktgeber (SCL) auf 1 ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-zusammenfassung\">Zusammenfassung<\/h3>\n\n\n\n<p>Mit diesem relativ deutlichen Beispiel k\u00f6nnen wir klar den Nutzen dieses Logikanalysators erkennen. Auch wenn manche sich noch nicht ganz \u00fcber diese wundervolle Technologie im klaren sind, wird dieses Ger\u00e4t helfen, sehr viele Programme zu Debuggen, da schnell und einfach \u00dcbertragungen zwischen einen oder mehreren Kontrollern und Sensoren oder Motoren analysiert werden k\u00f6nnen. Solch ein Ger\u00e4t ist heutzutage unerl\u00e4sslich, um die Grundz\u00fcge von elekronischer Kommunikation zu lernen. Weitere Pluspunkte erh\u00e4lt dieses Ger\u00e4t durch seine einfache Bedienung und die vielen Zusatzleistungen. Durch die Kenntnis der meisten elektronischen Standards wie I2C, SPI, 1-Wire und vielen anderen, erhalten Sie eine klare, lesbare, speicherbare und einfach interpretation der gemessenen Zeitlinie.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Verwendung des 100 MHz, 16-Kanal, USB Logik Analysators zur \u00dcberwachung des I2C Buses des Lego NXT Bausteins Dieses Tutorial zeigt wie Sie den 100 MHz, 16-Kanal, USB Logik Analysator verwenden. Wir werden als n\u00e4chstes die Verbindung zwischen dem Lego Mindstorms NXT Baustein und einem NXT Ultraschallsensor abh\u00f6ren. Der Ultraschallsensor wird ist standardm\u00e4\u00dfg im Lego Mindstorms[&#8230;]<br \/> <a class=\"button\" href=\"https:\/\/www.generationrobots.com\/blog\/de\/analyse-des-i2c-buses-mit-einem-logikanalysator-mit-lego-mindstorms\/\" style=\"float:right;\">Read this article &gt;&gt;<\/a><\/p>\n","protected":false},"author":188,"featured_media":3524,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1130],"tags":[],"class_list":["post-3525","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bildung"],"_links":{"self":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/comments?post=3525"}],"version-history":[{"count":2,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3525\/revisions"}],"predecessor-version":[{"id":12725,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/posts\/3525\/revisions\/12725"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media\/3524"}],"wp:attachment":[{"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/media?parent=3525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/categories?post=3525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.generationrobots.com\/blog\/wp-json\/wp\/v2\/tags?post=3525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}