# atopile # compile code to hardware import RP2040 from "rp2040.ato" import USBC from "usb.ato" import LEDIndicator from "led_indicator.ato" module Blinky: micro = new RP2040 usb = new USBC micro.usb_data ~ usb.data psu = new Buck psu.input ~ usb.power psu.output ~ micro.power_in led = new LEDIndicator led.input ~ micro.gpio_13 led.gnd ~ psu.output.gnd
Describing hardware with code might seem odd at first glance. But once you realize it introduces software
development paradigms and toolchains to hardware design, you'll be hooked, just like we've become.
Code can capture the intelligence you put into your work. Imagine configuring not the resistance values
of a voltage divider, but its ratio and total resistance, all using physcial units and
tolerances. You can do this because someone before you described precisely what this module is and
described the relationships between the values of the components and the function you care about. Now instead
imagine what you can gain from reusing a buck design you can merely configure the target voltage
and ripple of. Now imagine installing a servo
drive the same way you might numpy.
Version controlling your designs using git means you can deeply validate and review changes
a feature at a time, isolated from impacting others' work. It means you can detangle your organisation
and collaborate on an unprecedented scale. We can forgo half-baked "releases" in favor of stamping a
simple git-hash on our prototypes, providing an anchor off which to associate test data and expectations.
Implementing CI to test our work ensures both high-quality and compliance, all
summarised in a green check mark, emboldening teams to target excellence.
Get in touch with Matt, Tim and Narayan: