www.crystalfontz.com
Open in
urlscan Pro
66.45.165.37
Public Scan
Submitted URL: http://crystalfontz.com/
Effective URL: https://www.crystalfontz.com/
Submission Tags: tranco_l324
Submission: On March 27 via api from DE — Scanned from DE
Effective URL: https://www.crystalfontz.com/
Submission Tags: tranco_l324
Submission: On March 27 via api from DE — Scanned from DE
Form analysis
5 forms found in the DOMGET /search.php
<form action="/search.php" method="get">
<input type="hidden" name="search-category" id="search-category" value="">
<div class="flex">
<label for="search-dropdown" class="mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white">Your Email</label>
<button id="dropdown-button" data-dropdown-toggle="dropdown"
class="flex-shrink-0 z-10 inline-flex items-center py-2.5 px-4 text-sm font-medium text-center text-gray-900 bg-gray-100 border border-gray-300 rounded-l-lg hover:bg-gray-200 focus:ring-4 focus:outline-none focus:ring-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600 dark:focus:ring-gray-700 dark:text-white dark:border-gray-600"
type="button">All categories <svg class="w-2.5 h-2.5 ml-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 6">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"></path>
</svg></button>
<div id="dropdown" class="z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow w-44 dark:bg-gray-700" data-popper-placement="bottom"
style="position: absolute; inset: 0px auto auto 0px; margin: 0px; transform: translate(495px, 106px);">
<ul class="py-2 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdown-button">
<li>
<button type="button" value="2" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Graphic USB LCDs</button>
</li>
<li>
<button type="button" value="5" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Character USB LCDs</button>
</li>
<li>
<button type="button" value="25" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">TFT LCDs</button>
</li>
<li>
<button type="button" value="30" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Graphic OLEDs</button>
</li>
<li>
<button type="button" value="34" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Character OLEDs</button>
</li>
<li>
<button type="button" value="21" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Character LCDs</button>
</li>
<li>
<button type="button" value="519" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">ePaper</button>
</li>
<li>
<button type="button" value="47" class="category-search-option inline-flex w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">Accessories</button>
</li>
</ul>
</div>
<div class="relative w-full">
<input type="search" id="search-dropdown"
class="block p-2.5 w-full z-20 text-sm text-gray-900 bg-gray-50 rounded-r-lg border-l-gray-50 border-l-2 border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-l-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500"
placeholder="Search Part Numbers, Dimensions, Resolution..." required="" name="q">
<button type="submit"
class="absolute top-0 right-0 p-2.5 text-sm font-medium h-full text-red bg-gray-200 rounded-r-lg border border-gray-400 hover:bg-gray-800 focus:ring-4 focus:outline-none focus:ring-red-300 dark:bg-gray-600 dark:hover:bg-gray-700 dark:focus:ring-red-200">
<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"></path>
</svg>
<span class="sr-only">Search</span>
</button>
</div>
<a id="adv-search-link" href="/products/product-search.php">Advanced Search</a>
</div>
</form>
GET /products/find-my-display.php
<form method="get" action="/products/find-my-display.php" id="display-finder">
<input type="hidden" name="search" value="1">
<input type="hidden" id="display_type" name="display_type" value="">
<input type="hidden" name="cols" id="cols" val="">
<input type="hidden" name="rows" id="rows" val="">
<div class="center" style="width:fit-content; margin:0 auto;">
<h5 class="getting-started">Need some help choosing the right display?</h5>
<div class="left get-started-cta"><a href="javascript: void(0);" id="get-started" class="waves-effect waves-light red btn-small">Get Started</a></div>
</div>
<div id="command-set" style="display:none; text-align:center">
<div style="width:fit-content; margin: 0 auto;">
<h5>Built-in Command Set?</h5>
<div style="width: 350px;">These intelligent displays include extra processing power between the system controller and display controller to simplify communication.</div>
<input type="hidden" name="cmd-set-answer" id="cmd-set-answer">
<a href="javascript: void(0)" id="cmd-set-yes" class="bubble-links">Yes</a>
<a href="javascript: void(0)" id="cmd-set-no" class="bubble-links">No</a>
</div>
</div>
<div id="text-only" style="display:none;">
<h5>Text Only?</h5>
<input type="hidden" name="text-only-answer" id="text-only-answer">
<a href="javascript: void(0)" id="text-only-yes" class="bubble-links">Yes</a>
<a href="javascript: void(0)" id="text-only-no" class="bubble-links">No</a>
</div>
<div id="char-by-rows" style="display:none;">
<h5>Character X Rows</h5>
<input type="hidden" name="char-count-answer" id="char-count-answer">
<a href="javascript: void(0)" class="bubble-links standard char-count">8x1</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">8x2</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">12x2</a>
<a href="javascript: void(0)" class="bubble-links standard value-add char-count">16x2</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">16x1</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">16x4</a>
<a href="javascript: void(0)" class="bubble-links standard value-add char-count">20x2</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">20x1</a>
<a href="javascript: void(0)" class="bubble-links standard value-add char-count">20x4</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">24x2</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">40x2</a>
<a href="javascript: void(0)" class="bubble-links standard char-count">40x4</a>
<a href="javascript: void(0)" class="bubble-links">Any</a>
</div>
<div id="full-color" style="display:none;">
<h5>Full Color?</h5>
<input type="hidden" name="full-color-answer" id="full-color-answer">
<a href="javascript: void(0)" id="full-color-yes" class="bubble-links color-choice color">Yes / RGB</a>
<a href="javascript: void(0)" id="full-color-no" class="bubble-links color-choice monochrome">No / Monochrome</a>
<a href="javascript: void(0)" id="full-color-ns" class="bubble-links color-choice">Not Sure</a>
</div>
<div id="diagonal-size" style="display:none; width: 400px; margin: 0 auto; text-align:left;">
<h5>Diagonal Size?</h5> Between <input id="diagonal_min" type="number" max="9" min="1" class="browser-default"> and <input id="diagonal_max" type="number" max="12" min="1" class="browser-default"> inches <br>
<a href="javascript: void(0)" class="help-me-buttons" style="" id="diagonal-next">Next</a>
</div>
<div id="resolution" style="display:none; width:150px; margin:0 auto;">
<h5>Resolution?</h5>
<select name="resolution" id="resolution-choice" class="browser-default">
<option>Choose</option>
<option>80x160</option>
<option>128x128</option>
<option>128x160</option>
<option>176x220</option>
<option>240x240</option>
<option>240x320</option>
<option>240x400</option>
<option>320x240</option>
<option>320x480</option>
<option>480x128</option>
<option>480x272</option>
<option>480x480</option>
<option>480x640</option>
<option>720x1280</option>
<option>800x480</option>
<option>1024x600</option>
<option>1280x800</option>
</select>
<input name="coldots" type="hidden" id="coldots">
<input name="rowdots" type="hidden" id="rowdots">
<br><br>
</div>
<div id="touchscreen" style="display:none; width:250px; text-align:left; margin: 0 auto;">
<h5>Touchscreen?</h5>
<input type="hidden" name="touchscreen" value="" id="touchscreen-answer">
<input type="checkbox" value="Resistive" name="touchscreen-choice[]" id="resistive"><label for="resistive">Resistive</label><br>
<input type="checkbox" value="Capacitive" name="touchscreen-choice[]" id="capacitive"><label for="capacitive">Capacitive</label><br>
<input type="checkbox" value="None" name="touchscreen-choice[]" id="no-touchscreen"><label for="no-touchscreen">No</label><br><br>
<a href="javascript: void(0)" class="help-me-buttons" style="" id="touchscreen-next">Next</a>
</div>
<div id="text-colors" style="display:none;">
<h5>Which Color?</h5>
<input type="hidden" name="fgbg[]" id="color-answer" value="">
<a href="javascript: void(0)" class="bubble-links text-color wh-on-bl">White on Blue</a>
<a href="javascript: void(0)" class="bubble-links text-color dk-on-gy">Dark on Gray</a>
<a href="javascript: void(0)" class="bubble-links text-color dk-on-lg">Dark on Light Gray</a>
<a href="javascript: void(0)" class="bubble-links text-color dk-on-yg">Dark on Yellow-Green</a>
<a href="javascript: void(0)" class="bubble-links text-color dk-on-gr">Dark on Green</a>
<a href="javascript: void(0)" class="bubble-links text-color yw-on-dk">Yellow-Green on Dark</a>
<a href="javascript: void(0)" class="bubble-links text-color rd-on-dk">Red on Dark</a>
</div>
<div id="sunlight-readable" style="display:none; text-align:left; width:250px; margin:0 auto;">
<h5>Readability</h5>
<input type="checkbox" value="yes" name="sunreadable" id="sunlight"><label for="sunlight">Sunlight Readable</label><br>
<input type="checkbox" value="yes" name="darkreadable" id="night"><label for="night">Night Readable</label><br>
<a href="javascript: void(0)" class="help-me-buttons" id="readability-next">Next</a>
<br class="clear-all">
</div>
<div id="interfaces" style="display:none; text-align:left; width:250px; margin:0 auto;">
<h5>Interface</h5>
<input type="checkbox" value="8" name="interfaces[]" id="dot-clk"><label for="dot-clk">USB</label><br>
<input type="checkbox" value="1024" name="interfaces[]" id="dot-clk"><label for="dot-clk">DOT-CLK / RGB</label><br>
<input type="checkbox" value="1" name="interfaces[]" id="rs232"><label for="rs232">RS232</label><br>
<input type="checkbox" value="2" name="interfaces[]" id="lls"><label for="lls">Logic-Level Serial</label><br>
<input type="checkbox" value="4" name="interfaces[]" id="spi"><label for="spi">SPI</label><br>
<input type="checkbox" value="64" name="interfaces[]" id="i2c"><label for="i2c">I2C</label><br>
<input type="checkbox" value="16" name="interfaces[]" id="8-bit"><label for="8-bit">8-bit Parallel</label><br>
<input type="checkbox" value="128" name="interfaces[]" id="9-bit"><label for="9-bit">9-bit Parallel</label><br>
<input type="checkbox" value="256" name="interfaces[]" id="16-bit"><label for="16-bit">16-bit Parallel</label><br>
<input type="checkbox" value="512" name="interfaces[]" id="18-bit"><label for="18-bit">18-bit Parallel</label><br>
<input type="checkbox" value="16384" name="interfaces[]" id="hdmi"><label for="hdmi">HDMI</label><br>
<input type="checkbox" value="32768" name="interfaces[]" id="mipi"><label for="mipi">MIPI</label><br><br>
<a href="javascript: void(0)" class="help-me-buttons" id="interface-next">Next</a>
<br class="clear-all">
</div>
<div id="size" style="display:none; width:250px; margin:0 auto;">
<h5>Dimensions</h5>
<label class="help-me-txt" for="height">Height:</label><input type="number" name="overall_h_mm" class="browser-default help-me-input" id="height">mm<br>
<label class="help-me-txt" for="width">Width:</label><input type="number" name="overall_w_mm" class="browser-default help-me-input" id="width">mm<br><br>
<a href="javascript: void(0)" class="help-me-buttons" id="dimensions-next">Next</a>
<br class="clear-all">
</div>
</form>
Name: mc-embedded-subscribe-form — POST https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031
<form action="https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="">
<div id="mc_embed_signup_scroll">
<label for="mce-EMAIL">Subscribe to our Newsletter</label>
<input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required="">
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_8a880dec17face7992ae6ef10_7268847031" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
</form>
Name: mc-embedded-subscribe-form — POST https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031
<form action="https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="">
<div id="mc_embed_signup_scroll">
<label for="mce-EMAIL">Subscribe to our Newsletter</label>
<input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required="">
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_8a880dec17face7992ae6ef10_7268847031" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
</form>
Name: mc-embedded-subscribe-form — POST https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031
<form action="https://crystalfontz.us17.list-manage.com/subscribe/post?u=8a880dec17face7992ae6ef10&id=7268847031" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate="">
<div id="mc_embed_signup_scroll">
<label for="mce-EMAIL">Subscribe to our Newsletter</label>
<input type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="email address" required="">
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_8a880dec17face7992ae6ef10_7268847031" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
</form>
Text Content
schedule Open M-T 8:30-4:30pm F 8:30-12pm PST call 888.206.9720 speed Quick Order lockSign In shopping_cart Cart 0 Your Email All categories * Graphic USB LCDs * Character USB LCDs * TFT LCDs * Graphic OLEDs * Character OLEDs * Character LCDs * ePaper * Accessories Search Advanced Search Open main menu * Home * Products * Solutions * Videos * Support * Blog * About Us * Contact * USB LCDs Crystalfontz USB LCDs are a perfect turn-key solution. * Character LCDs From 8x1 characters to 40x4 we have a large selection of Character LCD Displays * Graphic LCDs Standard Monochrome Graphic LCD Displays including 128x64 pixel, 320x240 and many more * Drive Bay LCDs Drive bay kits for our CFA835 Graphic LCD and All of our CFA Character LCDs * Discounted Products Reduced priced inventory. Highly discounted for quick sale * TFT Displays Full-Color, ranging in size from less than an inch to 10 inches. * ePaper Displays Ultra-low power, perfect for tags or labels. * OLED Displays Darker darks, brighter colors, as well as higher contrast ratios. * Development Kits & Accessories LCD Dev Kits, ePaper Dev Kits, EVE Kits, OLED Kits, Screws and Breakout Boards. * All LCD Products View our entire LCD product line. ePaper, OLEDs, TFTs and more. * LCD Software Download LCD Software, USB LCD Drivers, Test Software, Linux Example code * Development Kits & Accessories LCD Dev Kits, ePaper Dev Kits, EVE Kits, OLED Kits, Screws and Breakout Boards. * EVE Accelerated TFT Modules Combine all the power of the FTDI FT81x Embedded Video Engine (aka EVE) with beautiful, brilliant TFT Displays. * Custom Display Request Form Need a custom electronic display solution? Let us quote your next project. * Full-Color TFT Displays for Arduino Looking for a sharp full-color display that integrates and works optimally with an Arduino? * Low Power Displays Provide visual feedback or messaging while using as little electricity as possible. * Raspberry Pi Screens Want a display that easily integrates with rPi? THE BEST EPAPER DISPLAYS FOR ANY PROJECT We carry a large selection of USB LCDs, graphic LCDs, character LCDs, OLED Displays, TFT Display Modules, ePaper Displays and EVE Accelerated TFT Displays. If you're looking for something we don't have, please let us know and we'll do our best to find it. USB LCD Displays Graphic LCD Displays Character LCD Displays TFT LCD Screens OLED Displays ePaper Displays NEED SOME HELP CHOOSING THE RIGHT DISPLAY? Get Started BUILT-IN COMMAND SET? These intelligent displays include extra processing power between the system controller and display controller to simplify communication. Yes No TEXT ONLY? Yes No CHARACTER X ROWS 8x1 8x2 12x2 16x2 16x1 16x4 20x2 20x1 20x4 24x2 40x2 40x4 Any FULL COLOR? Yes / RGB No / Monochrome Not Sure DIAGONAL SIZE? Between and inches Next RESOLUTION? Choose 80x160 128x128 128x160 176x220 240x240 240x320 240x400 320x240 320x480 480x128 480x272 480x480 480x640 720x1280 800x480 1024x600 1280x800 TOUCHSCREEN? Resistive Capacitive No Next WHICH COLOR? White on Blue Dark on Gray Dark on Light Gray Dark on Yellow-Green Dark on Green Yellow-Green on Dark Red on Dark READABILITY Sunlight Readable Night Readable Next INTERFACE USB DOT-CLK / RGB RS232 Logic-Level Serial SPI I2C 8-bit Parallel 9-bit Parallel 16-bit Parallel 18-bit Parallel HDMI MIPI Next DIMENSIONS Height:mm Width:mm Next WHY CHOOSE CRYSTALFONTZ AMERICA FOR LCD DISPLAYS? Crystalfontz America is the leading supplier of LCD, TFT, OLED and ePaper display modules and accessories. We specialize in providing our customers the very best in display products, cables and connectors. As an ISO 9001:2015 certified company, we know the importance of quality. No matter what type of display, or LCD module, we can help you get the best display solution for your product or project. Crystalfontz has been an LCD supplier since 1998 and has supplied innovative display solutions to everyone from small do-it-yourself hobbyists and builders to many top-tier companies. Our facility is located in Washington State and we ship LCD display modules around the world. EXCEPTIONAL QUALITY & SUPPORT SHORT LEAD TIMES GREAT PRICING AND OPTIONS WHY HOBBYISTS & CREATORS CHOOSE CRYSTALFONTZ SINGLE & SMALL QUANTITY ORDERS EXCELLENT RESOURCES & SUPPORT VARIETY OF KITS AVAILABLE Learn More WHY ENGINEERS & MANUFACTURERS CHOOSE CRYSTALFONTZ DETAILED SPECIFICATIONS & RENDERINGS RELIABLE MANUFACTURING & SUPPLY CHAIN QUANTITY DISCOUNTS Learn More THE LATEST FROM OUR LCD BLOG IN THE WILD: NETFLIX OPEN CONNECT – CFA635 In The Wild / By Kelsey Recently, a Reddit post came to our attention in which someone had an old Netflix server, and on the face of that server was an awfully familiar keypad. Commenters confirmed in the thread that it is a CFA635. We had to look into it more and find out if there was more information about these servers! On the Open Connect home page, there was a photo of a whole rack full of servers with CFA635s! Have you spotted our keypads in the wild? Send us a photo, we’d love to see it! INTELLIGENT LCDS IN SERVERS We offer many great LCD options that are easy to integrate into servers. The CFA635 (as used in the above servers) is a great choice – it uses a packet based communication system to make sure no information is lost between it and the host device. Check out our comparison chart if you’re not sure which intelligent display to use. CONTACT US If you have any questions, we can be reached at support@crystalfontz.com, we also provide chat and telephone support Monday through Friday during our open hours. We love to hear about your projects! Find us around the web (YouTube, Facebook, Instagram, LinkedIn, Twitter, Forum) and let us know what you’re working on. Subscribe to our Newsletter Kelsey Kelsey is an engineer at Crystalfontz. She graduated from Gonzaga University with a BS in Electrical Engineering. Kelsey’s roles at Crystalfontz include customer support, documentation, product demonstrations, and design. What our customers say about Kelsey: “As a new user to the world of LCD electronics, Kelsey has been a Godsend in providing the hand-holding I needed to get my project up and running despite my own efforts at fouling things up! :-)” – Owen M “Kelsey got me through changing code for a new LCD in only two short emails.” – Phillip V “The agent that I talked with (Kelsey), is technically sound and she knows what she is doing. The support is what made my job easier to get started with the different display technologies. Thank you!” – Vatsal S CFA632 AND CFA634 CUSTOM CHARACTERS Frequently Asked Questions, LCDs / By Kelsey We recently received a question about setting custom characters on our CFA632 and CFA634 modules. The datasheet includes an example of using custom characters which looks like this: \012\001\128\129\130\131\017\000\001\132\133\134\135 \025\000\000\000\001\003\000\031\031\031 \025\001\028\054\032\001\003\051\051\051 \025\002\014\027\049\032\032\047\032\047 \025\003\000\000\032\048\000\062\000\062 \025\004\031\031\031\000\003\001\000\000 \025\005\051\051\051\003\001\032\054\028 \025\006\047\032\047\032\032\049\027\014 \025\007\062\000\062\000\048\032\000\000 The customer wanted to know what was going on and what would the custom characters look like. HERE IS HOW OUR SUPPORT ENGINEER ANSWERED: 1. The example is in decimal rather than hexadecimal, so the lines that start with \025 are the custom character setting lines. 2. I’m not sure why the first line was put first rather than last, but it’s showing the custom characters in action. If you have a CFA632 with the default programming, it will show the Crystalfontz logo. \012 clears the display \001 sets the cursor location to the top left \0128-\131 send that custom character to the screen \017\000\001\ sets the cursor location to the 0th column and the 1st (after 0, aka the 2nd) row \0132-\135 send that custom character to the screen We recommend using CFTest for getting a feeling for these modules and how the commands work. It can be found here: https://www.crystalfontz.com/product/cfautilities-cfa-lcd-utilities 3. Then the next 8 lines are setting up custom characters. Those custom characters are the ones that make the Crystalfontz logo. The format of those lines is the command number (\025) then the character number (e.g., \001), then the character bit map. 4. I copied the example from the datasheet and sent it using CFTest, the below photo shows the result: FOLLOW UP QUESTIONS HOW DO I MAKE THE BITMAPS? As described in the datasheet “data0-data7 are the bitmap information for this character. Any value is valid between 0 and 63. The MSB is at the left of the character cell of the row and the LSB is at the right of the character cell. data0 is at the top of the cell, data7 is at the bottom of the cell.” Each individual character space on these modules is 6 pixels x 8 pixels (though the included font is 5×7 with a line to separate characters). data0 controls the top row of pixels, through to data7 controlling the bottom row of pixels. The values of data0–data7 describe which pixels are on and which are off. Because there are 6 pixels, each with two possible states we have 2^6 = 64 possible values for each of the data bits (but remember that 0 is included, so 63 is the maximum value). If you send a 0, the entire row will be blank. Sending a 63 means all 6 pixels will be dark. This might be easier to think about in binary rather than decimal. \b00111111 = \063 = a fully dark row (all 6 pixels in the 1 or on state) \b00101010 = \042 = every other pixel on (first pixel on) \b00010101 = \021 = every other pixel on (first pixel off) \b00000000 = \000 = all pixels off CONTACT US If you have any questions, we can be reached at support@crystalfontz.com, we also provide chat and telephone support Monday through Friday during our open hours. We love to hear about your projects! Find us around the web (YouTube, Facebook, Instagram, LinkedIn, Twitter, Forum) and let us know what you’re working on. Subscribe to our Newsletter Kelsey Kelsey is an engineer at Crystalfontz. She graduated from Gonzaga University with a BS in Electrical Engineering. Kelsey’s roles at Crystalfontz include customer support, documentation, product demonstrations, and design. What our customers say about Kelsey: “As a new user to the world of LCD electronics, Kelsey has been a Godsend in providing the hand-holding I needed to get my project up and running despite my own efforts at fouling things up! :-)” – Owen M “Kelsey got me through changing code for a new LCD in only two short emails.” – Phillip V “The agent that I talked with (Kelsey), is technically sound and she knows what she is doing. The support is what made my job easier to get started with the different display technologies. Thank you!” – Vatsal S DUAL VOLTMETER FOR RV ELECTRICAL SYSTEMS Arduino, In The Wild, LCDs, Tutorial / By Kelsey This post was written by Brent, one of Crystalfontz’s engineers. BRENT’S VOLTMETER BUILD I have an RV that has both a vehicle electrical system and a camper electrical system. I wanted a way to see the voltages of both systems at a glance while driving. I tried some cheesey voltmeters from e-bay and some other cheesey voltmeters from Amazon but I was not happy with the accuracy or stability. I was not able to find a meter that would work well in a vehicle, show two voltages, and have good accuracy. Time to make my own: https://www.youtube.com/watch?v=lGkzsqYgikEVideo can’t be loaded because JavaScript is disabled: Dual Voltmeter (https://www.youtube.com/watch?v=lGkzsqYgikE) RATIONALE Why go to the trouble of making my own meter? * Visibility: I assembled all the van electrics (solar, B2B charger, 400AH LiFePo battery bank, inverter, etc), and while they seem to work fine, it is comforting to be able to keep an eye on them. * Trust: I wanted a meter that would read really close to my Fluke DMM. This meter does. The various cheesey off-the-shelf meters I got from the usual suspects on eBay and Amazon did not even agree with each other, let alone a DMM. * History: I love to see the time history of what has been happening in the last few minutes. * Fun: It sounded like a fun project. DIFFICULTY If you have access to a 3d printer and a soldering iron you can build this project. The hardware is pretty straight forward. The firmware is a bit more involved, but you can use the unmodified Arduino source code to get it running. HARDWARE First off, I needed a good ADC. After searching around on Digi-Key, I came across the Texas Instruments ADS1115 series, which is a 16-bit ADC with good reference built in. The built-in reference is important – your ADC system will never be better than the reference it measures against. Digi-Key did not have any bare chips in stock so I kept looking. It turns out that AdaFruit and DFRobot make breakout boards for the ADS1115. The breakout board is even better for this application since that would allow me to skip sourcing a board and small SMT soldering. At the time, the DFRobot had stock so that is what I went with. For the display, I wanted something low power, and also able to be read in the dark. As an employee of Crystalfontz, I was aware of the CFAG12864T3/U3, which has super low power consumption, can be read in sunlight, and has a backlight that makes it readable in the dark. For a controller I chose the Adafruit Metro Mini 328 – Arduino-Compatible – 5V 16MHz. It is compact, emulates an UNO and is available. Plus, it can be converted to 3.3v logic level which avoids additional voltage changes for the display. Some short jumper wires. For the power supply I chose a CUI VX7805-500-W which has a large input voltage range (compatible with automotive supplies, which is not trivial), has high efficiency and a low standby draw, and puts out a nice, clean 5v. To scale the “12v” automotive (typically 9v ~ 14v) analog inputs to the 5v ADC range, I used 15K + 5K resistors to make a 4:1 divider. This means that a voltage up to 16v can be read. Larger voltages will not damage the ADC input since the 15K resistor limits the current. I used 0.1% tolerance resistors, which to the limit of my ability to measure, are exact. 15K: Vishay / Dale RN55C1502BRE6 . 5K: Vishay / Dale RN55C5001BB14 . There is also a 5K pot that I used in series with the backlight current limiting resistor so the backlight can be dimmed, which is nice for night driving. PARTS LIST * DFRobot DFR0553 ADS1115 ADC breakout board * AdaFruit Metro Mini 328 * Wide range in, 5v out power converter * Precision 15K resistor (4x) * Precision 5K resistor (4x) * Backlight limiting resistor (typical) * Backlight dimming potentiometer (typical) * 128×64 backlit LCD with breakout board (provided by Crystalfontz) * Short jumper wires (provided by Crystalfontz) * 3d printed case * Various solder, heat shrink tubing, etc. The total cost of the parts was ~$US60 at the time I ordered. All parts used in this build were purchased or supplied free of charge by Crystalfontz for the purpose of creating this tutorial. WIRING Note: While Brent didn’t do this, we would recommend reducing the I/O voltages from the Metro Mini to the display from 5v down to 3.3v. This can be done by opening the 5v jumper on the back of the Metro Mini and closing the 3.3v jumper. The LCD and the ADC both expect 3.3v logic. Want more information about logic level? Read our post: On the Level: Arduino and Displays DIFFERENTIAL MODE Since I only wanted two channels and the four-channel ADS1115 has a differential mode, I ran separate wires to the positive and negative terminals of the vehicle and camper batteries. If your grounds are perfect and there were no noise sources differential mode would make no difference. Using differential mode will ignore any voltage drop on the ground cable and will also help to minimize common mode noise. We are going to try to display millivolts and the automotive environment is plenty noisy, so we want to stack the deck as far in our favor as we can. CONSTRUCTION I mounted the Metro directly to the back of the LCD, alongside the LCD’s interface board: I soldered the voltage divider resistors directly to the ADC board: Then used heat shrink to make sure there were no shorts: The parts fit together in a compact package: CASE I made the case in OpenSCAD — which is both fun and frustrating: The source and STL files are available here: https://baxsie.com/images/CFA/Dual_Voltmeter/Dual_Voltmeter_Case.zip Also on Thingiverse: https://www.thingiverse.com/thing:5476060 Then it was just a matter of some 3D Tetris to place all the components into the case. The case front and back are sized so that the ridges of the 3D printing kind of snap it together: Here is a picture of the completed hardware, mounted in the package tray above the driver seat: FIRMWARE As much fun as assembling the hardware is, the real star of this show is the firmware. Here is the full source, which can be opened with the Arduino IDE: https://github.com/crystalfontz/DualVoltmeter Of course, you can wade through my code and try to figure out what I did, but I will break it into sections and try to describe each section in words that can be understood. SETTING UP THE ADC We are using “GAIN_ONE” setting of the ADS1115. This means that each bit represents 1/8 of a millivolt (0.125mV = 125µV). The ADC is 16-bit signed so that gives us a range of -32768 to +32767 ADC ticks which corresponds to -4.096v to +4.096v differential input voltage. Keep in mind that we have a 4:1 divider in front of the ADC so the actual voltage range we can read is -16.384v to +16.384v, which makes each ADC tick is 0.125mV * 4 = 0.5mV. The basic unit that we will use and store is “half_mv”. As an example, one volt will be 2000 ADC ticks. Each reading can fit in a 16-bit signed integer. GETTING THE DATA FROM THE ADS1115 ADC We are using the ADS1115 setting “RATE_ADS1115_64SPS”. Each conversion will be complete after 17.5mS. To keep the code simple and make sure we sample the ADC channels at even intervals, the ADC is read in a timer ISR. The ISR gets hit 40 times a second – every 25mS. The ISR takes about 2mS, so approximately 8% of the processor time is devoted to reading the ADC. The ISR first reads the ADC’s completed previous conversion, then tells the ADC to start a conversion on the other channel then exits. The ISR reads the vehicle channel, starts the camper channel then exits. Next time it reads the camper channel (which is by now guaranteed to be complete) and starts the vehicle channel. Repeat. After it has read both channels – which takes two passes through the ISR — 50ms — it lets the foreground know that both channels have new data available. PROCESSING THE DATA FOR THE NUMERIC READOUT I want to display the current reading in 5 digits: VV.mmm I’m not using any floating point, so we want to have a number that represents millivolts. Our base data is in half_mv, so we can just divide it by two. However, a straight shift always loses the least significant bit. If we add 1 before the shift then we can get rounding instead of truncation. One of the problems with a digital display is bobble in the last digit. No matter how perfect the signal, the analog circuit, the ADC, and any amount of averaging, there will be voltage values that switch randomly between two readings. The way to solve it is by implementing hysteresis. You do not allow the new reading to change unless it is a certain number of ticks from the previous reading. By changing that number of ticks, you can settle the display digits. Here is the code: int16_t Hysteresis(int16_t ¤t, int16_t &previous, int16_t dead_zone_ticks) { if(current < previous) { //Going down. Is it big enough to make us change? if(dead_zone_ticks <= (previous-current)) { //Larger change, move but at the top of the dead band current+=dead_zone_ticks; //remember our new base line previous=current; } else { //Small change, do not move. current=previous; } } else { //Going up. Is it big enough to make us change? if(dead_zone_ticks <= (current-previous)) { //Larger change, move but at the bottom of the dead band current-=dead_zone_ticks; //remember our new base line previous=current; } else { //Small change, do not move. current=previous; } } } I use dead_zone_ticks of 6 so any change within 3mV of the previous reading will not change the display reading. This makes a much more stable and readable display for slowly changing or static readings. PROCESSING THE DATA FOR THE STRIP CHART Part of the challenge is to display the data in a way that a quick glance can give me a lot of information about what is going on. To make that work I keep a history that is 47 entries long – this matches the 47 pixel width of the strip chart. Each history entry keeps track of the maximum and minimum readings that have occurred within the sampling period. After the sampling period is complete, the history is shifted one notch and the process repeats. For my purposes, I like each pixel to represent 2 seconds of data, which gives 1 minute, 34 seconds of history on the graph. This can be changed in the code. Since our sample rate is 50ms, then 2S/50mS = 40 ADC max and min samples get stored in each history entry. Each history entry is represented by one horizontal pixel bar, with the length of the bar being determined by the maximum and the minimum readings observed within those 40 samples. AUTOMATICALLY SCALING THE GRAPH AREA At first glance, we could make the graph area represent 0v to 17v, which would map nicely to out 0v to 16.384v range. Each of the 39 vertical pixels would represent 17/39 ≅ 0.43 volts. The problem is that the voltage would have to change almost a half of a volt to move one pixel. Most readings would be a straight line. For screen space reasons, I decided to make the top and bottom scales of the graph area integer volts. I scan the 47 bins in the history and find the global max and global min. Then I take the next larger integer for the top limit, and the next smaller integer from the bottom limit. As an example, if all the readings are above 13 and below 14 then each of the 39 vertical pixels would represent 1/39 ≅ 0.025 volts. CALCULATING THE BAR GRAPH HEIGHT – NO FLOATING POINT I never want to use floating point on a tiny processor like the AVR. For most calculations you really do not need to. The trick is to use ratios and use parentheses to force the multiply before the divide. Use 32-bit operations for the intermediate results to make sure you do not overflow: //Convert from (data_max-data_min) in half_mV land to (y2-y1) land in pixels min_position_in_pixels= ((int32_t)min_half_delta*(int32_t)(y2-y1))/((int32_t)(data_max-data_min)); This gives the pixel coordinate from the half_mv ADC reading in one step without any floating point. The Metro Mini can do this twice, once for the max and again for the min in ~875uS. DRAWING THE DATA ON THE LCD To keep drawing simple and fast I use a section of the AVR’s memory as a screen buffer (uint8_t framebuffer[FRAME_HEIGHT_PIXELS][FRAME_WIDTH_BYTES];). Each 64-pixel wide line is stored horizontally in 8 bytes. There are 128 lines. 8*128 = 1024 bytes overall. I created the background in Photoshop as a BMP: and converted it to an array by using Image2Code ( https://www.crystalfontz.com/product/image2code ). This is stored in the processor’s flash (images.h): const uint8_t Background_Bitmap[1024] PROGMEM = { 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x80,0x00, . . . 0x3C,0x00,0x00,0x00,0x00,0x00,0x82,0x00, }; At the beginning of every frame, the first thing is to copy the bitmap from flash to the RAM framebuffer: void logo_to_framebuffer(void) { // ~ 583uS. Bytes configured correctly using Image2Code -- refer to // Image2Code_Settings.png memcpy_P(framebuffer,Background_Bitmap,sizeof(framebuffer)); } Then I draw in the other elements: the two voltages, two strip charts, and the scales. To draw the voltages in the large font, first I convert the binary value to a string (Voltage_To_Strings()) then I use put_big_number()to print the string to the RAM framebuffer. The chart scales are similar, except using Scale_To_String() and put_string(). The strip chart is plotted using Strip_Chart(). Once everything is rendered in the RAM framebuffer, Send_Framebuffer_To_Display() copies the framebuffer to the physical LCD (~2.7mS). CONCLUSION I have used this meter on a few trips, and I really like it for keeping an eye on the state of the camper’s electrical system. If you want to read more about other builds, check out vanmargrit.com CONTACT US If you have any questions, we can be reached at support@crystalfontz.com, we also provide chat and telephone support Monday through Friday during our open hours. We love to hear about your projects! Find us around the web (YouTube, Facebook, Instagram, LinkedIn, Twitter, Forum) and let us know what you’re working on. Subscribe to our Newsletter Kelsey Kelsey is an engineer at Crystalfontz. She graduated from Gonzaga University with a BS in Electrical Engineering. Kelsey’s roles at Crystalfontz include customer support, documentation, product demonstrations, and design. What our customers say about Kelsey: “As a new user to the world of LCD electronics, Kelsey has been a Godsend in providing the hand-holding I needed to get my project up and running despite my own efforts at fouling things up! :-)” – Owen M “Kelsey got me through changing code for a new LCD in only two short emails.” – Phillip V “The agent that I talked with (Kelsey), is technically sound and she knows what she is doing. The support is what made my job easier to get started with the different display technologies. Thank you!” – Vatsal S BUY EVERYTHING YOU NEED TO GET UP AND RUNNING Browse our catalog of LCD development kits, breakout boards, cables, ZIF connectors and all of the LCD software and drivers you need to develop your product or project. We are located in the U.S. so we can get product to you fast! LCD Development Kits Breakout Boards Cables & Wiring ZIF Connectors LCD Software USB LCD Drivers Shop LCD Accessories Now WHAT OUR CUSTOMERS ARE SAYING Robert Howell Quick response and answer completely answered my resquest! aydin karatas quick ! thanks Christian Griffin Very responsive and helpful support - I received a response that related directly to my question and offered contextual advice, not some canned copy-paste response like you receive from so many other online support channels. Spike kito Had issues with ePaper display but support stuck with me and helped me resolve the issue. Read All Our Google Reviews Finding the LCD you need? Need some help? * Search by Tech Spec Search by size, controller, interface, etc * Ask our product support team We're here to help! 8:30-4:30 PST 888.206.9720 * Product Notices Sign-up for part change or update notices * Newest products! We're adding new displays all the time. Purchasing Resources * Quick Order Know your part number? Checkout fast! * Request a Quote Get pricing and lead time info! * Our ISO 9001:2015 Certificate Of course we're ISO 9001:2015 certified * Conflict Mineral Reporting Template Download our latest CMRT * California Prop 65 Proposition 65 Information * Payment Information We accept many payment methods Builder Resources * Crystalfontz Blog * LCD Glossary * LCD Support Forum * LCD Controller Datasheets Popular LCD Searches * Smallest LCD Displays * Arduino ePaper Kits * Raspberry PI Screens * Transparent OLED * EVE Accelerated TFTs * Arduino LCD Displays * Low Power Displays * Custom Digital Displays LCD SOFTWARE Download LCD Drivers & utilities for our hardware. TECH FORUM Get information and support from our user community. TECH SUPPORT Contact us for free product technical support Crystalfontz America, Inc. 12412 East Saltese Avenue, Spokane Valley, WA 99216-0357 Hours: M-T, 8:30am - 4:30pm F: 8-12 pm PST Tel: (509) 892-1200 Fax: (509) 892-1203 Toll Free: (888) 206-9720 sales@crystalfontz.com © 1999-2024 Crystalfontz. All rights reserved. * Home * Products * Tech Support * News * About * Contact * Policies speed Quick Order lockSign In shopping_cart Cart 0