Custom Arduboy - Minor Differences

The Arduboy is ALMOST exactly what I was looking for. How involved would it be to use what you’ve made here to make a homemade version of my own with some minor differences?

  • At least 120x100 screen (black and white, like Arduboy)
  • At least 100KiB ROM
  • At least 8 buttons (i.e. D-pad, start, three action buttons)
  • Support two square waves, a triangle wave, and a noise channel (right now it supports two notes?)

Is this something like “buy slightly different parts and you can put it together,” or “you’d need to create most of it from scratch?”

First of all,


There is no display that are with such resolution. You got128x96 ones, but they are rare.
You also want to look for SPI interface (6-7 pins), and SSD1306(or 1309) as display driver.
Keep in mind that 128x64 is what most people (include me) have.

You need quite some hacking to get it to work. @Mr. Blinky can probably tell you more.

When you get your own Mega32U4 chip, you can add as many buttons as you wish.
Remember that most people only have 6 buttons, though.

That, you will have to look at the Arduino Leonardo data sheet.
If it don’t then it don’t. But it’s probably more capable than what you think it can.

If you know how to solder to solder, the you’d have a head start.
If you don’t, you can also bread-board your Arduboy.

Why not browse the #arduboy:homemade category?

I don’t think any AVR chips have that 100KB of progmem.
I think you’d need to use at least an ARM Cortex chip for that.
(E.g. an ATSAMD chip.)

I could only find one monochrome OLED with a higher resolution than 128x64,
this 128x128 OLED from Pimoroni:

If it doesn’t have to be OLED then there’s this screen which is an LCD-eInk hybrid:

(Supposedly low power, high refresh rate.)

Buttons are easy enough, you just need lots of IO pins.

Unfortunately I have no idea about the sound side of things so I can’t help there.
I’m more of a programmer than a hardware person.

(If you were happy with a colour screen and just dpad, ‘start’ and two action buttons then I know of a console that already fits the bill.)

That’s a nice looking screen.

If going 128x128 a 1.5” SSD1351 would be a nice upgrade.

The monochrome oled linked by @Pharap is I2C

Sure there are:

You wouldn’t have binary compatibility, but either should work (probably with library changes)

Indeed. Pimoroni are one of our better electronics retailers.

SPI wasn’t specified.

Though I’m guessing I2C is going to be too slow?

I stand corrected.
First I’ve heard of either of these.
The ATmega1284P looks good, ~16KB of RAM.

I was under the impression that binary compatibility wasn’t important.

Is it just the pinouts that would break binary compatibility or are those chips lacking particular AVR instructions?

The instruction set is basically the same (maybe even identical), although I think the cycle count for some of the instructions is different (to account for the increased progmem address space). The bigger differences are probably going to come from the peripherals, specifically the timers, and the lack of native USB on the one chip. A custom Arduboy2 lib should hide all the differences (except for the lack of native USB for the few apps that use it).

There is also a thread on these forums (with some source code) for the Smart Response XE that uses a similar ‘enhanced’ AVR chip (ATmega128RFA1).

Of course you can do all that in software if you have enough CPU power.

@CDR_Xavier Thanks for the warm welcome!
@Pharap Thanks for finding that screen. I don’t know how fast I2C is in practice. 30Hz would be OK as far as refresh rate. As far as binary compatibility, it would be nice-to-have, of course, but I would plan to make my own games mainly so it wouldn’t be a big deal if it didn’t exist.
@serisman I think if I actually did do this, I’d want to use the ATmega1284P with a controller chip, that way I could connect it to a controller with USB Type C form factor.
@Dreamer3 I have no idea how sound works on the Arduboy. Is it all in software right now?

My takeaway here is that there is not a binary-compatible microcontroller with at least 128KiB flash memory and USB support, and I would probably have to make library changes to get this sort of thing working. That sounds like it might be beyond the scope of what I have time to do right now.


Well, the speaker is wired to one/two? ADC pins… so with the ADC and hardware timers you can essentially send out 8-bit audio… you just have to mix it (if you have multiple channels/noise/etc) to a single 8-bit channel. Or you can do simpler things like just blinking the pin on/off at a certain frequency (ala, tones) to produce a single tone.

Wait, maybe it’s 10-bit audio… I forget, though that’s harder to mix since you’re on an 8-bit CPU (at least the Arduboy proper is).

It’s using 400Kbit/s “Fast” (haha!) I2C mode.

We’re maxing out at 24fps if the MCU is spending 100% of its time sending the display data.

So while 30FPS is technically possible if you limit the display to 120x100, it would consume 90% of the processor’s time? Too bad. Sounds like I would definitely need to a different display, then.

I found out (with my display tests, and arduboy emulator) that the resolution of the screen sometimes does not really matter
Sometimes it’s simply the size. While the 1.3 inch screen requires very good eye sight persons to view the tinyfont, the 1.54 inch screens are much more clear.

It’s reasonably fast compared to serial and ADB

Firewire 3 is USB-C, rumor had it.

I am looking for big 128x64 ones with SSD1306 via SPI too.


Which one does Arduboy ran on? 4 pin SPI or 3 pin SPI?
My 0.96 display support both SPI, plus IIC.
He didn’t specify the driver, though. :(
I just need to hope it’s SSD 1306.

Is SSD 1309 compatiable with SSD 1306? I thought Mr.Blinky had a few issues with pixels moving to the right…