Scrolling Dot Matrix Display Development


#1

So I was thinking about how matrix scanning might work for scrolling text, but I guess the Audulus scan rate on the light node is ~120hz. So I accidentally made a patch that demonstrates aliasing.

3x4 char seq.audulus (157.0 KB) FLICKER WARNING

The idea was to switch between characters so quickly that you see the whole thing as continuous. However, because the light node only checks for an input maybe 120 times a second, rates exceeding 60 Hz start to skip inputs. Patterns emerge as the inputs are scanned, the length of the sequence is changes as well as the rate. You even see fleeting glitches.

Mostly I felt like sharing, but It might be fun to better understand the underlying limitations of displays in Audulus.


#2

I’m actually wondering if it’s the light node or my monitor now, I checked it out on my iPad too and the flickering definitely has a different character. Unfortunately I’m not sure how to check this out.


#3

scrolling dot matrix display.audulus (398.8 KB)

Here is a version that uses the STS uShift to create a scrolling text. I seem to recall that @stschoen had a whole tool kit for matrix displays. I’ve been using 3x4 matrix because it’s fewer light nodes I have to keep track of.


#4

I believe the light node samples at audio rate. What you’re expecting is the Light node to act like an LED, which has a little bit of lag before it visually turns off when the current is removed. The Light node is like an idealized version of an LED so it doesn’t have this “flaw” that is really a “feature” in this case.

What you’re seeing in the flickering is the interference/syncing between your monitor’s refresh rate and the on/off state of the light.

The way I solved this in a patch I made a long long time ago was to create timers for each pixel that would keep the light turned on for a given amount of time - I forget what the patch is called, but it’s in the old forum collection.

All you do is have a timer gated by the input on/off signal and then have an expression time < maxtime fed into the input of the light where time = output of timer and maxtime = length of time you want to keep the light on. It’s basically a gate smear is what i’m saying.


#5

Unfortunately that would require 96 timers and conditional statements, no?


#6

Yep - unless you want to treat each block as its own letter, in which case you can have one per character display. You wouldn’t be able to scroll smoothly one pixel to the next, but you could scroll one character to the next.


#7

Ultimately I don’t think the solution I’m thinking of would fare better than the last patch you added with the uShift. Lots of CPU savings will happen when Taylor adjusts the sampling frequency of things like lights!


#8

This was the scrolling display I built quite some time ago. Each letter is encoded by a decimal number.


scrolling 8 character display.audulus (1.4 MB)


#9

Here my take on a traditional 7 segment numeric display. It uses SVG graphics to mask part of the lights. I’ve included the original one and three digit versions as well as a smaller model (V2)


seven segment display.audulus (211.9 KB)
seven segment display V2 - small.audulus (308.1 KB)


#10

5x7 characters! Look at all that resolution :exploding_head:

Thanks for reposting, it’s always good to have a reference.