I started on front end work early in my career (mid nineties), moved to full stack and now write C full time for embedded (STM32) and Linux (RPI & Nvidia). I've essentially been digging deeper and can't seem to put the shovel down.
I don't think I would have appreciated it at different times in my career, but for me, right now, I'm loving every minute of it.
The biggest issue I've faced (beyond the obvious issues of getting anything to work at all), is how to organize the concepts.
The "Data-Oriented Design" folks have had a huge impact on that. Specifically, talks from Andrew Kelley, Mike Acton and the book by R. Fabian.
The second thing is registers. Just toss the HAL mess, pick up the Reference Manual and start poking registers. It's so much more enjoyable (and reliable) for firmware work.
I don't know about job opportunities as I'm running my own hardware business, but if you're feeling pulled in this direction, I highly recommend taking a closer look.
When I look at the two codes side-by-side with normal (full) brightness, the HDR one looks quite a bit brighter. If I dim my screen brightness substantially, the HDR one also gets a lot dimmer. Not sure if this solves that problem, though it could be an issue with my particular screen?
I like that the article is making me think about my beliefs in the long tail and how they may be in tension with my beliefs in the pareto principle.
The core long tail claim, as I remember it, was that the _area_ under the long tail was larger than the _area_ under the head.
Sometimes much larger.
I vaguely recall a claim that many businesses chopped off the market tail because it was often too expensive to serve those tiny segments (inventory, retail space, distribution, etc.), but that new technologies were reducing or eliminating some of these costs and making it possible to serve emerging, smaller markets profitably.
I wonder if some portion of businesses that see pareto distributions in their sales are just lopping off long tail revenues? I thought that was the central claim.
I also wonder if those pareto variants (i.e., 95/5 splits) were businesses that had potentially over optimized on their largest volume offerings?
Amazon was the quintessential long tail example, and I'd be surprised if anyone could claim that their their SKU count has decreased since 2006.
YouTube comes to mind as another great example of a business capitalizing on this phenomenon.
Consolidating markets (like ??) may be counter examples.
Now I'm curious about how to choose when to push in which direction.
For folks who are considering Kicad, but not sure if it will be useful at a professional level...
We professionally design, engineer and manufacture accessible technology for disabled veterans and we are also developing robotic systems for industrial automation.
We have a half-dozen active projects running on Kicad and have been using it for almost 4 years now.
As with anything, there have been occasional frustrations with updates but overall, the tool consistently gets better over time.
The main decision to select Kicad was based on the plain text representation of project state which enables (1) improved workflows with Git, (2) scriptable bulk edits (3) simpler, sharable extensions / plugins and (4) easier continuous integration for build artifacts.
I learned PCB design on Eagle, switched to Kicad about 5 years ago, and in the last three years have really been doing a LOT of PCB design with Kicad. I love it so much!
Here's a dense four layer brushless motor control board I designed recently, which can be viewed online in the amazing Kicanvas viewer:
This is me too. My first projects were in Eagle, primarily because it was the de facto standard for EDA for hobbyists for a while. KiCAD used to be awful and very challenging.
In the last several years, it’s really improved and I enjoy using it. If you haven’t picked it up in a while, give it a shot.
wow, kicanvas looks great for sharing designs, is the idea that you use github for versioning your kicad folder (probably better than my current lazy dropbox option) and then you can just share the designs with people?
that is a cool website.
can you share designs privately with team members? it looks great for collaborating if it's got authentication.
These are great questions! I wonder how it works if you have a file which is private on GitHub but you’re logged in to GitHub and you’re able to view the file in your browser. Maybe kicanvas is sufficiently local to your machine that this would work.
Either way I know it is under active development so you could file a GitHub issue and ask about that! Link to the GitHub for it on the main page here:
Agreed, although I'd say KiCad was pretty rough 4 years ago but it got good in 2021 with version 6. It used to be good enough for a saint, but now it's good enough for a whiny picky person such as myself.
I saw the writing on the wall for EagleCAD once they stopped releasing any kind of bug fixes despite charging subscription fees and started ignoring the forums other than triaging the complaints. It was clear they were going to do this and break EagleCAD to force people to use Fusion 360.
I don't use Windows, I don't want to, I've used Fusion 360 and it was slow as heck, didn't have constraint based solving that worked, was written in some awful system that made it require an internet connection, and they want me to use an EagleCAD-themed editor that they've hacked in?
I switched to using KiCAD for all new projects a year ago. It was a little bit of a learning curve. I started with designing a flexible heater PCB, which was good for a learning project because it had so few components. Now I'm making PCBs with four layers, inner ground and power planes, custom design rules, using fancy add-ons, taking full advantage of the HTML BOM plugin when teaching grad students how to solder, and I can be 100% sure that even if it gets worse I can still get the old version to work (probably).
Even the part library is more coherent and higher quality (!) than the EagleCAD one. I literally refused to use the built in EagleCAD libraries because the quality was so variable, sometimes it's fine, sometimes I ruin an entire PCB because their version of SO-8 had a weird width. KiCAD is way better, it's closer to OrCAD and lets me make the schematic, assign the footprints, and if I don't like a footprint I can just edit it on the fly for that document or to just save a new version of the footprint forever.
I've even got it set up to use Dropbox to share designs between computers (no issues) and that includes downloading STP 3D models and adding them to my footprints.
I know it's going to take me a while longer to be nearly as adept as I was at EagleCAD, and I'm going to miss that autorouter (the KiCAD one is very good for what it is, but it's a hard problem). There's a lot of keyboard shortcuts that you internalize after 20 years of using a program.
But it will be worth it, and frankly already is worth it. I've had to make like four custom footprints because the default library is just so well organized that I can actually find the one or maybe two versions of WSON-10 or whatever instead of having to guess which library has the version that matches my mechanical drawing.
How do you go about doing the mechanical drawing for a footprint not found in the library? I tried to design a simple SD card board as a learning project. I gave up when the part that I selected was difficult to draw. I was not sure whether I was missing some information or is it my inexperience. My persistence on learning and eventual failure left me with the bad taste.
PS: The part I selected seemed to be a generic brand and did not get any info to clarify the dimensions.
There is a footprint wizard, like EagleCAD had. That's usually where to start if it's at all possible.
I personally don't think I'm good enough at KiCAD to draw one from scratch. I could probably make it okay, but it wouldn't be professional quality. Life goal is to be able to meaningfully contribute to the project library globally, they have high standards.
I managed to draw a USB port that was probably the trickiest one I had to do. It was really the same as eagle, I had to place pads, give them proper numbers, define through holes (it let me do slots, even with an offset which was way better than Eagle), and then it just let me connect it to a USB-C symbol in my schematic no questions asked.
But making a custom symbol was also the same as Eagle. Same process, label pins, define directions, place labels...
The only difference maybe is that footprints and symbols aren't forcibly associated, and connections are done via the pin/pad numbers.
With a datasheet of that low of quality you're better off measuring by hand though, I don't know a way around that one.
The biggest problem for me in doing custom symbols is the measurements and the subsequent drawing. My life goal is as yours, manage to create a custom symbol and also build my own custom dev board. Unfortunately many things got in the way and the work kept delaying for almost 9-10 years now.
The reason I picked a particular SD card was because it was low cost. My country has crazy import fees and because of this I am forced to select low cost parts which usually have bad datasheet and documentation.
KiCad continues to improve, and that plain text file thing is a killer feature. Also in the new version they added the capability to have library databases for components which is a massive step towards professional libraries.
If they could bring in better signal integrity tools and Altiums outjobs, it would be a no brainer to use KiCad for hobbyist to small business applications.
KiCad is sorely lacking facilities for analyzing trace impedance and power plane capacity - very simple features and all of the building parts (mainly the board stackup information) are already there.
I've wanted to add this stuff (and hopefully push upstream), but haven't been able to find the time.
These are basically table stakes in every commercial offering.
Yes but these are not showstoppers. You can do a lot with scripting in Python (and e.g. Shapely for geometrical processing) and you can even find other user's scripts online. Of course, it would be nice if e.g. computing the length of a trace was as simple as a mouse click (perhaps it is in the newest version), but this is certainly no reason for many to switch to a closed, expensive, commercial tool.
We switched from Altium to kicad and it was a good decision. However, we weren’t really successful to port projects from Altium to kicad. So, we still need a Altiun license. I am sure there are features in Altium that kicad is missing, but for our application - power electronics- we haven’t missed anything so far.
Did you use Altium BOM tools? I found them to be incredible, does KiCAD have something similar to handle BOM generation via something like octopart?
I miss that, it made my BOMs so much more trustworthy.
We did not use BOM generator via octopart in Altium. What we do now: We have our own kicad library which is mostly derived from the official kicad libary + some custom parts etc. We have all the information added to this library including Manfucaturer, MPN, datasheets etc. and from there we generate our BOM. There might be a more efficient way to do it, but we did something similar in Altium. So maybe we could have done better there too.
That seems reasonable. I found the digikey list bom export tool the other day and it looked awfully close but it was using the value for the part number because that's where I usually put them (with real values for passives). So it did pretty well for my special ICs but then had a bunch of like "10k" part names.
But okay, I have ten different resistor values but they're all the same symbol and package. Is there a field you know of where I could put a list of validated part number options for a given refdes? It sounds tedious but if it were connected with a search engine it would be no worse than altium.
Every year or so, someone shows off a feature of Altium that makes me want to take a closer look, but it's hard for me to let of those text file formats.
How's Kicad's autoroute these days? For anyone who says "no Pro uses autoroute" I can say electronics is a hobby for me and when I'm designing a PCB I like to autoroute first, see all the issues, then go back, move my components, autoroute again, once I arrive at optimal placement I do maybe 10% of traces manually (these are the ones autorouter does weird stuff with) then I let autoroute deal with remaining 90% of repetitive stuff. Finally I just tweak few things here and there. I think I tried kicad few years ago and I was back to altium very quickly. For typical hobby use one can't really afford altium so kicad is the only way to go, but if you can have it I'd choose altium every time.
[1] There are options, but honestly I never seen the point for small boards. There just seem to be rarely the case where setup and fiddling with settings is all that faster than just routing few dozen traces.
I guess if I wanted to route something like big keyboard with a bunch of leds, but overall routing PCB is just such small overall part of the project that I just play some podcast in the background and play the PCB puzzle/sudoku challenge.
But then I like going back and forth and even changing schematic a bit to make routing nicer.
Ah, that java plugin.... I might give it a go this time. Last time I saw the word java and I decided against it.I believe I did test this plugin years ago when it came out first, back then it really was quite useless. As you said, it required fiddling with a ton of settings that meant just doing the damn thing by hand was quicker.
I would love to be able to do pcb design on my main Linux desktop rather than having to fish an old windows 7 work laptop with a copy of altium.
However, let me tell you my altium work flow with autoroute and small boards. Recently For example I was designing a Qfn44(7*7mm) to dip 44 adapter board. As simple as it gets really.
After drawing my rectangle board setting the only chip in the middle and two rows of pins.I just let the autoroute do it's job on default settings(it already has my minimum trace distance and thickness set) , I rip it all down, tweak few settings(trace neckdowns near pads), run it again. Repeat once more and the board is done all in under 5 minutes.
There is now basic autoroute capability that works on a selection of traces. There is still no whole-board autoroute, and although in theory you could just select all items in the board and hit autoroute, it is not functionally designed to work this way.
No, but as a former altium user who was burned by altium, if you aren't working on a team with multiple users, it is well worth the pain to get rid of altium. There are some muscle memory things you might have frustrations with the first few weeks, but it has been smooth sailing after the transition period.
My only complaint with KiCad is their library/BOM management is a bit clunky, but the fact you can automate things so much easier vs altium more than makes up for it.
I've at this point needed to convert projects between Eagle, KiCAD, OrCAD, and a few others.
I've seen Altium do decent at open EagleCAD. I've seen KiCAD do much better at opening EagleCAD. I assume KiCAD and EagleCAD work decently well with one another's file formats due to both being text based and documented.
That said, no matter how much someone paid for the software being converted from or to, I've yet to see a project that wasn't better served by starting from scratch and reproducing the design. Each tool just has a somewhat different paradigm (or default grid spacing or whatever) and like... EagleCAD symbols imported into Altium work they just suck. For example.
I've been dealing with this mess for a while. My colleague has decades worth of PCB designs trapped in OrCAD pre-cadence. I've been pushing him to EagleCAD, and have been pushing myself towards KiCAD for over a year. Now I'm telling him "hey, it's closer to orcad" and "the HTML BOM will make your life way easier training grad students" and "the package library is way more reliable" and these are legitimate honest-to-god features that are convincing to an experienced designer.
You see enough proprietary tools like this get the death knell and you learn to recognize the signs I guess. This one was pretty obvious and thankfully y'all have three years to download KiCAD ASAP, use it for every single project from here on out, gradually transition legacy documents in every CAD system to KiCAD. For once in my life I'll have some well-grounded confidence that my designs are safe and highly likely to still be usable in ten years when I badly need to debug them and create a new board revision.
Honestly, we had a bit trouble converting Altium projects to KiCad and kind of gave up on it. Probably also depends on complexity of the board and maybe we just need to invest more time into it. But for now we have to maintain a Altium license for older boards. All the new stuff we build in KiCad.
Yeah, I see no reason to use Eagle over KiCAD, and KiCAD is rapidly catching up on a pretty stagnant Altium, so for many users KiCAD is better choice there, even with money no object.
for me, it is a bit funny. i started using kicad because phil hagelberg created his keyboard using scheme to generate a kicad_pcb file. then one night, i am too tired to type on keyboard, i decided to put the components directly on kicad using mouse. now when i need (or want) to create a pcb, i just open kicad.
You have a schema capture tool (eeschema) and a board design (pcbnew). Start a new project, then start doing your circuit design in eeschema. I personally always disable move on zoom and install the solarized dark plugin, since it looks quite nice.
- Click and hold Middle mouse to move around the schematic / board view.
- P - places a power symbol (gnd / v+)
- A - add component
- E - edits parameters
- X - rotates on x axis
- Y - rotates on y axis
- M - move stuff
There are a ton of symbols installed by default, I recommend just browsing to see what kind of organization there is.
The "contextual electronics" tutorials on youtube are good to begin with. They are with older versions but most of the technique is unchanged for the most part.
Basics are still there.
There are some good books out there too such as "Kicad like a pro" which come recommended by people I trust.
#kicad @liberachat IRC is still active too as well as other channels.
The official guide [0] is good, but a bit too detailed.
I started out with ruiqimao's mechanical keyboard PCB guide [1], which I think is good enough to get my feet wet. From then on it's just messing around and checking the doc along the way.
Find some existing project similar to yours that has a PCB and a circuit diagram. I tend to recommend that synth DIY folks look at something like yusynth.net, and Yves Usson's designs. It doesn't have to be done in Kicad and indeed it might be better if it's not.
Redraw the circuit in Kicad, then redraw the PCB. See how close you can get to the original.
That way you're climbing the "learn how to use Kicad" learning curve, without having to climb the "learn how to lay out a PCB and circuit diagram" learning curve :-)
My workflow (I'm a hobbyist, take what I say with a grain of salt):
- Installed "library loader" which Supports kicad
- Sign up for componentsearchengine.com
- Find parts I need on mouser.com/mouser.de (I'm in Germany) and look them up on component search engine, download the cad files; library loader picks them up automatically
- Use them in the schematic view, get your schematic finished FIRST
- Then "Update PCB from schematic". This imports all of the individual footprints and stuff you need to wire together.
- From here, should be like most other CADs; wire up your rats nest, do your ground fills ("Fill area" tool on the right), etc.
- Export Gerbers and drills after googling "jlcpcb export kicad 6" (they don't have a 7 guide yet but doesn't matter) just to double check the settings, then upload to jlc and they arrive about a week and a half later.
- In the schematic view, go to tools and then Generate BOM. It takes some finagling but you can usually massage the CSV it generates to upload to Mouser's shopping cart page to get an exact amount of parts you need, including the ability to specify multiples. Note that usually upping the amount of small components results in more for less overall cost (yes, really) so play with the quantities. Resistors can be purchased for a few bucks at the 500 to 1000 quantity, and are usually cheaper to do that than to order 5 or 10. Anyway, then you order your parts.
The "use footprints from other people" thing is contentious, I know. Most serious engineers make their own footprints. I don't have the time, personally, since unless I'm missing something it requires freecad for me to get the measurements right, and kicad doesn't have the required constraint solving tools to allow me to make sure I've got all of it right, so the workflow is CRAZY inefficient (lots of importing drawings from freecad, manually creating pads, then using multi-select and align tools to get them where they need to be...).
Kicad with a constraint solver like freecad's would be a ridiculously huge improvement IMO, but hopefully this is enough to get someone tinkering. Kicad devs if you're reading... pleeeeease. I know it's a lot of work.
Many of the ones you can find took no effort and are untested. A shitty script tried extracting information from a PDF datasheet or converting file formats for the purpose of driving internet traffic to an ad-riddled website.
Many are low-effort and untested. They were manually created by people who don't give a shit because they're not the ones using them.
Some are wrong. It's easy to get mixed up and number them wrong, usually upside down. Even when the issues are known, they rarely get fixed in published models and libraries.
Sometimes you need an engineered design. Pads can be designed for manufacturing, thermal, electrical, and mechanical considerations. Hardly any published pads were made by people who know how to do those things in the first place. Either way, they're not designing for your specific board.
In summary, it would be insane to spend money manufacturing random garbage from the internet, and a "good" pad may not be the right good pad for that board.
If you never made a PCB you probably want a tutorial just to get the basics right and not learn them once you already made mistakes and send it to manufacturing.
Experience is what you get when you don’t get what you want. Expect to make mistakes on your first custom boards, even if you watch every tutorial. Be forgiving of yourself; it’s a learning process.
Building user experiences is inherently some of the most difficult software engineering there is.
It's not difficult because the existing tools are poorly made (though most of them are), it's difficult because the core problem is extremely complex (in the Rich Hickey [1] sense of the word, e.g., braided, intertwined, complected, etc.).
In order to build a user experience, we start with some information that can often (though certainly not always) appear both simple and easy (i.e., unbraided and comprehensible). But then we must create a projection of that information onto a 2D (or 3D) plane and manage it's changing state over time.
This is where everything falls apart. We're usually trying to manage a very wide, very deep, loosely defined tree of state and we're trying to reflect an arbitrary number of user interactions and mutations instantly, and over time.
Exactly zero of our tools (programming languages, UI toolkits, Operating Systems, etc.) have strong support for managing change-over-time in a way that makes this type of problem fast, stable or enjoyable to present, use, verify or mutate.
I love that the OP showed the triangle of Performance, Adaptability and Velocity. I've been framing a similar concept with teams since 2011 which I refer to as, "Fast, Stable and Delightful."
It's my thesis that we need to balance these three requirements in both our activities and in the output that we produce. This balance is incredibly difficult to achieve and harder still to maintain.
Different organizations tend to focus internal power in one of these 3 nodes (e.g., Google on Stable, Facebook on Moving Fast, and Apple on Delight). Note that the desire to move "Fast," or even to be "Stable" rarely achieves the desired result.
The only organization I've seen manage these values effectively is Apple and I believe this is because people there have understood for decades that speed and stability are prerequisites for delight, but that neither speed, nor stability (alone or together) are sufficient to make something that gives humans the sense that someone, somewhere actually cares about how they feel.
I love how the OP is exploring this problem space and how they are digging into the existing solutions and trying to define the problem with some rigor. This is fertile ground for exploring new ideas and new approaches. Please do not discourage this activity!
I've thankfully not had a bad experience with Mouser, they're generally just fine for us. I do spend a bit more than OP though, so maybe we're in a different service bracket.
I used to prefer Mouser because I thought their site was slightly easier on the eyes, and I felt they were basically interchangeable with Digikey.
A few years ago, I needed about 60 of a very specific, shouldered washer that only Digikey had. It was Friday afternoon and I needed it in Boston ASAP.
I called their support for the first time, with low expectations.
Within a couple hours, they were prepared to put a man from their warehouse on a plane to personally fly these parts to the nearest airport. It wound up being too expensive for the project, but their facility leadership burned multiple hours trying to help solve this problem for me, and I was a very small customer at the time.
After that experience, Digikey gets the lion's share of my orders, which have grown considerably over the years, and they continue to have incredible support, every single time.
They are our first place supplier and we only use alternatives if there is a stock issue, or the price difference is massive.
I've had other vendors try to tell me that Digikey charges too much. But when I get those same vendors to price our BOMs, Digikey is less expensive, has more stock and is far more efficient (e.g., I don't have to call and wait days to place an order and I don't have to order a lifetime supply of everything).
I heard the CEO on a podcast (Adafruit or Pick Place Podcast?) maybe last year sometime, and he
came off as a genuine, nice human being.
Unless they somehow flip 180 degrees, Digikey has earned my business.
The first fully functional Unit Test framework for ActionScript. It was great fun and helped get my career off the ground.
[0] https://asunit.org