MintyPiPico is a super tiny handheld clam shell device inspired by the Minty Pi Altoids tin video game, but it uses the RP2040 Zero. It's based on the Picopad schematic, operates on the PicoLibSDKby Miroslav Nemecek, and uses an even smaller Altoids Smalls tin.
This prototype (#2) is completely hand wired, and not for the faint of heart. Also, the lid doesn't close fully because it's really small in there. Hopefully a later PCB version will fix that. Despite being tiny, it's very playable.
The STL files are public Domain. Everything else is whatever Licenses that other people assigned to their work. I am not linked in any way with the open-source gaming console Picopad.
SuppliesShown above is just about everything you'll need.
Wiring it all up!All wires to the RP2040 Zero are exactly the same as the PicoPad, so no software changes are needed. Just wire all I/O lines according to the PicoPad schematics, with the exception of the improvements listed below. The RP2040 Zero provides 3.3V power for the LCD display and SD card reader.
Here's how the modules are connected together.
The button board screws into the 3D-printed front panel in the base with five M2x4 self-tapping screws. It's made out of perfboard, which it turned out was not as stiff as I would have liked. The UP or X button takes a bit more pressure than the rest, but it works..
Tactile dome switches are used for the A/B/X/Y and D-Pad buttons. The conductive rubber pads go between the black plastic buttons and the dome switches to give it a nice feel. Ugly, isn't it?
Order of assembly is:
1. Black plastic buttons and D-Pad, trim 3D-print to get a good fit without binding.
2. Rubber membrane pads - trim so they don't touch each other.
3. Button board
4. Screw it all down.
I used a large MOSFET for the power ON/OFF circuit because I didn't have a small SMD P-Ch part handy. But the ones listed in the parts list work great and handle 1A.
Power switch improvementI used a custom push-ON, push-OFF circuit so that it doesn't need a slide switch for power. I mainly did this to save cutting when cutting holes in the case. Plus, it's slick, and draws virtually no power when OFF. The push button is located at the top center of the front panel.
The PicoPad uses a single NPN transistor to drive a passive buzzer. For most retro video games, this is adequate. I wanted a little better sound quality, so I found a rectangular cell phone speaker in an old HTC phone, and also added a very simple Class AB push-pull amplifier stage to resolve an issue described below.
A bug in some PicoPad games sometimes leaves the SOUND output of the RP2040 at about 1.4V instead of 0V, PacMan in particular. This results in a DC voltage across the speaker, so it dissipates around 1 watt and gets quite hot. Resetting the board fixes the problem. To resolve this issue, I added a 10 uF coupling capacitor to the speaker wires.
If room permits in further iterations, a 23mm Game Boy speaker can be used.
Just for fun, I hooked this to a much larger 8 Ohm speaker and it was quite loud.
Battery charger moduleThe PicoPad has a TP4056 battery charging circuit onboard, so I replaced that with a TP4056 charger module. This one is adjustable, so with the battery connected, you'll need to adjust the small variable resistor to output 5 volts before connecting it to anything.
It accepts a USB-C input, and the charging current can be adjusted by replacing the resistor indicated below with the proper value. I chose two 10kOhm 0603 resistors in parallel to limit charging current to about 1C, 250mA for the 230mAh battery.
Is a stock standard Li-poly battery. I chose the largest one that would fit, 230mAh. Still, it runs for over an hour of game play, which is pretty impressive.
The battery size is 303030, which means 3.0mm thick, 30mm wide, and 30mm long. It has a built-in over-discharge and under-charge protection circuit like most Li-poly cells, so no protection circuit is required.
LCD DisplayThe LCD board was...a bit of a challenge, because it has a 0.8mm pitch 12-pin connector. It's difficult to find a mating FPC (Flexible Printed Circuit) connector, as it's intended to be soldered down. So I had to manually wire the 0.8mm LCD flex connector to a 1mm pitch FFC (Flat Flexible Cable) cable to run between the display in the lid and the base. Kapton tape held everything steady while I soldered this.
Then I removed the tape, flipped it all behind the LCD display, pressed it into the lid bezel, and secured it with more Kapton tape. The lid bezel holds the LCD display securely.
A 5.1 Ohm resistor in the base is connected in series with the backlight LED to keep the voltage below the 3.1V maximum. Details of connections are given here.
Note that the vendor signal names SCL and SDA are in fact incorrect naming, as these signal names are only used for the I2C (Inter-Integrated Circuit) protocol. This display uses the SPI (Serial Peripheral Interface) protocol, so the SCK and MOSI (Master Out Slave In) names are actually correct. The PicoPad schematic uses the correct names given in the right column.
The other end of the 12-conductor FFC cable is also hand-wired to wire wrap wire, and then to the corresponding connections on the RP2040 Zero I/O or power supply. UV curing solder mask is applied to secure the wires. More fun!
The LCD display is snapped into the 3D-printed bezel that fits snugly inside the lid. Thin strips of 3M Very High Bond tape can be added to further help secure the bezel in the lid, but it should be fine without it.
You can use any generic RP2040 Zero, or the original Waveshare version. They connect the same. Here's the one I used.
One very unfortunate bummer is that several of the GPIO pins used on the PicoPad are not brought out to the edge connectors on the RP2040 Zero. And since I had no intention of rewriting the code to reassign pins (how does one do that anyway?), I decided to solder directly to the micro-mini pads provided for the unfortunate I/O pins. Here is a diagram showing the location of each misfit I/O GPIO17-21.
And here it is after soldering to the mini pads, using a fine-tipped soldering iron, 30 GA wire wrap wire, and UV curing solder mask to secure them.
The blurriness matched my eyeballs after soldering!
The ugliness (beauty?) withinSo here's a few pictures of the inside. Yes, it's a mess. But what do you expect with 30GA point-to-point wiring? Again, your eyes will be this blurry after wiring it up.
The battery sits on the bottom right with double-sided scotch tape. The charger and SD card board sit on top of that. In the upper left you see my hacked together SMD audio amp board. I super glued each component to a bare fiberglass board, and tack soldered them together. UV curing solder mask holds the wires in place after passing through holes in the board.
And the Micro SD card readerNot much to talk about here. The signal names are marked on the board.
Here's the I/O connections from the PicoPad schematic.
Holes are cut for the two (yes, two) USB-C connectors, the micro SD card, a speaker "grille", and the Reset and Boot buttons on the RP2040 Zero. Start with a tiny hand vise and drill bit; a Dremel is too jumpy. Then use mini files to get each opening to the desired size. The round files are good for the USB-C jacks. Go slow, test fit often. It's a pain in the butt.
For stability, I soldered the edge of all connectors to the tin box. Which, being tin, solders well with tin/lead solder.
If this goes to a "production" version, I hope to provide laser-cut boxes to eliminate this most awful step, like the original Minty Pi makers did. Well worth the cost.
Why two USB-C connectors?Couldn't we just have one? Technically, yes. But after looking into combining them and using either just the charger board or RP2040 Zero USB-C connector, I concluded that I'd have to remove a USB-C connector and do some fine micro-micro soldering to the pads underneath. I decided a less than 50% success rate was not good enough. So, for this Prototype (#2), I decided that two USB-C connectors was OK after all.
And all the connectorsBy mounting the RP2040 Zero module upside down, I was able to drill two small holes so a paper clip can be used to access the Reset and Boot buttons.
The USB-C programming port is on the RP2040 Zero. This isn't needed once you program the PicoPad software, so really you could program it before mounting, and leave this connector inside to save cutting one hole. Programming details are on the PicoPad GitHub website.
Note the clean soldering job around the connector.
Here's the fancy speaker grille, and the USB-C port for the charging module.
The tiny hole beside the nicely soldered USB-C port shows the red and green charge indicator LEDs. No light pipes are needed; they show through just fine.
The Micro SD card slot was a challenge to get it to come all the way out, around the curve of the tin. I was only able to get a little bit of solder on it.
Sure. Have fun. Enjoy. I sure did.
Someday....Someday if it's not too expensive (it is), I'll make some boards that you just have to solder a battery and speaker to, solder the LCD to a custom flex cable, print the plastic pieces, and fit into a laser-cut case. Until then.... like I say, have fun.
Comments