TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Learning hardware programming as a software engineer

324 pointsby diffuse_lover 5 years ago

18 comments

jacquesmover 5 years ago
That&#x27;s a good article for the simple reason that it is written by someone who still had enough &#x27;outsider perspective&#x27; that it can help guide other people new to the material in ways that old hands never could. It is impossible for me to tell a person new to this material what the pitfalls will be because most of what they will be struggling with is obvious to me and it would never even occur to me to explain it.<p>The site is a bit slow to load but if you are new to working with Arduino&#x27;s and other small boards like that and want to play around with them it is worth the wait.<p>Title nit-pick: I&#x27;d have used &#x27;low level programming&#x27; rather than &#x27;hardware programming&#x27;, programming hardware has a different meaning.
评论 #21880352 未加载
评论 #21879445 未加载
mlazosover 5 years ago
I actually thought this was about learning verilog or another hdl. I was a little disappointed, maybe I should write a blog about my experience learning an hdl as a software engineer.<p>Nonetheless them learning embedded systems programming is still an interesting read! Especially when coming from a language like C#
评论 #21879673 未加载
评论 #21879517 未加载
webmobdevover 5 years ago
Yes, it is a different experience because with software programming we are letting system programs like the OS handle the hardware and we don&#x27;t manipulate it directly. And computer hardware is standardised.<p>Where as when doing hardware programming, you have to necessarily understand the individual hardware to program and control it - there is often no abstract software lawyer in between to make this task easier for us. And the hardwares are quite diverse.
评论 #21878875 未加载
spectramaxover 5 years ago
For any high level software engineer, looking to get into embedded development: A lot of Arduino, ESP tutorials do not teach you fundamentals. I recommend spending sometime (if not to code along) watching this course: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLPW8O6W-1chwyTzI3BHwBLbGQoPFxPAPM" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLPW8O6W-1chwyTzI3BHwB...</a>
评论 #21879998 未加载
评论 #21881533 未加载
StavrosKover 5 years ago
I can wholeheartedly recommend designing your own PCBs as well. It&#x27;s a lot of fun, and routing the tracks on the PCB is surprisingly calming.
评论 #21881558 未加载
throwaway55554over 5 years ago
This is why I went with a Computer Engineering degree instead of only a CS degree. I love software development, but I wanted to stay as close to the metal as possible.
ChrisMarshallNYover 5 years ago
Can&#x27;t view the Web site (500 Bad gateway).<p>In any case, I sort of went the other way. I started in hardware, and gravitated towards software.<p>I think that each discipline could learn from the other, as most hardware, these days, relies on software as a critical part of its operation, and a lot of software is written as if the hardware on which it depends, doesn&#x27;t exist.<p>I look forward to reading it, once the site is back up.<p>Happy Christmas!
评论 #21879092 未加载
peter_d_shermanover 5 years ago
Excerpts:<p>&quot;The most basic pins are digital pins, they can only either be on or off. You would, for example, use them to check if a button is pressed. Or if you use them as output, turning a led on or off.&quot;<p>[intermediate content deleted for brevity...]<p>&quot;And while those pins cannot output a true analog signal, they can use a technique called PWM to approximate one by only switching the signal on for some time.&quot;<p>Fascinating! Knew about digital pins before this, and PWM generally speaking (with respect to PC fans, power supplies, etc.) -- and yet, I did not proverbially put &quot;2 + 2 together&quot; in my head! (For some inconceivable reason I always conceptualized PWM as analog&#x2F;multiple waves per unit time, in nature...) Yup, makes a ton of sense!<p>Anyway, thanks for the great article!
ddingusover 5 years ago
Right now is a great time to learn about lower level, &quot;on the metal&quot; type programming! Has been for a while now.<p>People, like Ben Eater, are making great kits.<p>Components are not so expensive. You can (and will) fail. Get more, get gear, try again.<p>One can get good gear, scope, meter, solder station, etc... at good prices. Used pro gear is a good option too.<p>Making things, signal generator, logic analyzer, are also fun projects.<p>And there are many programming options from assembly to Python showing up.<p>I love this stuff and often couple it with retro computing. The speeds are low enough to make most things possible for fairly new comers.<p>Jump in. It is fun!<p>Great post OP.
sbierwagenover 5 years ago
<a href="https:&#x2F;&#x2F;blog.athrunen.dev&#x2F;content&#x2F;images&#x2F;2019&#x2F;10&#x2F;ESP32-Pinout-1.png" rel="nofollow">https:&#x2F;&#x2F;blog.athrunen.dev&#x2F;content&#x2F;images&#x2F;2019&#x2F;10&#x2F;ESP32-Pinou...</a><p>Weird, the breakout pin between IO21 and IO19 is silkscreened GND, but the label says NC, not connected. The dev board datasheet[0] says that pin is not connected, which would be a fun trap for someone who tried to use that pin as a ground, but a different schematic on the site says it&#x27;s tied to module ground. They don&#x27;t seem to have a PDF of the actual PCB anywhere I can find.<p>0: <a href="https:&#x2F;&#x2F;www.espressif.com&#x2F;sites&#x2F;default&#x2F;files&#x2F;documentation&#x2F;esp32-wroom-32_datasheet_en.pdf" rel="nofollow">https:&#x2F;&#x2F;www.espressif.com&#x2F;sites&#x2F;default&#x2F;files&#x2F;documentation&#x2F;...</a><p>1: <a href="https:&#x2F;&#x2F;dl.espressif.com&#x2F;dl&#x2F;schematics&#x2F;ESP32-Core-Board-V2_sch.pdf" rel="nofollow">https:&#x2F;&#x2F;dl.espressif.com&#x2F;dl&#x2F;schematics&#x2F;ESP32-Core-Board-V2_s...</a>
TrackerFFover 5 years ago
Also, might wanna learn some basic electronics.<p>With very modular devices, it&#x27;s easy to avoid that - since you&#x27;re basically building stuff like as with lego bricks, and things are abstracted form you - but if you need &#x2F; want to build your own sensors, or customized setups, you&#x27;ll need to know a thing or two about electronics &#x2F; circuit analysis and design.
评论 #21881500 未加载
评论 #21881370 未加载
anoncowover 5 years ago
The website is down <a href="https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20191225131030&#x2F;https:&#x2F;&#x2F;blog.athrunen.dev&#x2F;learning-hardware-programming-as-a-software-engineer&#x2F;" rel="nofollow">https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20191225131030&#x2F;https:&#x2F;&#x2F;blog.athr...</a>
keithnzover 5 years ago
funny thing is, when &quot;software engineer&quot; as a term came along, it was a bit of a fuzzy term, but here in NZ a lot of people took it as someone who had a engineering background and understood something of electronics&#x2F;mechanical&#x2F;chemical&#x2F;civil engineering, a number of courses made SE have a common first year with the other engineering disciplines. This was more my background I did software &#x2F; electronic engineering and went into embedded systems for electronic&#x2F;mechanical&#x2F;software type systems. Though these days I do more &quot;full stack&quot; systems development but still highly involved in embedded development.<p>But of course, software engineer has no particular definition and lots of people use the term to describe themselves, even if they have no real engineering background.
mx91over 5 years ago
My advice is to read the board and MCU datasheet. Check MCU&#x27;s peripherals, and how they can be used in your application. Some MCU&#x27;s have a PPI (Programmable Peripheral Interconnect) it is clever to use it, as peripherals can operate independently together from the processor, especially combined with direct memory access. Learn bitwise operations as you&#x27;ll need it to configure the peripheral&#x27;s registers. Use a logic analyzer to confirm the bitstream to pinpoint errors.<p>Lately I started experimenting with radios. It is difficult. Let me know if someone has a good guide they read.
spriorover 5 years ago
I don&#x27;t feel like creating a userid on his website just to tell him this, but one thing he seems to have missed that may have caused some of his problems is that the ESP32 I&#x2F;O pins are 3V and NOT 5V tolerant. Elsewhere in the article he seems to assume 5V levels (when he&#x27;s talking about using PWM to output 2.5V from a 5V pin). With an ESP32 or ESP8266 when you need to interface with 5V devices you should use a level shifter.
评论 #21881504 未加载
daveFNbuckover 5 years ago
When I wanted to learn hardware programming for a similar small project, I took on online course [1]. It took a few months, but it gave a pretty solid framework to start from.<p>[1] <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;embedded-systems-shape-the-world-microcontroller-i" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;embedded-systems-shape-the-world-...</a>
Animatsover 5 years ago
All those multi-function pins! That implies a boot-time setup where you tell the system on a chip what each pin is supposed to be doing. Lots of bit field constants to construct. Often more trouble than hooking up to the pins.
troyskover 5 years ago
This is such a gem of a post. I learned the hard way too and I wish this post was posted 5 years back! :) All the best to the author for his future projects.