Approach

The Big Plan

When planning this project and without knowing the exact difficulty ahead of us,  our group  decided that we wanted to create a sign that can display messages and graphics. We wanted it to be easy to use and have it programmed in such a way that other students of other staff members  can easily  program  a message to the display and have scroll right or left.  During the planning stage and when reviewing the literature we realized that in order to accomplish this goal we had to divide the project into high and low level functions areas where a particular group member can dedicate themselves to a particular area of the project. These task were divided according to skills sets and interest areas of the group members.

The Types of Tasks

The low level functions tasks  included; addressing the physical hardware on the Dot Matrix Display (DMD) with the micro controller to display the correct data and other similar functions. This area had to figure out the algorithms used by the two hardware to processed the data. This area of the project relied heavily on the limited literature review of manuals, online communities etc…  However finding the right information was sometimes impossible as we didn’t find anyone else who used the same hardware and had to create our own approaches to create our program.

The high level functions tasks involved creating and manipulating the data to be displayed on the DMD and to build a user library of functions and controls. These tasks involved creating a library of symbols and functions that allows a user to simply type-and-display their messages.  Our group wanted to create a system that other users can use it to program the display and therefor had to come up with clever functions that were easy to use but still gave flexibility to the users.

The First Tasks

The achieve the goals mentioned above, our group’s first task was to created a unified addressing system for the data that can be common to both the high and low level functions.  Without realizing at the time but later this arrangement made it very convenient to create a simulator of the DMD. The helping hand of a simulator allowed for multiple group members to work together and helped our group deliver much more than initially anticipated.

Creation of Addressing System and XY Function

In order to address the display data in memory, a two dimensional array was considered the most the most similar to the physical location of the light emitting diodes (LEDs) within the display. On further consideration a table of arrays was decided upon and labelled XY. With this function, two numbers on the stack would return the address of the byte required, these are the number of bytes to index from left, or X, and number of rows to index from top, or Y.

In planning memory usage, additional bytes were allocated to each side of the visible display for staging data, metadata or similar purpose such that 1 1 XY would return the address of the byte containing the data within the top left corner of the display. By addressing the data in this way multiple bytes could be written at once if required, for example doing a double write (2!) to 1 5 XY would assign data to all 32 LEDs on row 5 and can make for much faster/easier updating of the DMD where appropriate. For further details on this function see the XY coordinate addressing page.

Simultaneously work on both low level and high level functions

With this common addressing system it became possible to split the tasks within the project and for all team members to be contributing simultaneously to individual tasks as well as collaboration on any issues found without having to wait for access to resources.

A progressive and modular approach was taken towards building up both the low and high level functions, some of these milestones are highlighted below:

Low Level Function Development Milestones

  • Activate SPI subsystem and verify signalling on oscilloscope
  • Connect SPI output to a single shift register and update at will (including latching)
  • Develop code to update 1/4 of panel (no multiplexing and no brightness control)
  • Add multiplexing to update the full panel
  • Add brightness control
 TestShift_leds

High Level Function Development Milestones

  • Develop words to clearly show the display data in memory
  • Develop a simulator to run from a trial version of SwiftForth using the console window
  • Create scrolling functions that can manipulate both the data to be displayed and the data in the staging areas
  • Create an excel based code generator for simplified graphic and font generation
  • Create fonts which can turn ASCII values into their graphical representation
  • Develop an easy to use word which will scroll any string across the display