Albert Gonzalez homepage

Hello! I’m Albert Gonzalez, a computer engineer from Barcelona. I drink coffee and code both for fun and for a living, and here are some of the things I make, try, research and tinker with; mostly microcontrollers, electronics and miscellaneous coding projects.

I finished my Computer Science degree at UPC - FIB (Polytechnic University of Catalonia - Barcelona School of Informatics) in 2014, and I’m currently working at The Hotels Network as a software developer focused on research and development (a fancy way to say I fix things here and there while prototyping new and experimental ideas, most of them web-based).

I'm fluent in catalan, spanish and, at some level, english (not a native speaker). Also I know a couple klingon expressions (that's not language-related at all but I'm a Star Trek nerd).

If you want to contact me, feel free to send me an email here! My Github repository also contains most of my stuff, so take a look if you want!

Other places when you can reach me or take a look at my work:

Last update (2023/03/16): Added clickhouse cityhash php extension info + source code link (a PHP extension that implements the custom Cityhash algorithm found on the Clickhouse DBMS).

Stuff I do

I usually do stuff. You can find here what I’m doing now (or what I did in the past) and where. There's no particular order, but usually the newest projects and/or updates are the first on the list. Some other minor projects may be found on my page.

Analog Phone Dialer (atmega48p-based)

Got and old analog phone (non-compatible with more "modern" phone lines) and made an atmega48p-based board to capture the input numbers from the rotary dial and translate them into "modern" DTMF pulses using a DAC converter made with a R-2R resistor ladder.

Led Scroller Matrix (charlieplexing approach, atmega48p-based)

A charliplexing-driven 47x8 led matrix made with an atmega48p. With only a few resistors and ~400 leds it's a pretty decent scroller board to display messages or act as a pixel-driven screen (but also a little bit tedious to solder by hand!).

Can also be controlled via I2C and includes native scrolling text capabilites on the firmware.

There's more info about how it works in the github readme file.

I2C libraries for attiny85-like AVR micros

A pair of I2C libraries for AVR micros with USI two-wire mode capabilities (developed and tested on attiny85's, but portable - in theory! - to similar devices with the proper pin changes) + a bunch of examples both with primary and secondary devices.

The goal here is to use them as the main entry point when dealing with I2C in future projects (and improve them over time, of course!), so there's also a fully functional micro-example of a primary device reading from a secondary device and writing into a third secondary one.

There's more info about how the libraries work in the github readme file.

Custom 3d printed sign with addressable leds

I have a friend with a youtube channel that asked me to build him a custom glowing sign with his nickname on it (it's now on the background of his videos).

It seemed an interesting project (also I didn't worked with addressable leds until now) so following his instructions and some 3d printing, some wiring and some firmware-writting later I ended up with my first led sign!

(S)NES Mini Controller USB Adapter with an attiny85

An adapter to interface a (S)NES Mini Controller (an I2C device) with a PC as a generic USB Gamepad; based on an attiny85. The microcontroller uses the V-USB library to create a low-speed usb device and implements some homemade code in order to process the I2C signals from the controller.

I also tried to emulate an XInput controller (like the one in the XBox 360) with V-USB and wrote about that process here (it's not fully functional but I learned a few things about it while trying).

All of this started by trying to connect those controllers to a regular Arduino. I wrote about this here, with some examples, snippets and additional links.

I made some PCBs for the adapter! Check the post on the project page!

Game of Life on an attiny85

Conway's Game of Life running on an attiny85 with an SSD1306 driven OLED display.

The fun part was to manage the display (a 128x64 one) in a dynamic way by using the small amount of SRAM available. I ended up writting a custom SSD1306 driver for the micro, so it allows the user to create (and modify) a 32x16 grid that can be stored in the internal SRAM and then translated into "big pixels" in the real 128x64 OLED screen.

More info about this process on the project page.

Game Boy Raw Snake My first Game Boy mini game: a snake port written in assembly using RGBDS. There's an extended post on the github page with some techical information about what I did, how and why; aditional links for extra info and the rom.
The Weather

Made as a small weekend project with an ESP8266 Thing Dev Board from Sparkfun, The Weather is a box with a big red button that prompts The Weather (but not The Weather From A Specific Location).

Using the OpenWeather API and a custom homemade script, each time the user hits the button the weather information from a random place is displayed in a small OLED screen. Initially developed as a stupid Slack command for my offtopic chats, the next logical step was to prototype it into a small box (designed and 3d printed by myself) connected to the Internet.

Extended info available on the project page (also in the github repo).

The Alarm Clock with a complete deactivation sequence based on probably too many movies

I built a digital alarm clock based on those two-key activation sequences that we can see often in movies (and in real life too, sometimes). So, in order to turn off the alarm you need to perform one of those actions and also input a code using a keypad. It's an Arduino-based clock with a custom 3D-printed enclosure that uses a bunch of elements, from key-switches to a Real Time Clock module.

I wrote a post about how I made it here.

Misc code stuff


I like to poke around with things like the Pico-8 "fantasy console" (a virtual system created to develop games with a high retro style based both on the visual and the tech specs. On this system you write stuff in some Lua-variant implemented by the creator) or use tools like Game Maker (a 2D videogame-making tool). Here are some of my projects:

Last update: 2023/03/16