<div dir="ltr">Justin,<div><br></div><div>If I find myself in the Hackspace between now and Monday, i'll give the new test script a go.</div><div><br></div><div>I came across <a href="https://damow.net/fun-with-flip-dot-displays/">this blog post</a> today, from a maker who has reversed engineered a similar Hanover display that he is now controlling with an ESP32 on a custom PCB.</div><div><br></div><div>By using frame interpolation he has achieved a very good refresh rate, see - <a href="https://www.youtube.com/watch?v=XZV0VF4d4HE">https://www.youtube.com/watch?v=XZV0VF4d4HE</a></div><div><br></div><div>I sent him a message to let him know what we're doing and he came straight back asking for more information.</div><div><br></div><div><br></div><div>Peter</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jul 24, 2018 at 3:31 PM Justin Mitchell <<a href="mailto:justin@swansea.hackspace.org.uk">justin@swansea.hackspace.org.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Has there been any progress on this since Monday 16th ?<br>
<br>
Following the experiments that day i read through the signaltrace file<br>
and noted several things of interest:<br>
<br>
1) That there is one commit pulse per row pulse, 16 row pulses per<br>
column pulse, and after 32 column pulses there is what i can only<br>
assume is a 'reset' pulse.<br>
<br>
2) each commit pulse changes all 4 enable lines, with P1-P3 always high<br>
during a commit/reset pulse and low the rest of the time, with P0 being<br>
high most of the time, and low during the commit pulse.<br>
<br>
3) the reset pulse is similar to a commit pulse, but all enable lines<br>
(P0-P3) are high, so is the column line, when the commit line is<br>
pulsed.   This presumably resets all the row/column counters.<br>
<br>
4) There is an even stranger variant, like an elongated variant<br>
combining both commit and reset, which may be some kind of panel<br>
selection instruction.<br>
<br>
I'm now certain that the P0/enable line has to be controlled, and<br>
possibly the other three, although it may be possible they can just be<br>
pulled high.<br>
<br>
The simple_test arduino code has been updated to reflect these<br>
observations, although we still dont know the correct pulse intervals<br>
as theres no timing info with the trace, so that may need some<br>
experimentation.<br>
<br>
Once someone can confirm that simple_test works I can combine the<br>
changes with the gfx_test code which gives you full Adafruit_GFX<br>
interface to the panels. Its fairly simple from there to write the code<br>
to do a serial interface to gfx primitives as i outlined elsewhere.<br>
<br>
<br>
<br>
On Sat, 2018-07-14 at 10:50 +0100, Nathan Hackett wrote:<br>
> Thanks Peter for the info! My immediate thought was to add active<br>
> cooling to the coils although I know that's ridiculous...<br>
> I think a nice web interface would be a good approach - if it works<br>
> on the network then great, if not we just fullscreen a browser on the<br>
> pi and run it from localhost.<br>
> Given that this potentially has some 'realtime' requirements for web<br>
> based control pads etc, and the need for some glue logic to talk to<br>
> the serial interface, personally I'd gravitate towards a basic python<br>
> framework like Flask, or maybe one of the asyncio variants with<br>
> websockets support such as Quart or Sanic. Just in terms of speed and<br>
> ease of development, they're great for toy projects. I guess it comes<br>
> down to which stack is preferred among those willing to help. :)<br>
> <br>
> I can lend a couple of wireless Gamecube Wavebird pads with usb<br>
> adapter, which are very robust. As long as they're not likely to<br>
> wander off on their own. ;)<br>
> <br>
> On Fri, Jul 13, 2018 at 12:29 AM Peter Barnes <<a href="mailto:pe5erb@gmail.com" target="_blank">pe5erb@gmail.com</a>><br>
> wrote:<br>
> > Nathan,<br>
> > <br>
> > The spec sheet for the panels is that we can refresh an entire<br>
> > display at 2Hz. We may be able to push this further, but the coils<br>
> > will burn if they are left on too long / used too often.<br>
> > <br>
> > As we will be driving each display individually, this refresh rate<br>
> > will not be affected by combining multiple panels into a billboard.<br>
> > <br>
> > I'm sure we can achieve a much higher refresh rate by only changing<br>
> > the pixels that need changing (frame interpolation), enough to run<br>
> > a game such as Tetris etc.<br>
> > <br>
> > <br>
> > If we use an RS-485 bus to connect the panels, this will not limit<br>
> > the refresh rate, we will almost certainly be limited by the<br>
> > maximum duty cycle of the coils or the speed at which we can<br>
> > address the panels.<br>
> > <br>
> > We haven't had much discussion about the front end software, but<br>
> > it's looking like we might write something that will run on a Pi 3<br>
> > with a monitor, that will let us switch between different programs<br>
> > that we've written for the panels.<br>
> > <br>
> > For games, wired pads would work well but they could get broken<br>
> > easily. We could make a web controller that people could use with<br>
> > their phones. The network was rock solid last time but i'm a little<br>
> > apprehensive about relying on a connection for everything to work.<br>
> > <br>
> > <br>
> > <br>
> > Peter<br>
> > <br>
> > On Thu, Jul 12, 2018 at 10:31 PM Nathan Hackett <<a href="mailto:nhackett1@gmail.co" target="_blank">nhackett1@gmail.co</a><br>
> > m> wrote:<br>
> > > Great to see this project take shape, amazing the motivation a<br>
> > > deadline can create. ;)<br>
> > > <br>
> > > You're all better placed to make decisions about driving the<br>
> > > board's so I won't jump in on that except to ask, what do we<br>
> > > think is the theoretical refresh rate for the entire display?<br>
> > > Assuming a low number of pixels changing each frame, like in<br>
> > > Pong. And is the proposed serial interface fast enough to update<br>
> > > the entire panel matrix at this rate from a bitmap source?<br>
> > > <br>
> > > What's the plan for the software, who's helping? I'd love to help<br>
> > > with the games - would we be going for wired pads or some sort of<br>
> > > web interface? What's the wireless network situation at EMF?<br>
> > > <br>
> > > I'm still planning to donate up to two panels to the space once<br>
> > > this display has served its promotional purpose, but just so<br>
> > > everyone's aware I'll want the rest back in time to split up for<br>
> > > xmas gifts! :)<br>
> > > <br>
> > > <br>
> > > On Tue, 10 Jul 2018, 16:32 Justin Mitchell, <justin@swansea.hacks<br>
> > > <a href="http://pace.org.uk" rel="noreferrer" target="_blank">pace.org.uk</a>> wrote:<br>
> > > > On Tue, 2018-07-10 at 13:47 +0100, Peter Barnes wrote:<br>
> > > > > Justin/Gwion,<br>
> > > > > <br>
> > > > > > Have you documented which pins do what, the voltages and<br>
> > > > currents<br>
> > > > > > required, etc ?<br>
> > > > > <br>
> > > > > Yes, Tom has put together a full schematic in KiCad for the<br>
> > > > display,<br>
> > > > > which along with exported logic analysis from a scope at uni<br>
> > > > has<br>
> > > > > allowed us to figure out which pins do what.<br>
> > > > > <br>
> > > > > > I looked at the project page you listed but it only points<br>
> > > > to other<br>
> > > > > > peoples similar projects. <br>
> > > > > <br>
> > > > > I've just updated the Project Page with all of this new<br>
> > > > information,<br>
> > > > > so that should make a lot more sense now. <br>
> > > > <br>
> > > > I have grilled Tom to get a breakdown of how you communicate<br>
> > > > with the<br>
> > > > panels, as this info is not yet on the project page or reverse<br>
> > > > engineering log.<br>
> > > > <br>
> > > > So it boils down to 4 IO lines at 5V, plus a 15V power supply.<br>
> > > > <br>
> > > > Column select, row select, pixel value, and latch.<br>
> > > > <br>
> > > > So assuming some goals for the drivers:<br>
> > > > <br>
> > > > * one driver per display panel, so they are interchangable.<br>
> > > > * minimise changes to individual dots when changing display<br>
> > > > * minimise data between master controller (RPI?) and panels.<br>
> > > > * keep costs low whilst avoiding too much hardware building<br>
> > > > <br>
> > > > My first suggestion would be to drive each panel with an<br>
> > > > arduino pro<br>
> > > > mini board, they cost about a pound each these days, and<br>
> > > > running them<br>
> > > > from a 5V power supply line means they can interface directly<br>
> > > > with the<br>
> > > > panel.<br>
> > > > <br>
> > > > If they implement a double-buffered graphics controller, 16x32<br>
> > > > pixels =<br>
> > > > 64 bytes ram per buffer is easily achieved. so that when<br>
> > > > signalled it<br>
> > > > will update the display from memory flipping only the dots that<br>
> > > > have<br>
> > > > changed since last update.<br>
> > > > <br>
> > > > Then use a simple serial protocol to feed it graphics commands<br>
> > > > over the<br>
> > > > serial port. just a few commands box, circle, line, text,<br>
> > > > bitmap,<br>
> > > > update-display, would probably do.  there are plenty of<br>
> > > > libraries<br>
> > > > around to implement the actual drawing and fonts eg u2g or<br>
> > > > adafruit gfx<br>
> > > > library<br>
> > > > <br>
> > > > to attach several panels to one master controller, assuming it<br>
> > > > doesn't<br>
> > > > have many serial ports, and you want to run them fast, i would<br>
> > > > suggest<br>
> > > > adding RS485 interface chips. You can get breakout boards with<br>
> > > > MAX485<br>
> > > > chips on them from aliexpress for 25p each.  that lets you have<br>
> > > > upto 32<br>
> > > > devices share one serial port.<br>
> > > > <br>
> > > > you then run whatever high level code you want on the RPi,<br>
> > > > receive<br>
> > > > twitter messages, decode videos, play games, whatever.  it<br>
> > > > creates a<br>
> > > > set of gfx commands to update the display panel buffers, and<br>
> > > > when the<br>
> > > > updates are complete send a sync/update command to all the<br>
> > > > panels to<br>
> > > > have them flip the dots to match the internal memory.  nice and<br>
> > > > smooth.<br>
> > > > <br>
> > > > <br>
> > > > <br>
> > > > as an alternative, for single panel independence you could<br>
> > > > drive a<br>
> > > > panel using an ESP8266/32 with just a few transistors or a<br>
> > > > level<br>
> > > > shifter to connect to the drive pins. a cheaper solution when<br>
> > > > you just<br>
> > > > want a single panel to be doing some things on its own, like<br>
> > > > being a<br>
> > > > clock or status display or something.<br>
> > > > <br>
> > > > <br>
> > > > happy to help implement parts of that, although i dont get to<br>
> > > > the space<br>
> > > > all that often lately.<br>
> > > > <br>
> > > > <br>
> > > > _______________________________________________<br>
> > > > Hackspace mailing list<br>
> > > > <a href="mailto:Hackspace@swansea.hackspace.org.uk" target="_blank">Hackspace@swansea.hackspace.org.uk</a><br>
> > > > <a href="http://swansea.hackspace.org.uk/mailman/listinfo/hackspace" rel="noreferrer" target="_blank">http://swansea.hackspace.org.uk/mailman/listinfo/hackspace</a><br>
> > > <br>
> > > _______________________________________________<br>
> > > Hackspace mailing list<br>
> > > <a href="mailto:Hackspace@swansea.hackspace.org.uk" target="_blank">Hackspace@swansea.hackspace.org.uk</a><br>
> > > <a href="http://swansea.hackspace.org.uk/mailman/listinfo/hackspace" rel="noreferrer" target="_blank">http://swansea.hackspace.org.uk/mailman/listinfo/hackspace</a><br>
> > <br>
> > _______________________________________________<br>
> > Hackspace mailing list<br>
> > <a href="mailto:Hackspace@swansea.hackspace.org.uk" target="_blank">Hackspace@swansea.hackspace.org.uk</a><br>
> > <a href="http://swansea.hackspace.org.uk/mailman/listinfo/hackspace" rel="noreferrer" target="_blank">http://swansea.hackspace.org.uk/mailman/listinfo/hackspace</a><br>
> <br>
> _______________________________________________<br>
> Hackspace mailing list<br>
> <a href="mailto:Hackspace@swansea.hackspace.org.uk" target="_blank">Hackspace@swansea.hackspace.org.uk</a><br>
> <a href="http://swansea.hackspace.org.uk/mailman/listinfo/hackspace" rel="noreferrer" target="_blank">http://swansea.hackspace.org.uk/mailman/listinfo/hackspace</a><br>
<br>
<br>
_______________________________________________<br>
Hackspace mailing list<br>
<a href="mailto:Hackspace@swansea.hackspace.org.uk" target="_blank">Hackspace@swansea.hackspace.org.uk</a><br>
<a href="http://swansea.hackspace.org.uk/mailman/listinfo/hackspace" rel="noreferrer" target="_blank">http://swansea.hackspace.org.uk/mailman/listinfo/hackspace</a><br>
</blockquote></div>