====== OLED ASCii Display ====== This module displays ASCii coded text on the OLED Display Pmod. It provides an interface that makes it possible to control each display character individually. This module is (by far) sub-optimal and may be improved by several means. This could by the objective of a student project. {{ :en202:oled_ascii_symbol.png?direct&700 |}} ({{ :en202:oled_ascii_symbol.vsd | figure source }}) ==== Resource requirements ==== * 1 36kb Block RAM * ~150 slices ==== Limitations ==== * module is slow * only the standard ASCii values are supported (from 0 to 127) ==== Warning ==== * The //resetn// input is active-low, //eg// it must be set to get the module working properly (='1') * The OLED_ctrl module manages its own initialization, therefore, it is not necessary to perform any specific operation. The display power-on sequence may take up to 120//ms//, users should then expect a very long first-write time response from the module. ===== Displaying a character ===== Each character position is identified by a couple of std_logic_vectors : * col (//std_logic_vector(3 downto 0)//) defines the column of the char to be written. Columns are numbered from left to right (0 to 15) * line (//std_logic_vector(2 downto 0)//) defines at which line the char should be written. Lines are numbered from top to bottom (0 to 3). To write a character on the screen, it is necessary to assign the ASCii value of the character, the column and line to write. The write command is provided by //char_write//. * position and ASCii char values **must not** change as long as //char_write// is set (='1') * once asserted, //char_write// must remain asserted until the //write_ack// output is asserted by the module too. The OLED_ctrl module response time is between 100//µs// and 1//ms// * once a write operation is started, the module will be busy transfering data to the screen during 12//µs// to 15//µs//. The //write_ack// output will remain high while this operation is performed. * The //char_write// input must be reset before //write_ack// returns to low state. * It is not possible to write any character during this time. ===== Display rotation ===== As it is possible to connect the OLED Pmod in two ways, the displayed text might not be easily readable. By default, the module considers that text should be displayed the same orientation than the PCB serigraphy (references / brand and copyrignt). If the display should be rotated by 180° for design reasons, the module provides the optional //reverse_display// generic input. If //reverse_display// is set to '1', displayed text and positions will be rotated to reduce architecture modifications. ===== Files ===== * {{ en202:pmodoled_ctrl.zip | module files}} * {{ https://www.digilentinc.com/Data/Products/PMOD-OLED/PmodOLED_rm.pdf | Pmod datasheet }}