I bought an Ubercorn in the Black Friday sales last year and, apart from playing with the demo scripts at the time, have only just found time to start coding with it properly.
I started by trying to work out how the grid reference system works, so wrote a quick test script to light just the LED at 0,0:
import unicornhathd unicornhathd.rotation(0) unicornhathd.clear() unicornhathd.set_pixel(x=0, y=0, r=255, g=255, b=255) unicornhathd.show()
This lights up 0,0 white, as expected, but 0,15 also lights up a dim green colour. Looking closely at the LED, all three colours are lit, but green is brightest, followed by blue then red.
If I light 0,15 on its own instead, I see 0,14 dimly lit.
If I choose any other LED in the grid, I seem to get a similar effect - the previous LED in the same column lights up (wrapping around when on the edge). If I change the colour of the main LED to red, the ghost is also red, green it is also green etc.
Having previously had some experience with driving smaller LED arrays directly with an Arduino, it looks very much like the Ubercorn’s scanning code is not blanking the row-contents register in one of the LED driver chips before switching rows, leading to a very small period of time where the same LED on the next row is receiving current before the register is updated for the new row’s contents, producing a much dimmer echo of the previous row (essentially PWM with a narrower pulse).
So, to me, this looks like a firmware issue on the Ubercorn, rather than a hardware problem or anything wrong with my Python code. Is there anything I can do to rectify this? My intended application requires clean on/off states for all LEDs.