{"id":384,"date":"2012-01-11T17:13:15","date_gmt":"2012-01-11T22:13:15","guid":{"rendered":"http:\/\/www.jetmore.org\/john\/blog\/?p=384"},"modified":"2012-03-30T14:10:24","modified_gmt":"2012-03-30T18:10:24","slug":"more-character-display-abuse","status":"publish","type":"post","link":"https:\/\/www.jetmore.org\/john\/blog\/2012\/01\/more-character-display-abuse\/","title":{"rendered":"More Character Display Abuse"},"content":{"rendered":"<p>A few months ago <a href=\"https:\/\/www.jetmore.org\/john\/blog\/2011\/11\/abusing-a-character-display\/\">I posted<\/a> about a project I was working on whose primary goal was to drive single-pixel drawing on a 16&#215;2 character display.  Of course the real goal of the project was just to move forward with electronics, trying new things in both software and hardware.<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<h3>Where Were We?<\/h3>\n<p>When last we left the project, I had just realized that my plan to draw (persistent) pixels on the entire 16&#215;2 display wouldn&#8217;t work with the LiquidCrystal library&#8217;s 8-custom-character limit.  Here is a very abbreviated version of the 4 possible next-steps I set out for the project:<\/p>\n<ol>\n<li>Make the drawing grid 2&#215;4 instead of 2&#215;16, just to get the persistent drawing working.  Add as much physical &#8220;bling&#8221; to the project as possible just to play with new stuff and multiple components updating in the loop.<\/li>\n<li>Investigate overcoming the 8-custom-character limit inside the LiquidCrystal library.<\/li>\n<li>If needed, investigate bypassing the LiquidCrystal library entirely to bypass the custom-character limit.<\/li>\n<li>Investigate methods for circuit documentation, using this project as the guinea pig (emphasis on versionable files and multi-platform support)<\/li>\n<\/ol>\n<div><\/div>\n<h3>Goals 2 &amp; 3: Getting More Than 8 Custom Chars<\/h3>\n<p>The easiest thing to discuss is what didn&#8217;t work out.  I never spent any time looking into #2 or #3, but a <a href=\"https:\/\/www.jetmore.org\/john\/blog\/2011\/11\/abusing-a-character-display\/#comment-1398\">commentor<\/a> on the previous post left a <a href=\"http:\/\/www.arduino.cc\/cgi-bin\/yabb2\/YaBB.pl?num=1270591606\">link to an Arduino forum post<\/a> that implied that 8-custom-character limit is due to the hardware itself, not the library.  That link, plus a little more googling, leads me to believe this isn&#8217;t a path worth walking down right now.<\/p>\n<p>&nbsp;<\/p>\n<h3>Goal 1: Multi-Pixel Drawing<\/h3>\n<p>I did decide that my itch for this project wouldn&#8217;t be properly scratched until I had persistent, multi-pixel drawing working.  By this I mean that you have a cursor of one pixel, and anywhere you move that cursor lights up and stays lit (unlike the last version, where the pixel could travel anywhere, but they didn&#8217;t stay lit).  I was able to get this implemented without too much pain.  Actually, the vast majority of the time I spent on this was debugging a hardware issue outside of my control that I didn&#8217;t have enough experience to recognize at first (quicky blog post later on that).<\/p>\n<p>Also while working on this I added a clear button to the circuit and some positioning debug information to the display.<\/p>\n<p><iframe loading=\"lazy\" width=\"584\" height=\"438\" src=\"http:\/\/www.youtube.com\/embed\/mTJvIna-VqQ?feature=oembed\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<h3>Goal 4: Documenting Circuits<\/h3>\n<p>I looked at a few different solutions.  I knew the name Eagle as it gets thrown around all the time.  I downloaded the free version and couldn&#8217;t even figure out how to draw on it.  Granted, I didn&#8217;t spend much time on it because I didn&#8217;t think it was going to be the right solution, but still&#8230;<\/p>\n<p>I considered a few more-generic layout tools like <a href=\"http:\/\/live.gnome.org\/Dia\">dia<\/a>, <a href=\"http:\/\/www.omnigroup.com\/products\/omnigraffle\/\">Graffle<\/a>, or Visio, but none of them felt right.  I didn&#8217;t really want to use an X11 server on Mac OS X, which I would need for dia, and the others aren&#8217;t cross-platform.  I think I tried a few others whose names I can&#8217;t remember, but none of them felt right.<\/p>\n<p>I had basically deferred this goal when, while looking at the Arduino docs and sample, I noticed they were made with <a href=\"http:\/\/fritzing.org\/zu9SAOi4CgaEvIzHLvO7MQ\">Fritzing<\/a>.  I downloaded it and it was exactly what I was looking for.  It saves in versionable XML, it&#8217;s very easy to lay out circuits, and it&#8217;s available for all three major desktop OSs.  I get the impression that, if I were an experience EE I would feel limited by Fritzing and prefer something like Eagle, but at my current skill level I&#8217;m happy to grow with the still-young Fritzing.<\/p>\n<div id=\"attachment_391\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/IMAG0786.jpg\"><img aria-describedby=\"caption-attachment-391\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-391\" title=\"IMAG0786\" src=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/IMAG0786-1024x612.jpg\" alt=\"\" width=\"590\" height=\"352\" \/><\/a><p id=\"caption-attachment-391\" class=\"wp-caption-text\">Real life...<\/p><\/div>\n<div id=\"attachment_393\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/EtchASketch_bb.jpg\"><img aria-describedby=\"caption-attachment-393\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-393\" title=\"EtchASketch_bb\" src=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/EtchASketch_bb.jpg\" alt=\"\" width=\"590\" height=\"583\" \/><\/a><p id=\"caption-attachment-393\" class=\"wp-caption-text\">Fritzing!<\/p><\/div>\n<p>&nbsp;<\/p>\n<h3>Now What?<\/h3>\n<p>Here are my new goals:<\/p>\n<ol>\n<li>More bling!  My current ideas are a new button which changes between three modes (draw, erase, and invert); one or more LEDs which indicate the mode (which will possibly also be drawn on the extra parts of the display); and, more maximum bling, a piezo which clicks when the cursor moves.  Shouldn&#8217;t be too hard to bang out now.<\/li>\n<li>I want to be done with this project.  To me that meant having the circuit documented, which is now done.  Also, I couldn&#8217;t just (easily) ditch the breadboard and use another because my only Arduino is physically attached to one of the two breadboards I was using.  Toward this end I re-did the project last night using only one breadboard.  This will allow me to just set the breadboard aside after accomplishing #1 above, though to be honest I think I&#8217;ll be done with this entirely at that point.  Love having it documented though.  Frankly, having the circuit in Fritzing was a large reason why I felt comfortable changing the layout to just one breadboard &#8211; I knew I had reference if I made a mistake<\/li>\n<\/ol>\n<p>Here&#8217;s what the project looks like right now after being consolidated to a single breadboard:<\/p>\n<div id=\"attachment_392\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/IMAG0787.jpg\"><img aria-describedby=\"caption-attachment-392\" decoding=\"async\" loading=\"lazy\" class=\"size-large wp-image-392\" title=\"IMAG0787\" src=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/IMAG0787-1024x612.jpg\" alt=\"\" width=\"590\" height=\"352\" \/><\/a><p id=\"caption-attachment-392\" class=\"wp-caption-text\">Woo! I didn&#39;t change LCDs, that model supports RGB backlighting and I just wired it up to the red pin instead of the blue pin for a change.<\/p><\/div>\n<div id=\"attachment_394\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/EtchASketch2_bb.jpg\"><img aria-describedby=\"caption-attachment-394\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-394\" title=\"EtchASketch2_bb\" src=\"https:\/\/www.jetmore.org\/john\/blog\/wp-content\/uploads\/2012\/01\/EtchASketch2_bb.jpg\" alt=\"\" width=\"590\" height=\"460\" \/><\/a><p id=\"caption-attachment-394\" class=\"wp-caption-text\">This is so much prettier than the previous circuit...<\/p><\/div>\n<p>Onward!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few months ago I posted about a project I was working on whose primary goal was to drive single-pixel drawing on a 16&#215;2 character display. Of course the real goal of the project was just to move forward with &hellip; <a href=\"https:\/\/www.jetmore.org\/john\/blog\/2012\/01\/more-character-display-abuse\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/posts\/384"}],"collection":[{"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/comments?post=384"}],"version-history":[{"count":3,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/posts\/384\/revisions"}],"predecessor-version":[{"id":479,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/posts\/384\/revisions\/479"}],"wp:attachment":[{"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/media?parent=384"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/categories?post=384"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jetmore.org\/john\/blog\/wp-json\/wp\/v2\/tags?post=384"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}