{"id":41,"date":"2014-03-31T23:41:29","date_gmt":"2014-04-01T06:41:29","guid":{"rendered":"http:\/\/www.migration.andersknelson.com\/blog\/?p=41"},"modified":"2023-11-01T00:52:01","modified_gmt":"2023-11-01T04:52:01","slug":"protest-sign","status":"publish","type":"post","link":"https:\/\/www.andersknelson.com\/blog\/?p=41","title":{"rendered":"Protest Sign"},"content":{"rendered":"\n<p>An oversized scanned-matrix display using 10mm LEDs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Background<\/h2>\n\n\n\n<p>When Steven Colbert and Jon Stewart announced the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Rally_to_Restore_Sanity_and\/or_Fear\">Rally To Restore Sanity and\/or Fear<\/a>, my politically zealous brother wanted to add some flair to the party. We devised a satirical protest sign that would scroll conservative absurdities on one side of the sign and liberal nonsense on the other, reading such garbage from a hand-curated text file.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"79\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1205-1024x768.jpg\" alt=\"\" class=\"wp-image-79\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1205-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1205-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"77\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1208-1024x768.jpg\" alt=\"\" class=\"wp-image-77\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1208-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1208-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"76\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1209-1024x768.jpg\" alt=\"\" class=\"wp-image-76\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1209-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1209-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"75\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1210-1024x768.jpg\" alt=\"\" class=\"wp-image-75\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1210-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1210-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"78\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1207-1024x768.jpg\" alt=\"\" class=\"wp-image-78\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1207-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1207-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"74\" src=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1211-1024x768.jpg\" alt=\"\" class=\"wp-image-74\" srcset=\"https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1211-1024x768.jpg 1024w, https:\/\/www.andersknelson.com\/blog\/wp-content\/uploads\/2014\/03\/IMG_1211-300x225.jpg 300w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What it does<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&nbsp;Displays arbitrary text\/graphics in a variety of ways.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What it&#8217;s made of<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>74AHC595-series 8-bit shift registers<\/li>\n\n\n\n<li>PFET transistors (to source current through columns)<\/li>\n\n\n\n<li>NFET transistors (to sink current through rows)<\/li>\n\n\n\n<li>LM3150 DC\/DC buck convertor<\/li>\n\n\n\n<li><a href=\"http:\/\/www.hebeiltd.com.cn\/?p=leds.9.10mm\">10mm LEDs<\/a><\/li>\n\n\n\n<li>A bunch of support components<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/ufanders\/protestSign\/tree\/master\/pcb\">Custom PCB<\/a>&nbsp;designed in&nbsp;<a href=\"http:\/\/www.cadsoftusa.com\/eagle-pcb-design-software\/product-overview\/?language=en\">EAGLE<\/a>&nbsp;and fabricated at&nbsp;<a href=\"http:\/\/quoting.sunstone.com\/quoteexpress.aspx\">PCBExpress<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/ufanders\/protestSign\/tree\/master\/firmware\">Firmware&nbsp;<\/a>written in C using&nbsp;<a href=\"https:\/\/www.microchip.com\/pagehandler\/en-us\/family\/mplabx\/\">MPLABX<\/a>,&nbsp;compiled by&nbsp;<a href=\"https:\/\/www.microchip.com\/pagehandler\/en_us\/devtools\/mplabxc\/\">XC16<\/a>&nbsp;and loaded using an&nbsp;<a href=\"http:\/\/www.microchip.com\/Developmenttools\/ProductDetails.aspx?PartNO=DV164035\">ICD3<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Theory of operation<\/h2>\n\n\n\n<p>Send it bunch of bits over SPI a zillion times a second and you get pretty text! The code linked to above just sets the stage &#8211; it&#8217;s up to you to send the display what you want to see. When I get some extra time (LOL) I&#8217;ll hook it up to a WiFi module and use it as a wall-clock.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>It works, yay! Lessons learned:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Light-bleed into adjacent LEDs is easily fixed with some opaque heat-shrink tubing.<\/li>\n\n\n\n<li>Each row has a considerable amount of capacitance that needs to be discharged with each row switch. Write an all-off sequence to the column drivers to do this.<\/li>\n\n\n\n<li>Light output is considerably reduced when you scan the display, essentially reducing it to 1\/7 (in this case using 7 rows) of the original brightness. You can overdrive the rows by 7x&nbsp;(in this case using 7 rows)&nbsp;to get around this but you must make sure your OE line is de-asserted until you start switching the rows or you&#8217;ll pop the LEDs.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>An oversized scanned-matrix display using 10mm LEDs. Background When Steven [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":79,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[6],"class_list":["post-41","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projects","tag-led"],"_links":{"self":[{"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=41"}],"version-history":[{"count":14,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/41\/revisions"}],"predecessor-version":[{"id":1128,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/41\/revisions\/1128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=\/wp\/v2\/media\/79"}],"wp:attachment":[{"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=41"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.andersknelson.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}