After playing around with the Tink2X some more, I was pretty dissatisfied with it, for a couple reasons:
- There's no way to tweak brightness or color saturation
- You can't make the scanlines more or less intense
- The output is integer scaled, which leaves large black borders (probably 1/4 of the screen goes unused)
- RE'ing someone else's board, without knowing what their MCU firmware does, PLUS all the other compromises, is just dumb.
Despite being a bit jankier and having a longer signal chain, Shinobi Scaler 2 solves
all of these issues. I'm still glad I experimented with the Retrotink products, and I think for consoles that output 320x240 like PS1, they're a great option. But for SNES, which is 256×224, Shinobi is way more flexible.
So, I bit the bullet and assembled a Shinobi 2!
I was having some issues talking to the ESP8285 at first. The CH343P's COM port was showing up, but esptool couldn't see the ESP8285. I thought maybe my auto-reset transistor circuit was messed up, so I bodged in a program mode button, and a POR cap just to be safe. I also stacked another resistor onto the 2.5V buck to make it output 3.1V temporarily, to rule out the undervolting.
But it didn't do squat. In desperation, I even swapped out the ESP.
After looking at some other ESP8285 designs, it turns out I had mistakenly connected VDD_RTC (internal 1.1v reg) to all the other power pins. Sure enough, that side of the ESP was getting really hot. Surgery time!
After that, it programmed just fine!
I undid all my unnecessary bodges, and did some power tests with the PPK2.
During these tests, I noticed that the screen was "wobbling" in a way that aligned with some nasty current transients on the PPK2 graph.
Those spikes are nearly 300mA! I immediately suspected the Wi-Fi block of the ESP8285, so I changed line 7211 of the Arduino sketch to disable Wi-Fi and the web UI entirely.
I also rewired my setup to use CSYNC (it was using CVBS as sync before. oops) and added a 68uF electrolytic cap to the output of the 2.5V regulator. These things not only fixed the wobble, but also eliminated the transients and reduced the power consumption by
150mW!
Here are the final power consumption numbers when scaling 240p->480p, with Wi-Fi disabled. This is the total input power to Shinobi Scaler 2, and doesn't include the screen or anything else.
- 247mA @ 5V = 1.235W
- 286mA @ 4.2V = 1.20W
- 320mA @ 3.7V = 1.18W
- 359mA @ 3.3V = 1.18W
- 393mA @ 3.0V = 1.18W
The original Shinobi Scaler used 650mA @ 3.3V
(2.15W). So this is a monumental improvement! With a small heatsink, the board only gets warm, instead of hot enough to burn you like Shinobi 1. I now feel comfortable integrating it into αSNES! Special thanks to
@thedrew for doing initial GBS-8200 undervolt testing and inspiring me to revise Shinobi.
With some small code tweaks, I can switch between two video profiles on the fly using a pushbutton. One profile will be what's shown in this post (non-integer scale, screen filled) and another will be integer-scaled with scanlines. This way I get the best of both worlds and can toggle between them depending on the game. Also, Shinobi 2 takes ~8 seconds to boot up, so I will have to delay the LCD and SNES turning on for at least that long to avoid blue screen / video dropouts.
Shinobi Scaler 2 will be finalized and moved to the main repo branch on GitHub soon™.