A venture in retrotronics
Open for assignments in digital engineering, PCB design, and embedded C programming.
Digital engineering & design
Adrian has a M.Sc. degree in Computer Engineering from Delft University of Technology, where he specialized in Computer Architecture and Digital Technique. He was trained as a CPU designer in the tradition of Hennessy & Patterson, i.e. involving heavily pipelined RISC processors. As part of his thesis project he developed an open notation for testing semiconductor memories, resulting in three international papers. Nowadays Adrian is working on embedded projects most often based on the Atmel AVR8 architecture (the real thing that is, not Arduino).
PCB design & layout
Experience has taught me that breadboarding is a cumbersome way to implement anything beyond a small setup for proof of concept; the wiring quickly becomes an unfathomable and unreliable mess. Despite the lead time for prototype boards – typically two weeks – in most cases, designing a PCB appears to be the most effective. Especially when it's not about the hardware itself – for example, when developing embedded driver software – I create a modular set of development boards instead. That allows me to focus on developing the software rather than fighting possible hardware issues. Later on, when all is working well, the individual development boards can be incorporated into a single PCB. Manufacturers for prototypes and small batches are plenty available, and prices are very affordable.
Although I initially used Eagle for my PCB designs, I quickly migrated to KiCad after CadSoft was acquired by Autodesk. Getting productive with this open-source toolchain took only a few days. KiCad turned out to be a powerful and well though out EDA suite. It's a great tool to create fairly complex PCBs, and its 3D viewer and export function allow your designs to be easily incorporated into a CAD workflow.
Embedded software development
The art of developing embedded software lies in working within tight constraints, and putting the available hardware engines to work. Limited space, time and (processing) power force you to find a balance between compact, smart code on the one hand, and the readability, maintainability and orthogonal design of your software on the other. Exploiting dedicated hardware provided by the designers is the best way to guarantee efficiency, conformity and correctness.
For example, it may be tempting initially to deploy a readily available I2C bit banging library or to repetitively poll hardware registers in an event loop, but in the end you probably will need to implement that fully interrupt-driven library after all. Since that requires a thorough understanding of the bus protocol and working your way through dozens of pages of documentation, going for the cheapest Chinese chip designs with their crappy documentation, odd design shortcuts and unpredictable lifetimes is simply bad economics. Being trained as a digital designer myself, I have more appreciation than most for the features that chip designers have made available in their hardware, and produce code that puts the underlying hardware to use.
Design & art
Creating these projects involves designing and having manufactured aluminium components, 3D-printed objects, and laser-cut acrylic glass and aluminium. Although some of these techniques are also used in the makers movement, in this case a far more robust, industrial approach is used.