I love the Gameboy color. The form-factor is amazing and the nostalgia is intense.
However the original screen leaves a lot to be desired. Colors aren't great and the lack of a backlight makes it impossible to play in a dark room.
I also dislike running the Gameboy on AA batteries. I want a rechargeable battery and a USB-C charger. So lets switch the screen, add a LiPo battery and a USB-C charger.
To be able to monitor the charging status and get a low voltage warning I decided to add an RGB LED which is controlled by an Arduino.
1500mAh LiPo battery, USB-C charger, FTDI interface, Arduino pro micro
Desoldered the USB-C connector using a heat gun
Soldered on wires for power 4 in total as USB-C is reversible. Also added two wires for the USB-FTDI interface for the Arduino.
Removed some components that had to do with the original charge port.
Removed the original power supply. I'll be replacing this with a more modern, more efficient step up converter.
Also removed the old speaker and battery terminals.
The voltage regulator (step up) I'll be replacing the original power supply with.
Size comparison.
Installed.
Since I'll be using an IPS screen the 13.6V and 15V outputs that the original power supply had in addition to the 5V weren't needed anymore, so a single 5V step up was all that was needed.
Testing to see if everything works.
Soldering on the USB-C to the motherboard to get the best possible mechanical connection.
No worrying about the connector ever coming loose.
Removed the original power supply capacitor.
Installed a 100uF tantalum capacitor on the front side instead. This will give me space for the LiPo charger on the other side.
Designed a super simple circuit that controls a ws2812b RGB LED and monitors the LiPo voltage to give a visual warning when the battery starts getting low. It's also connected to the LED outputs from the USB-C charger so that the color of the RGB LED can be changed depending on if the battery is charging or done.
The design uses an Atmega 328P (that I took from the Arduino pro micro) Super quick and dirty design with as few components as possible. No external crystal.
Cutting the PCB on a 50W fiber laser
Pew Pew!
Turned out pretty good. Could have made the design smaller for sure though, the pads didn't need to be that big.
I love having tools
Flashing the much faster Optiboot bootloader on the chip and set the chip to use the internal 8Mhz oscillator.
Pogopins for the win.
Using a heat gun to remove the chip.
Ready for transplant.
Soldered on the new board.
Time to trim the shell to fit the FunnyPlaying V2 IPS display.
Scraping with an Exacto blade leaves a decent finish.
Cutting out the battery compartment.
Time to replace the LED.
I didn't want any light to leak out and illuminate the shell so I used some aluminum tape on the inside of the hole.
I then trimmed it down to the correct length.
I didn't have any thin wire laying around so I stole some enameled wire from an old brushless RC motor.
Soldered up and ready to be installed.
A dab of glue and the LED is securely held in place. It so happens that the LED ends up in the perfect spot if it is up against the LCD sidewall, very convenient.
Time to install the IPS display.
Covered the metal back with kapton tape.
Ribbon cable in place.
One last test before permanently sticking the display in the case.
No going back after the tape is peeled.
Managed to not screw it up
Installed the brightness control in the IR window.
I tested how stable the step up converter was and was a bit disappointed to see these ripples. I installed an inductor of 470uH in series and it was all smooth after that.
Inductor installed in series.
Time to modify the LiPo charger.
I cut this corner off to have it fit better in the case.
That will work.
These cheap LiPo chargers do have what one might consider a design flaw; You really should not charge at the same time as you use the device. An easy fix is to install a dual Schottky barrier rectifier. It's basically two diodes with a common cathode. The one I use is the PMEG3005CT since I had that laying around the house.
The dual diode allows two inputs, in this case, the battery voltage and the 5V from the USB-C connector when it's connected. The dual diode will always "choose" the input with the highest voltage to drive the output. In this case it will always be the 5V USB as it's higher than the fully charged LiPo at 4.2V. This way there is no load on the battery and the charger can properly charge the battery while you continue playing.
Replaced the two audio capacitors with tantalums I had laying around. Also replaced the speaker.
Test fitting the board. I cut off a corner to fit it better.
Uploading some code.
All wired up. I mounted the FTDI adapter on top of the Arduino which worked well.
The FTDI adapter is only powered via the USB 5V so it's not drawing any power while the unit is on battery power.
Need to cut out a slot for the USB-C in the bottom shell.
Turned out pretty ok. Wished the original power adapter hole was a bit lower down so that the hole would have vanished.
Back of the shell mounted. The battery connector routed out through the hole in the middle.
LiPo fits ok, but a narrower, but taller battery would have been ideal.
Closes up nicely though.
USB-C cable connected. Blue light indicates that the battery is charging. The gameboy does not need to be powered up in order for the RGB LED to show the status of the charging. The Arduino is powered from the USB 5V as well as the battery via another dual diode barrier.
Checking the current draw of the finished device.
No game - powered on the LiPo it draws 110mA (Stock brightness).
With an EZ flash JR cartridge, it draws 162mA. Playtime would be around 7 hours if obeying the 80% discharge rule for maximum battery life. (1500mAh*0.8/162mA = 7.4h)
The Arduino with LED draws about 5mA, which is pretty close to the stock LED. I managed this by having the Arduino in deep sleep most of the time where it only draws micro amps instead of milli amps.
Stock GBC with no cartridge powered by the same LiPo - 41mA.
With EZ flash JR cartridge 89mA.
This display is amazing!
Crazy good viewing angle as well as great color and contrast. Worth every penny.
I'm super happy with how this build turned out! So happy that I've decided to make the charger+RGB controller as production PCB's. We will have a video on this coming soon!
However the original screen leaves a lot to be desired. Colors aren't great and the lack of a backlight makes it impossible to play in a dark room.
I also dislike running the Gameboy on AA batteries. I want a rechargeable battery and a USB-C charger. So lets switch the screen, add a LiPo battery and a USB-C charger.
To be able to monitor the charging status and get a low voltage warning I decided to add an RGB LED which is controlled by an Arduino.
1500mAh LiPo battery, USB-C charger, FTDI interface, Arduino pro micro
Desoldered the USB-C connector using a heat gun
Soldered on wires for power 4 in total as USB-C is reversible. Also added two wires for the USB-FTDI interface for the Arduino.
Removed some components that had to do with the original charge port.
Removed the original power supply. I'll be replacing this with a more modern, more efficient step up converter.
Also removed the old speaker and battery terminals.
The voltage regulator (step up) I'll be replacing the original power supply with.
Size comparison.
Installed.
Since I'll be using an IPS screen the 13.6V and 15V outputs that the original power supply had in addition to the 5V weren't needed anymore, so a single 5V step up was all that was needed.
Testing to see if everything works.
Soldering on the USB-C to the motherboard to get the best possible mechanical connection.
No worrying about the connector ever coming loose.
Removed the original power supply capacitor.
Installed a 100uF tantalum capacitor on the front side instead. This will give me space for the LiPo charger on the other side.
Designed a super simple circuit that controls a ws2812b RGB LED and monitors the LiPo voltage to give a visual warning when the battery starts getting low. It's also connected to the LED outputs from the USB-C charger so that the color of the RGB LED can be changed depending on if the battery is charging or done.
The design uses an Atmega 328P (that I took from the Arduino pro micro) Super quick and dirty design with as few components as possible. No external crystal.
Cutting the PCB on a 50W fiber laser
Pew Pew!
Turned out pretty good. Could have made the design smaller for sure though, the pads didn't need to be that big.
I love having tools
Flashing the much faster Optiboot bootloader on the chip and set the chip to use the internal 8Mhz oscillator.
Pogopins for the win.
Using a heat gun to remove the chip.
Ready for transplant.
Soldered on the new board.
Time to trim the shell to fit the FunnyPlaying V2 IPS display.
Scraping with an Exacto blade leaves a decent finish.
Cutting out the battery compartment.
Time to replace the LED.
I didn't want any light to leak out and illuminate the shell so I used some aluminum tape on the inside of the hole.
I then trimmed it down to the correct length.
I didn't have any thin wire laying around so I stole some enameled wire from an old brushless RC motor.
Soldered up and ready to be installed.
A dab of glue and the LED is securely held in place. It so happens that the LED ends up in the perfect spot if it is up against the LCD sidewall, very convenient.
Time to install the IPS display.
Covered the metal back with kapton tape.
Ribbon cable in place.
One last test before permanently sticking the display in the case.
No going back after the tape is peeled.
Managed to not screw it up
Installed the brightness control in the IR window.
I tested how stable the step up converter was and was a bit disappointed to see these ripples. I installed an inductor of 470uH in series and it was all smooth after that.
Inductor installed in series.
Time to modify the LiPo charger.
I cut this corner off to have it fit better in the case.
That will work.
These cheap LiPo chargers do have what one might consider a design flaw; You really should not charge at the same time as you use the device. An easy fix is to install a dual Schottky barrier rectifier. It's basically two diodes with a common cathode. The one I use is the PMEG3005CT since I had that laying around the house.
The dual diode allows two inputs, in this case, the battery voltage and the 5V from the USB-C connector when it's connected. The dual diode will always "choose" the input with the highest voltage to drive the output. In this case it will always be the 5V USB as it's higher than the fully charged LiPo at 4.2V. This way there is no load on the battery and the charger can properly charge the battery while you continue playing.
Replaced the two audio capacitors with tantalums I had laying around. Also replaced the speaker.
Test fitting the board. I cut off a corner to fit it better.
Uploading some code.
All wired up. I mounted the FTDI adapter on top of the Arduino which worked well.
The FTDI adapter is only powered via the USB 5V so it's not drawing any power while the unit is on battery power.
Need to cut out a slot for the USB-C in the bottom shell.
Turned out pretty ok. Wished the original power adapter hole was a bit lower down so that the hole would have vanished.
Back of the shell mounted. The battery connector routed out through the hole in the middle.
LiPo fits ok, but a narrower, but taller battery would have been ideal.
Closes up nicely though.
USB-C cable connected. Blue light indicates that the battery is charging. The gameboy does not need to be powered up in order for the RGB LED to show the status of the charging. The Arduino is powered from the USB 5V as well as the battery via another dual diode barrier.
Checking the current draw of the finished device.
No game - powered on the LiPo it draws 110mA (Stock brightness).
With an EZ flash JR cartridge, it draws 162mA. Playtime would be around 7 hours if obeying the 80% discharge rule for maximum battery life. (1500mAh*0.8/162mA = 7.4h)
The Arduino with LED draws about 5mA, which is pretty close to the stock LED. I managed this by having the Arduino in deep sleep most of the time where it only draws micro amps instead of milli amps.
Stock GBC with no cartridge powered by the same LiPo - 41mA.
With EZ flash JR cartridge 89mA.
This display is amazing!
Crazy good viewing angle as well as great color and contrast. Worth every penny.
I'm super happy with how this build turned out! So happy that I've decided to make the charger+RGB controller as production PCB's. We will have a video on this coming soon!