Pokemon Mini Arduboy (and other experiments)

how do I edit the library to an sdd1306 i2c?

I think that’s a better question for @Mr.Blinky since he has experience in adding new screens, I don’t.

It’s a safe bet that it involves changing the functions that interact with the screen though.

I haven’t tinkered around with I2C as it is too slow in general. On Arduboy’s atmega32u4 MCU It’s 20 times slower then SPI (SPI clock 8MHz, I2C clock 400KHz).Translating this to framerates and MCU power, using SPI it takes rougly 1.2 milliseconds to draw the Arduboy screen and consumes 7.2% MCU power at 60 fps. with 7.2% MCU power, I2C can only draw 3 frames a second. The best framerate you can squeeze out of I2C is 30 fps but then it sucks up 72% of the MCUs power.

but if you want to try I2C with the Arduboy2 lib. You’d have to change the boot and paintScreen functions. First you would need to setup the hardware (SDA and SDL for I2C mode) in bootPins, change bootSPI to use I2C, then send the initialization commands to the display with bootOLED and finally adapt the paintScreen to send the 1K displaybuffer over I2C.


The reason I have an i2c is because it was supposed to have spi and the other one but it was a 4 pin not a 5 or 7 so I thought I might as well use it. Also can you send me a pm on how to because I don’t under stand. Ps can it work for 4 pin i2c and 7pin spi? At the same time?

There’s a few 328p projects including Tiny ThatBlockgameWeCantSay that use I2C on YouTube you check the source code in the descriptions if your looking for some reference material.

1 Like

This video seems to be a nice simple demo of speed difference without going into the technical side of things too much:

(Note: make sure you have captions turned on.)

For a technical explanation, this one seems reasonable.

1 Like

ThatBlockGameWeCan’tSay?? :thinking:

We can say it, we just can’t make one. Tetris.

Oh I thought you were talking about Tinyduino (because they assemble like blocks :joy:) I do love tinyduino though… :thinking:

1 Like

Other then showing that I2C is slower then SPI it is not giving an good impression the speed difference. You may get the idea that SPI is rougly just twice as fast.but it can be much faster.

I can’t give you an exact how to as I would have to figure it out on the go. Technically you could use I2C and SPI at the same time. but it would consume more program space and waste a lot of MCU time you’re already short on.

I won’t bother you with techy details but I think Mystic Balloon could run with an SSD1306/9 over I2C at 25 fps

Here’s a techy timing table for different displays:

SPI 128x64 1-bit ~1,2 msec 7,2% MCU load at 60fps
SPI 128x64 4-bit ~4,8 msec 28,8% MCU load at 60 fps
SPI 96x96 4-bit ~5,2 msec 31,2% MCU load at 60fps
SPI 128x96 4-bit ~7 msec 42% MCU load at 60fps

I2C 128x64 1-bit ~23 msec 72% MCU load at 30fps

1-bit stands for 1-bit display like Arduboy uses SSD1306 and other displays using SSD1309 and SH1109
4-bit stands for displays with 4-bit grayscale of which only 2 colors are used SSD1327/29
the time in msec (milli seconds) stands for the time that it takes to send the display buffer to the display
MCU load stands for the percentage of time the MCU is busy sending data to the display.

I created this table to see weather it would be feasable making an Arduboy clone using a different resolution display and if I should get that 128 x 96 display with 4-bit grayscales :slight_smile:


@Pharap I grabbed the 1.54" display :slight_smile: there’s still plenty in stock

I also grabbed that 128x96 grayscale display. The 4:3 aspect ratio will give a nice retro-ish look :slight_smile:
I’ve tweaked Mystic Balloon a bit more to support both 96x96 and 128x96. The latter will have a lower framerate though.
96x96 runs 60fps most of the time :slight_smile: It looks pretty cool running on 96x96 now.



  • No Pip Boys
  • Yes Pip Boys

0 voters


@Mr.Blinky Thank you for adding the other Display options. 1.3” SPI SSD1306 becoming a pain to find with the way sellers are listing them some even use them as the image for totally different model I2C displays. The SSD1309 models seem pretty nice and easy to find with the added bonus of some additional size.
I’m just not sure what size I want I’m torn between the 1.54” and the 2.42” displays.

I also want to look at ditching the screen and consolize the arduboy using TVout where I can use a bunch of inexpensive Pro Micro clones as game carts or a Pi for mirroring and flashing games.

1 Like

@Mr.Blinky Did you ever get your DIY Pokemon Mini Arduboy finished and if so are you able to post some photos?

I’ve not finished it yet. It’s waiting for me to finish adding flash memory support to my custom bootloader :joy:


Cool I cant wait to see it done. :D

To continue with the other experiments bit. My 128 x 128 SSD1327 based OLED display came today. It came in a nice little retail package with jumper wires. Had a quick hack at it:

Running at 128x96 above. It’s not possible to use the full128x128 resolution (atm) as it requires a 2K display buffer leaving little for the program to use.


Nice! You could always use a 64x64 buffer and scale up while rendering, or a text / tile mode buffer? I was able to get 160x144 out of the 32u4 with those tricks:

I didn’t think of upscaling 64x64.But have ideas for a 2-bit tile mode. But that’s more in the homemade then Arduboy direction. More Arduboy-ish would be 128x64/96 portrait for certain smups :smile:

Arduboy fits so good in the pokemon mini! I wonder if someone made an assembled PCB so all you had to do was drop in the completed circuit board to a empty case.