In Part I of this build, I put together the main parts of the cabinet. In Part II I got the main kit’s electronics installed and tested. In Part III I created a custom rear jack panel.
Next step was to finally install the rear door. The included hinges and latch worked perfectly.
With the rear door in place, it was time to install the Raspberry Pi and put into effect my grand wiring scheme.
The goal has always been a single power supply with a single power switch to get me into a ready to play system. With that in mind I installed a single throw, double pole switch.
The first pole is responsible for powering the monitor and customized USB hub directly. For the monitor I used the cut off the barrel-end of the included power supply. For the USB hub I severed the power leads for the host plug (so that it would never draw power from the Raspberry PI itself) and ran new power lines straight out the side. Simple enough, and both devices power up as soon as I hit the switch.
Now for the Raspberry Pi itself, I need something else. If I run power straight from the switch to the Pi, then killing the power threatens corrupting the Pi’s SD card and killing the machine.
Since it’s a common enough problem, and since I didn’t want to reinvent the wheel, I simply used a Mausberry shutdown circuit. In concert with a small script that runs on the Pi itself, what the shutdown circuit does is uses a pair of GPIO pins on the Pi to monitor when the Pi is running. When the switch is thrown, the circuit tells the script to tell the Pi to perform a clean shutdown. After the shutdown occurs (killing the script), the circuit finally cuts power to the Pi.
So essentially I wire power straight from my jack to the shutdown circuit, and attach the second pole of my switch to the designated spots on the shutdown circuit. (There’s also room for an emergency swtich to reset the Mausberry circuit itself, but I didn’t bother).
Sum total is that when the power switch is turned on, everything is powered on. When the switch is turned off, power is cut immediately to the monitor and USB hub, and a signal is sent to the Pi to shutdown cleanly. About 2-3 seconds later, the Pi shuts down and power is cut to the Pi.
So as long as I don’t physically pull out the jack, I can safely hit the power switch to power off the machine, even in the middle of a game, as long as I wait for a few seconds before pulling the actual plug. The speakers pop when the Pi loses power, so I know I’m safe to unplug.
The last bit of hardware setup was to connect the Pi in to everything. I connected the shutdown circuit and Ethernet jack to the Pi and both the rear USB jacks and the Picade controller to the USB hub (I’ll explain why later). I connected the HDMI from the monitor to the PI and the audio out from the Pi to the Picade board.
Finally, time to start playing with the software!
My first attempt at building an emulator rig with Raspberry Pi used the wonderful RetroPie Project. Since I had already gotten that up and running on another build, (with lots of games working) I decided to take a shortcut and clone that SD card as my starting point for my Picade.
First I tweaked the config.txt to optimize the display for the Mini’s screen (I’ll attach my config at the end of the post). Then I configured the Picade joystick as the new (and only) device. Again, I ended up needing to reprogram the Picade controller, as the default key selections, while great for MAME, actually caused all kinds of problems with RetroArch, which is the framework a lot of my emulators were using. (Again, I’ll add my configs to the end of the post).
The last real configuration (and it still needs some work) was for audio. By default, if you have HDMI connected, the Pi won’t output audio from the 3.5mm jack. I fixed that with the Raspberry Pi sound troubleshooting guide. (Hint, it’s amixer -c 0 cset numid=3 1).
The only audio hiccup I still have is that by default the sound is at max volume at boot. And it is LOUD. Even worse, it seems like potentially something is shorting on the Picade board- such that if the Picade board is wired directly to the Pi, and a loud sound plays, the controls straight up die. The solution I found for the controls was to connect the Picade controller board to the USB hub instead. As for the loud sound, my current workaround is to go in and out of the settings for Emulation Station (the front-end UI for the emulators) after boot. For some reason this resets the audio to regular ranges until I reset or power down.
After figuring that out, the box pretty much runs the way I want it to. I can play NES, SNES, GB, GBC, and GBA without any problems. Master System doesn’t work too well. Genesis works but the emulator (Picodrive) for some reason is locked to 3 button mode only. I haven’t gotten MAME to work yet- none of my roms are the right version it seems.
At this point the project is basically done. I might add a headphones jack, but the joystick itself is super loud anyway. The whole thing fits comfortably on my lap to play, but the front edge is sharp on the wrists so I might grind that down a bit.
Anyway, hope you enjoyed following my build!
My Picade Configs [184k ZIP] Updated 02-JUL-2014
I’ve configured my build to use as much screen real estate as possible without compromising on aspect ratios. The buttons are set up such 1-6 on the top map to playing buttons (Y X L B A R), the front are for Start and Select, and the side buttons are Escape and Control. Holding the right side button while I hit another button performs various emulator commands:
- Left side – exit the emulator and return to the menu
- B (bottom row, first button) – lower volume
- A (bottom row, 2nd button) – raise volume
- R (bottom row, last button) – hits Ctrl+C to forcefully exit any game
- Y (top row, first button) – load state
- X (top row, 2nd button) – save state
- Select – bring up emulator menu
Feel free to change the configs to support your own needs.
Update: See the video: Picade Mini build running RetroPie.
Update: Part V is up.
14 thoughts on “Building the Picade Mini Part IV, let’s finish this up!”
I don’t know where I place the “Picade_controller_arduino_c.ino” in the Raspberry Pi.
Do you have an idea where I can place on the SD card?
The Picade controller code is for reprogramming the controller board to send different keys. You need to install the Arduino IDE and essentially reflash the control board. Full steps can be seen here: https://www.kickstarter.com/projects/pimoroni/picade-the-arcade-cabinet-kit-for-your-raspberry-p/comments?cursor=5515926#comment-5515925
Thanks, I did not follow the Kickstarter conversation.
Hi Jon, first of all a big thanks to you for making the effort to document all this 🙂
I intend to use your configs for the Picade board and Retroarch but I’m having a lot of trouble with Arduino IDE.
I use Win7 and it seems that it won’t recognise the Picade board. When I try to upload the config I get an error with this text.
avrdude: error: buffered memory access not supported. Maybe it isn’t
a butterfly/AVR109 but a AVR910 device?
My question to you is what OS did you use when uploading the sketch from the IDE to the board?
I was on Ubuntu, and had to manually download the latest binaries for the Arduino IDE (at least 1.0.1) in order to select “Arduino Leonardo” as the device. Worked without any issues.
Cheers Jon. I guess you were not running it in a Virtual Machine? I’ll try getting Ubuntu on an old laptop to see if that makes a difference.
It shouldn’t matter – AFAIK the Arduino IDE is pretty self contained, as long as you picked the Leonardo as the type it should have recognized the Picade controller plugged in. When the Picade is plugged in, does it register as a USB keyboard device? (aka, can you hit buttons and see output in say notepad?)
Hey Jon, managed to get uploading the sketch actually working. Once I installed the Arduino IDE Enhanced Release for Windows. I’ve uploaded your configs but having a bit of trouble with some of the buttons. Will get back on it this week.
Good to hear. I found that the easiest way to test the board was just to plug it into my laptop and open up notepad. Then you can see really quick which buttons are sending keys and which aren’t.
FWIW, I’ve updated the config link to the “latest” config I’m using. I had accidentally left “auto save config on exit” on – which meant as I switched between emulators, the button configs would overwrite one another, so the configs were all messed up.
Thanks for the great posts. volume bug is fixed with the new firmware if you are interested 🙂
Interesting, though I’m curious how the firmware on the Picade’s control board could mess up the volume coming out of the Pi itself.