{"id":2544,"date":"2013-06-09T10:21:13","date_gmt":"2013-06-09T08:21:13","guid":{"rendered":"http:\/\/www.brennecke.org\/?page_id=2544"},"modified":"2013-06-09T14:05:17","modified_gmt":"2013-06-09T12:05:17","slug":"speicher-oszilloskop","status":"publish","type":"page","link":"https:\/\/www.brennecke.org\/?page_id=2544","title":{"rendered":"Speicher-Oszilloskop"},"content":{"rendered":"<h2>Grundlagen<\/h2>\n<p>Das Mikrocontroller-Lab bietet mit der &#8222;Messwerterfassung&#8220; eine einfache Methode an, um Daten grafisch in einem x-y-Raster darzustellen. Die Daten werden dazu einfach hintereinander \u00fcber die serielle Schnittstelle geschickt; zul\u00e4ssig ist ein Wertebereich von 0.199, was in etwa der technisch darstellbaren Aufl\u00f6sung entspricht (plus-minus ein paar Pixel f\u00fcr Texte).<\/p>\n<pre>  Send_Command(MODE_QUIT);  \/\/ Aktuellen Modus verlassen, kommt immer als erstes\r\n  Send_Command(MODE_MESSWERTE);   \/\/ Messwerterfassung wird aktiviert   \r\n  Send_Command(MESSWERTE_WERTE);  \/\/ ist eigentlich \u00fcberfl\u00fcssig, weil das der Standardfall ist\r\n\r\n  for (;;)\r\n  {\r\n\r\n  \/\/ Jetzt senden wir den Wert ganz einfach an die Grafikeinheit\r\n      Send_Value(x);\r\n  }<\/pre>\n<p>Der ben\u00f6tigte Code ist also sehr einfach. Allerdings ist die serielle Schnittstelle auf 19.200 Bit \/ Sekunde limitiert. Das sind maximal 2400 Werte pro Sekunde, bei 256 Zeichenpunkten (von links nach rechts) w\u00fcrde eine Zeile daher mit knapp 10Hz dargestellt werden. Dies w\u00fcrde bei einer Echtzeitdarstellung gerade einmal f\u00fcr Signale bis ca 100 Hz ausreichen &#8211; zu wenig f\u00fcr eine Oszilloskopanwendung.<\/p>\n<p>Die eigentliche Erfassung eines analogen Messwerts geht jedoch weitaus schneller vonstatten. Sie ben\u00f6tigt zwar einige Takte, aber bei 16 MHz Taktfrequenz bleibt bei einer maximalen Samplingfrequenz von etwa 75 kHz gen\u00fcgend Zeit, auch Signale mit 10 kHz und mehr zu erfassen. Das ist immer noch nicht viel, aber es gen\u00fcgt f\u00fcr NF-Experimente &#8211; das EE2007-Oszilloskop wird in den meisten Tests auch nicht h\u00e4rter gefordert. Dieses Beispiel erreicht diese Werte allerdings nicht &#8211; es ist in C geschrieben und daher bei der Datenerfassung wegen der schlechteren Codeoptimierung langsamer.<\/p>\n<h2>Entkopplung<\/h2>\n<p>Um nun die relativ langsame Grafikausgabe zu umgehen, entkoppeln wir die Datenerfassung von der Ausgabe. Dazu werden die 256 Messwerte von links nach rechts in einem Rutsch gemessen und zwischengespeichert:<\/p>\n<pre>unsigned int value[256];\t\/\/ 512 Bytes Datenspeicher\r\nunsigned int delay=50;\t\t\/\/ 100 \u00b5s Pause zwischen den Messungen als Voreinstellung\r\ndouble Value; \r\n\r\nfor (i=0; i&lt;255; i++)\t\/\/ Messen...\r\n{\r\n   Value = ADCW;       \/\/ A\/D-Wandler auslesen, Wertebereich 0..1023 (10 Bit)\r\n   Value = Value \/ 5.12 + 33;     \/\/ In Spannungswert umrechnen\r\n   value[i] = round(Value);       \/\/ in Array einf\u00fcgen\r\n   _delay_us(delay);              \/\/ Verz\u00f6gerung bis zur n\u00e4chsten Messung (Zeitbasis)\r\n}<\/pre>\n<p>Die Zeitbasis wird dabei durch eine Verz\u00f6gerung in Mikrosekundengr\u00f6\u00dfe erreicht. Damit kann man das Signal beliebig dehnen bis zur maximalen Messfrequenz mit dem Wert 0 f\u00fcr &#8222;delay. Die Abtastung erfolgt mit einer Varianz von wenigen Taktzyklen weitgehend linear. Man hat dann 256 Messwerte, die das Signal in einem gewissen Zeitabschnitt repr\u00e4sentieren. Wenn die Abtastfrequenz hoch genug war, ist das Signal deutlich zu erkennen. Da wir nur sich regelm\u00e4\u00dfig wiederholende Signale betrachten, ist es unerheblich, ob wie beim R\u00f6hren-Oszilloskop das <i>gesamte<\/i> Signal dargestellt wird oder nur ein Teil davon.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Signal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2556\" alt=\"Oszi Signal\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Signal-300x168.png\" width=\"300\" height=\"168\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Signal-300x168.png 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Signal.png 799w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Zeitfenster.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2557\" alt=\"Oszi Zeitfenster\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Zeitfenster-300x152.png\" width=\"300\" height=\"152\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Zeitfenster-300x152.png 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Zeitfenster.png 799w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastwerte.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2555\" alt=\"Oszi Abtastwerte\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastwerte-300x161.png\" width=\"300\" height=\"161\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastwerte-300x161.png 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastwerte.png 799w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastrate.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2554\" alt=\"Oszi Abtastrate\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastrate-300x157.png\" width=\"300\" height=\"157\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastrate-300x157.png 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/Oszi-Abtastrate.png 799w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Die Bilder zeigen das eingehende Signal, dessen Abtastung innerhalb eines Zeitfensters und die gemessenen Werte bei unterschiedlichen Abtastfrequenzen.<\/p>\n<h2>Synchronisation<\/h2>\n<p>Wie stellt man nun den Sync sicher? Dazu muss man sich einerseits vergegenw\u00e4rtigen, dass wir es\u00a0 mit einem periodischen Signal zu tun haben &#8211; das Signal wiederholt sich st\u00e4ndig in derselben Weise. Man kann also davon ausgehen, dass in jedem Satz von 256 Messwerten eine gewisse \u00c4hnlichkeit zum vorhergehenden Satz Messwerte steckt &#8211; oder eben nicht, dann hat sich das Signal aber ge\u00e4ndert und muss sowieso komplett neu dargestellt werden.<\/p>\n<p>Zum anderen haben wir nach der Messung fast beliebig viel Zeit, das Signal auszugeben (von der Geschwindigkeit des Prozessors aus gesehen). Die Verarbeitung muss nicht in Echtzeit geschehen, und sie darf auch deutlich l\u00e4nger als die eigentliche Messung dauern. Eine Aktualisierung in jeder halben Sekunde gen\u00fcgt durchaus, um das Signal darzustellen &#8211; nur flackern bzw. sich verschieben sollte es eben nicht.<\/p>\n<p>Um nun eine deckungsgleiche Darstellung zu erreichen, durchsuchen wir einfach das neue Signal nach dem ersten Maximum &#8211; das, nach dem es wieder abw\u00e4rts geht. An dieser Stelle startet dann die Ausgabe auf dem Bildschirm. Auf diese Weise beginnen die Bilder grunds\u00e4tzlich am Ende des ersten Maximums, und so k\u00f6nnen auch Rechtecksignale sauber dargestellt werden. Um nun sicherzustellen, dass auf jeden Fall der komplette Bildschirm von links nach rechts beschrieben werden kann, werden ein paar mehr Messungen durchgef\u00fchrt als n\u00f6tig, so dass man innerhalb der Messung den Startpunkt verschieben kann.<\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5446.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2552\" alt=\"IMG_5446\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5446-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5446-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5446.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5445.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2551\" alt=\"IMG_5445\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5445-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5445-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5445.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5447.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2553\" alt=\"IMG_5447\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5447-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5447-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5447.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5444.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2550\" alt=\"IMG_5444\" src=\"http:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5444-300x225.jpg\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5444-300x225.jpg 300w, https:\/\/www.brennecke.org\/wp-content\/uploads\/2013\/06\/IMG_5444.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Die Bilder zeigen ein Sinus- und ein Dreiecksignal und mit einer Frequenz von 200 Hz, das von einem Funktionsgenerator auf XR2206-Basis erzeugt wurde. Das Sinussignal wurde mit unterschiedlichen Zeitablenkungen aufgenommen.<\/p>\n<h2>Speichern des Bildes<\/h2>\n<p>Eine dauerhafte Speicherung ist mit dem gew\u00e4hlten System nicht zu bauen, da man dazu auf den Speicher des Grafikcontrollers zugreifen m\u00fcsste. Ein Einfrieren des Bildes ist aber problemlos m\u00f6glich, indem einfach keine weiteren Messwerte gesandt werden. Der OK-Knopf ist dazu doppelt belegt. Ein einfacher Druck friert das Bild ein. Wenn man innerhalb einer Sekunde noch einmal dr\u00fcckt, wird das Oszi-Programm beendet, ansonsten startet eine neue Messung, das Einfrieren wird aufgehoben.<\/p>\n<p><a title=\"Mikrocontroller-Lab 2.0\" href=\"http:\/\/www.brennecke.org\/?page_id=2396\">Zur\u00fcck zur Hauptseite<\/a><\/p>\n<div class=\"twoclick_social_bookmarks_post_2544 social_share_privacy clearfix 1.6.4 locale-de_DE sprite-de_DE\"><\/div><div class=\"twoclick-js\"><script type=\"text\/javascript\">\/* <![CDATA[ *\/\njQuery(document).ready(function($){if($('.twoclick_social_bookmarks_post_2544')){$('.twoclick_social_bookmarks_post_2544').socialSharePrivacy({\"services\":{\"facebook\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Facebook senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"action\":\"recommend\",\"language\":\"de_DE\"},\"twitter\":{\"reply_to\":\"\",\"tweet_text\":\"Speicher-Oszilloskop%20%C2%BB%2053%20Cent\",\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Twitter senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"language\":\"de\",\"referrer_track\":\"\"},\"gplus\":{\"status\":\"on\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Google+ senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\",\"referrer_track\":\"\"},\"flattr\":{\"uid\":\"\",\"status\":\"on\",\"the_title\":\"Speicher-Oszilloskop\",\"the_excerpt\":\"Grundlagen%0D%0ADas%20Mikrocontroller-Lab%20bietet%20mit%20der%20%22Messwerterfassung%22%20eine%20einfache%20Methode%20an%2C%20um%20Daten%20grafisch%20in%20einem%20x-y-Raster%20darzustellen.%20Die%20Daten%20werden%20dazu%20einfach%20hintereinander%20%C3%BCber%20die%20serielle%20Schnittstelle%20geschickt%3B%20zul%C3%A4ssig%20ist%20ein%20Wertebereich%20von%200.199%2C%20was%20in%20etwa%20der%20technisch%20darstellbaren%20Aufl%C3%B6sung%20entspricht%20%28plus-minus%20ein%20paar%20Pixel%20f%C3%BCr%20Texte%29.%0D%0A%20%20Send_Command%28MO%20...\",\"txt_info\":\"2 Klicks f\\u00fcr mehr Datenschutz: Erst wenn Sie hier klicken, wird der Button aktiv und Sie k\\u00f6nnen Ihre Empfehlung an Flattr senden. Schon beim Aktivieren werden Daten an Dritte \\u00fcbertragen - siehe <em>i<\\\/em>.\",\"perma_option\":\"off\"}},\"txt_help\":\"Wenn Sie diese Felder durch einen Klick aktivieren, werden Informationen an Facebook, Twitter, Flattr, Xing, t3n, LinkedIn, Pinterest oder Google eventuell ins Ausland \\u00fcbertragen und unter Umst\\u00e4nden auch dort gespeichert. N\\u00e4heres erfahren Sie durch einen Klick auf das <em>i<\\\/em>.\",\"settings_perma\":\"Dauerhaft aktivieren und Daten\\u00fcber-tragung zustimmen:\",\"info_link\":\"http:\\\/\\\/www.heise.de\\\/ct\\\/artikel\\\/2-Klicks-fuer-mehr-Datenschutz-1333879.html\",\"uri\":\"https:\\\/\\\/www.brennecke.org\\\/?page_id=2544\",\"post_id\":2544,\"post_title_referrer_track\":\"Speicher-Oszilloskop\",\"display_infobox\":\"on\"});}});\n\/* ]]> *\/<\/script><\/div>","protected":false},"excerpt":{"rendered":"<p>Grundlagen Das Mikrocontroller-Lab bietet mit der &#8222;Messwerterfassung&#8220; eine einfache Methode an, um Daten grafisch in einem x-y-Raster darzustellen. Die Daten werden dazu einfach hintereinander \u00fcber die serielle Schnittstelle geschickt; zul\u00e4ssig ist ein Wertebereich von 0.199, was in etwa der technisch &hellip; <a href=\"https:\/\/www.brennecke.org\/?page_id=2544\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":2396,"menu_order":56,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2544"}],"collection":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2544"}],"version-history":[{"count":6,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2544\/revisions"}],"predecessor-version":[{"id":2547,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2544\/revisions\/2547"}],"up":[{"embeddable":true,"href":"https:\/\/www.brennecke.org\/index.php?rest_route=\/wp\/v2\/pages\/2396"}],"wp:attachment":[{"href":"https:\/\/www.brennecke.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}