{"id":416,"date":"2013-02-12T10:45:25","date_gmt":"2013-02-12T16:45:25","guid":{"rendered":"http:\/\/areciv.com\/blog\/?p=416"},"modified":"2021-09-22T23:52:49","modified_gmt":"2021-09-23T04:52:49","slug":"fluke-scopemeter-97-screenshot-hack","status":"publish","type":"post","link":"https:\/\/areciv.com\/blog\/2013\/02\/fluke-scopemeter-97-screenshot-hack\/","title":{"rendered":"Fluke Scopemeter 97 Screenshot Hack"},"content":{"rendered":"\n<p>While waiting for parts to arrive to build a proper optical serial interface, I really wanted to get some screenshots off of my oscilloscope. Knowing that the infrared LED in the interface is directly transmitting the serial signal, I figured I should be able to tap into that driving signal to obtain the serial information.<\/p>\n\n\n\n<p><strong>Note: since writing this article, I've built a <a title=\"Fluke Scopemeter Optical Interface\" href=\"http:\/\/areciv.com\/blog\/2013\/11\/fluke-scopemeter-optical-interface\/\">proper optical interface<\/a>.<\/strong><\/p>\n\n\n\n<p>I pulled out the service manual and located the serial port circuitry. Below is an excerpt of just that section. You can see the infrared LED, H1201, is directly driven, through a 261\u03a9 resistor, from the TXD pin on the main controller. Thus, I should be able to pull the signal from the \"far side\" of R1201. The location of that resistor is pointed out in the image.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img decoding=\"async\" width=\"1000\" height=\"467\" data-attachment-id=\"417\" data-permalink=\"https:\/\/areciv.com\/blog\/2013\/02\/fluke-scopemeter-97-screenshot-hack\/circ\/\" data-orig-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ.png\" data-orig-size=\"1000,467\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Fluke Scopemeter 97 Serial Schematic\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Schematic showing connection of transmitting and receiving components for the optically-isolated serial port.&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ-300x140.png\" data-large-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ.png\" src=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ.png\" alt=\"\" data-id=\"417\" class=\"wp-image-417\" srcset=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ.png 1000w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ-300x140.png 300w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ-500x233.png 500w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img decoding=\"async\" width=\"1000\" height=\"750\" data-attachment-id=\"418\" data-permalink=\"https:\/\/areciv.com\/blog\/2013\/02\/fluke-scopemeter-97-screenshot-hack\/wp_20130211_008\/\" data-orig-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008.jpg\" data-orig-size=\"1000,750\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;2&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;Lumia 920&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1360615206&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;500&quot;,&quot;shutter_speed&quot;:&quot;0.050013996454232&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Location of R1201\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;The far side of R1201 is pointed out.&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008-300x225.jpg\" data-large-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008.jpg\" src=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008.jpg\" alt=\"\" data-id=\"418\" class=\"wp-image-418\" srcset=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008.jpg 1000w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008-300x225.jpg 300w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/WP_20130211_008-400x300.jpg 400w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Placing a probe on the resistor, I was able to verify with my multimeter that it was a 5V signal and that it did swing around when I hit the print button on the scope. Since I was still waiting on my USB-to-TTL Serial converter to arrive though, I had to find a different way to capture the signal.<\/p>\n\n\n\n<p><em>Enter, Arduino.<\/em><\/p>\n\n\n\n<p>I rigged up an extremely simple program that sets up a software serial port on one pin, reads from it, then outputs the data over the USB serial port back to the PC.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: wiring; title: ; notranslate\" title=\"\">\n#include &lt;SoftwareSerial.h&gt;;\n\nSoftwareSerial fluke(4, 13);\n\nvoid setup() {\n\tfluke.begin(9600);\n\tSerial.begin(9600);\n}\n\nvoid loop() {\n\tint tmp = fluke.read();\n\tif (tmp &gt; -1) {\n\t\tSerial.write((uint8_t)tmp);\n\t}\n}\n<\/pre><\/div>\n\n\n<p>With that running on the board, I attached a probe from pin 4 to that resistor on the scope board.<br>I configured the scope for ThinkJet format and 9600 bps under the \"Special Funct\" menu, then hit \"Start Print\". I used <a href=\"http:\/\/freeware.the-meiers.org\">CoolTerm<\/a> to capture the stream to a file, which left me with a raw stream of data meant to be interpreted by <a href=\"http:\/\/www.hp.com\/hpinfo\/abouthp\/histnfacts\/museum\/imagingprinting\/0011\/index.html\">a printer as old as me<\/a>&#8230;<\/p>\n\n\n\n<p>Luckily, lots of other test equipment outputs in this format and someone has had the misfortune of already needing a translator \u2014 the Netpbm project has a program called <a href=\"http:\/\/netpbm.sourceforge.net\/doc\/thinkjettopbm.html\">thinkjettopbm<\/a> that will convert that raw stream into a PBM image which can then be converted to PNG with <a href=\"http:\/\/netpbm.sourceforge.net\/doc\/pnmtopng.html\">pnmtopng<\/a>.<\/p>\n\n\n\n<p>Voila!<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter columns-1 wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img decoding=\"async\" width=\"300\" height=\"300\" data-attachment-id=\"373\" data-permalink=\"https:\/\/areciv.com\/blog\/2013\/02\/capacitor-plague-part-i\/monitor-12v-noisy\/\" data-orig-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy.png\" data-orig-size=\"480,480\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Noisy 12V Rail\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Oscilloscope capture of noisy power supply 12V rail with bad capacitors.&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy-300x300.png\" data-large-file=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy.png\" src=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy-300x300.png\" alt=\"Oscilloscope capture of noisy power supply 12V rail with bad capacitors.\" data-id=\"373\" class=\"wp-image-373\" srcset=\"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy-300x300.png 300w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy-150x150.png 150w, https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/monitor-12v-noisy.png 480w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure><\/li><\/ul><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>While waiting for parts to arrive to build a proper optical serial interface, I really wanted to get some screenshots off of my oscilloscope.  Knowing that the infrared LED in the interface is directly transmitting the serial signal, I figured I should be able to tap into that driving signal to obtain the serial information.<\/p>\n","protected":false},"author":1,"featured_media":417,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[71,69,39,72],"class_list":["post-416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","tag-arduino","tag-fluke","tag-hack","tag-serial"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/areciv.com\/blog\/wp-content\/uploads\/2013\/02\/circ.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/posts\/416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/comments?post=416"}],"version-history":[{"count":11,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/posts\/416\/revisions"}],"predecessor-version":[{"id":4436,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/posts\/416\/revisions\/4436"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/media\/417"}],"wp:attachment":[{"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/media?parent=416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/categories?post=416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/areciv.com\/blog\/wp-json\/wp\/v2\/tags?post=416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}