Close

More display work

A project log for Rusty Maschine

Repurposing a Maschine Mikro Mk2 controller to drive a Microcontroller MIDI sequencer or CV/Trigger outputs (and learn Rust)

tim-savageTim Savage 03/30/2021 at 00:150 Comments

Following the last post on working out how the display data is formatted, I have come up with a better description of how the data is formatted.

The display is made up of rows, each row is made up of 128 bytes where each byte defines 8 vertical pixels.

On the Maschine Mikro Mk2 that means that 8 rows (64pixels) are required for the whole display.

In addition, each USB report can send up 256bytes of row data so an entire screen refresh requires 4 reports.

The Report header

After mucking around with the header fields I have managed to determine what each of them do

FieldTypeDescription
Addressuint8Display or Message type identifier (0xE0 for the display)
Column Offsetuint8A column within a row to insert pixel data
-uint8Possibly a high byte for the previous field for larger displays, set to 0
Row Offsetuint8Row from the top to insert pixel data
-uint8Possibly a high byte for the previous field for larger displays, set to 0
Row Widthuint8Width of each row in pixel data (allows for partial row updates)
-uint8Possibly a high byte for the previous field for larger displays, set to 0
Row Countuint8Number of rows in pixel data, for a full row this would be 2,
must be at least 1.
-uintPossibly a high byte for the previous field for larger displays, set to 0

Following the header is up to 256 bytes of pixel data. 

The following rules apply, Row Width x Row Count must be <= 256. So an entire vertical slice of the display can be updated by setting with width to 0x20 and the row count to 0x08.

Discussions