@lbruder, RAM will be the issue. One 16x32 panel takes 1.5KB of RAM. A 32x32 panel takes 3KB. I think we could manage 3 16x32 panels at 4.5KB and possibly 4 (or 2 32x32 panels) at 6KB but no more. I have to do some compile tests to see what happens.
UPDATE: The maximum number of 16x32 panels I could compile for and still run was 2 (or a single 32x32 panel).
Ok, so it seems I miscalculated the refresh rate of the display. From the data gathered on my logic analyzer, a single frame is drawn in approx. 750us, giving a maximum refresh rate of of 1300Hz!!! The actual refresh rate, of course, will be dictated by the rate at which data can be updated to the display buffers.
BTW, by changing the pins used for the RGB lines so they are all on the same GPIO port, I wrote optimized code to get the refresh rate up over 1600Hz!
UPDATE: The full screen refresh rate is actually the scan rate divided by 4. SO, the revised refresh rates are 325Hz and 400Hz.
OK. I have quietly been working on this display this whole summer, and I built a 32x32 version! Iāve got the x/y translation working nicely, but Iām running into a crazy problem with the color mapping. Some colors work fine, but others cause glitches across the whole panel! I think there is some magic display stuff happening that Iām not super knowledgable about, and Iād really love your input if you have time / are interested!
Hereās the code:
Hereās the build photo:
Hereās a video of it glitching in action, note it should all be one color!
The video starts with me trying to draw x mapped to Red, and y mapped to Green, and then it just cycles through all colors, wiping the display to be one solid color, but it glitches like mad!
@Dave, in the picture I noticed that the top panel is reversed of the bottom panel. This could affect x/y positions. Not sure about color issues. Can you share your code?
Thanks! Sure thing, the physical rotation / layout of the boards physically is weird, I tried my code again with a single board, and Iām seeing similar color glitches.
To address the physical rotation, I added a new rotation mode (5), which is handled here:
I suspect the 2 panel stuff might be a red herring until I can get the colors perfect on the 1 panel, so it might be something I messed up, so Iāll examine my code again to make sure it doesnāt significantly differ from your example in the 1 panel case.
@Dave, I will work on the 16x32 code to start with. I have my panel here but it is wired a bit differently for port-writing speed optimization. Iāll test you code with that to see what the issue might be then go from there.
You rock, thank you! When it comes to writing direct drivers for displays, I must admit Iām a little over my head, so any help is much appreciated. My 16x32 version is here ( https://github.com/dmiddlecamp/ambient-display/tree/master/display-firmware ), I gave up on color tests and just started stubbing in a display / menu framework, so itās still very rough.
@Dave, its take a while but I am working on your code with one exception. My Core is wired to use the āacceleratedā port writing code. I have your code running and now I just need some test cases to understand what problems you were having. From reset, the display shows a scrolling āHi Dave!ā without any glitches.
BTW, whatās the best way to publish an event that the code can pick up. Or perhaps itās better to convert the Spark.subscribe to Spark.function and pass them the same message?
Thank you! I found certain colors donāt behave as expected, if you switch the text color to solid green, red, blue, etc, you should see some color glitches to start.
@Dave, I added some color rotation code using the HSV colors (larger palette) and ran a larger message so see the color changes and did not have any glitches whatsever. Remember, I am using the port-optimized code which has slightly different wiring and runs faster. I took a video so I will update once I post it.
Dang! Okay, I guess I need to scrap my pcb and try wiring it directly again with your code, looks like I probably messed something up. Iāll try to report back quickly, I really appreciate your help!
@peekay123 & @Dave, this is some awesome work you both have done here
I have just ordered two 32x32 boards and I can't wait to test your code - if you don't mind.
I'm just a bit puzzled about this part of the the previous post
@ScruffR, in the library has some (conditionally compiled) optimization for speeding up the I/O to the display which have specific wiring requirements. Dave is referring to that. The RAM on the existing Core wonāt handle two 32x32 displays but the Photon with easily. If you need any help understanding the optimization, let me know.
Iāll try to make two of my Cores work togeter on the two panels (publish/subscribe) - one scrolls some text out of its own panel onto the next Core and round again.
I hope latency is not killing this endeavour.
@Julian, the pinouts details are defined in the library files. I have also post a āfastā version of the library here, which optimizes the port writing by using a fixed wiring layout, again described in the .cpp file. HAPPY BDAY!